xpeditis2.0/PORTAINER_CRASH_DEBUG.md
David 6e3191b50e
All checks were successful
CI/CD Pipeline / Backend - Build, Test & Push (push) Successful in 5m45s
CI/CD Pipeline / Frontend - Build, Test & Push (push) Successful in 28m26s
CI/CD Pipeline / Integration Tests (push) Has been skipped
CI/CD Pipeline / Deployment Summary (push) Successful in 1s
CI/CD Pipeline / Deploy to Portainer (push) Successful in 14s
CI/CD Pipeline / Discord Notification (Failure) (push) Has been skipped
CI/CD Pipeline / Discord Notification (Success) (push) Successful in 1s
fix ci/cd and docker
2025-11-20 00:12:01 +01:00

7.1 KiB

🚨 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 :

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 :

# 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

# 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

# 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 :

docker info | grep Swarm
# Devrait afficher : Swarm: active

Si Swarm pas initialisé :

docker swarm init

Problème 2 : Registry Credentials en Swarm

En Docker Swarm, les credentials du registry doivent être configurés différemment :

# 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

# 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

# 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)

# 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 :

# 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 :

# 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