# 🚨 Debug Portainer - Containers Crash en Boucle ## 📊 Symptômes Observés ``` xpeditis-backend: replicated 0 / 1 (should be 1/1) xpeditis-frontend: replicated 0 / 1 (should be 1/1) Tasks Status: "complete" puis "starting" répété → Les containers démarrent puis crashent immédiatement ``` **404 sur les URLs** : - https://app.preprod.xpeditis.com → 404 - https://api.preprod.xpeditis.com → 404 **Cause** : Traefik ne trouve pas les containers car ils ne sont pas en état "running". --- ## 🔍 Diagnostic Immédiat ### Étape 1 : Vérifier les Logs Backend **Portainer → Services → xpeditis_xpeditis-backend → Logs** **Chercher** : #### Erreur Possible 1 : Migrations Échouent ``` ❌ Error during migration: relation "XXX" already exists ``` **Solution** : Volume database corrompu, le recréer. #### Erreur Possible 2 : Variables Manquantes ``` ❌ Config validation error: "DATABASE_HOST" is required ``` **Solution** : Vérifier que toutes les variables sont dans le stack. #### Erreur Possible 3 : Connection Database Failed ``` ❌ Failed to connect to PostgreSQL after 30 attempts ``` **Solution** : PostgreSQL pas accessible ou credentials invalides. #### Erreur Possible 4 : Port Déjà Utilisé ``` ❌ Error: listen EADDRINUSE: address already in use :::4000 ``` **Solution** : Ancien container toujours actif, le supprimer. --- ### Étape 2 : Vérifier les Logs Frontend **Portainer → Services → xpeditis_xpeditis-frontend → Logs** **Chercher** : #### Erreur Possible 1 : Server.js Manquant ``` ❌ Error: Cannot find module '/app/server.js' ``` **Solution** : Image mal buildée, vérifier CI/CD. #### Erreur Possible 2 : Port Déjà Utilisé ``` ❌ Error: listen EADDRINUSE: address already in use :::3000 ``` **Solution** : Ancien container toujours actif. --- ## ⚡ Solutions Rapides ### Solution 1 : Nettoyer et Redéployer **Sur le serveur Portainer via SSH** : ```bash # 1. Supprimer tous les containers du stack docker service rm xpeditis_xpeditis-backend docker service rm xpeditis_xpeditis-frontend docker service rm xpeditis_xpeditis-redis docker service rm xpeditis_xpeditis-minio docker service rm xpeditis_xpeditis-db # 2. Attendre que tout soit nettoyé docker service ls | grep xpeditis # Devrait être vide # 3. Supprimer le réseau interne (si nécessaire) docker network rm xpeditis_xpeditis_internal 2>/dev/null || true # 4. Dans Portainer : Supprimer le stack # Portainer → Stacks → xpeditis → Remove stack # 5. Recréer le stack avec le YAML corrigé # Portainer → Stacks → Add stack → Copier portainer-stack.yml ``` --- ### Solution 2 : Vérifier les Images ARM64 ```bash # Sur le serveur Portainer docker manifest inspect rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod | grep architecture # Devrait afficher : # "architecture": "arm64" # Si seulement AMD64 : # Vérifier que la CI/CD a bien rebuild avec ARM64 support ``` --- ### Solution 3 : Vérifier le Network Traefik ```bash # Sur le serveur Portainer docker network ls | grep traefik_network # Si absent : docker network create --driver=overlay traefik_network # Vérifier que Traefik est bien running docker ps | grep traefik ``` --- ## 🔧 Problèmes Connus et Fixes ### Problème 1 : Swarm Mode vs Compose Mode **Votre stack utilise Docker Swarm** (`deploy.placement.constraints`). **Vérifier** : ```bash docker info | grep Swarm # Devrait afficher : Swarm: active ``` **Si Swarm pas initialisé** : ```bash docker swarm init ``` --- ### Problème 2 : Registry Credentials en Swarm En Docker Swarm, les credentials du registry doivent être configurés **différemment** : ```bash # Option 1 : Login sur chaque node docker login rg.fr-par.scw.cloud/weworkstudio # Username: nologin # Password: [token] # Option 2 : Utiliser un Docker Config echo "nologin" | docker secret create registry_username - echo "[token]" | docker secret create registry_password - ``` --- ### Problème 3 : Volumes Pas Montés Correctement ```bash # Vérifier que les volumes existent docker volume ls | grep xpeditis # Devrait afficher : # xpeditis_xpeditis_db_data # xpeditis_xpeditis_redis_data # xpeditis_xpeditis_minio_data ``` --- ## 📋 Checklist de Debug ### 1. Logs Backend - [ ] Voir les logs : `docker service logs xpeditis_xpeditis-backend --tail 50` - [ ] Identifier l'erreur exacte (migration, connection, validation) ### 2. Logs Frontend - [ ] Voir les logs : `docker service logs xpeditis_xpeditis-frontend --tail 50` - [ ] Vérifier que server.js existe ### 3. Images - [ ] Vérifier ARM64 : `docker manifest inspect ...` - [ ] Vérifier que les images existent dans le registry ### 4. Network - [ ] `docker network ls | grep traefik_network` → doit exister - [ ] `docker network ls | grep xpeditis_internal` → doit exister ### 5. Swarm - [ ] `docker info | grep Swarm` → doit être "active" - [ ] `docker node ls` → tous les nodes "READY" ### 6. Registry - [ ] `docker login rg.fr-par.scw.cloud/weworkstudio` → doit réussir - [ ] Test pull manuel : `docker pull rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod` --- ## 🎯 Commandes de Debug Essentielles ```bash # 1. Voir les logs backend (dernières 50 lignes) docker service logs xpeditis_xpeditis-backend --tail 50 --follow # 2. Voir les logs frontend docker service logs xpeditis_xpeditis-frontend --tail 50 --follow # 3. Voir l'état des services docker service ls # 4. Voir les tasks (tasks = tentatives de démarrage) docker service ps xpeditis_xpeditis-backend --no-trunc # 5. Inspecter un service docker service inspect xpeditis_xpeditis-backend --pretty # 6. Vérifier les erreurs de déploiement docker service ps xpeditis_xpeditis-backend --format "{{.Error}}" ``` --- ## 🚨 Erreur Critique Probable **Le problème le plus probable** : ### Hypothèse 1 : Images Pas Accessibles (Registry Credentials) ```bash # Test docker pull rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod # Si erreur "access denied" : docker login rg.fr-par.scw.cloud/weworkstudio # Username: nologin # Password: [token Scaleway] ``` ### Hypothèse 2 : Migrations Crashent Le backend essaie de run les migrations mais elles échouent. **Solution** : ```bash # Supprimer le volume database et recréer docker volume rm xpeditis_xpeditis_db_data # Redéployer le stack (migrations créeront les tables from scratch) ``` ### Hypothèse 3 : Variables d'Environnement Manquantes Vérifier dans les logs si une variable est manquante. --- ## ✅ Action Immédiate à Faire **Sur le serveur Portainer, exécuter** : ```bash # 1. Voir l'erreur exacte du backend docker service logs xpeditis_xpeditis-backend --tail 100 # 2. Copier-coller les dernières lignes d'erreur ici ``` **Ensuite je pourrai vous donner la solution exacte !** --- **Date** : 2025-11-19 **Status** : 🔴 Containers crashent - Besoin logs pour diagnostic **Action Requise** : Voir les logs backend/frontend pour identifier l'erreur exacte