4.4 KiB
⚡ Fix 404 - Labels Traefik pour Docker Swarm
🎯 Problème Identifié
✅ Backend et frontend démarrent correctement ❌ 404 sur toutes les URLs
Cause : Labels Traefik placés sous labels au lieu de deploy.labels (requis en Docker Swarm mode).
✅ Solution : Utiliser le Nouveau Stack
J'ai créé un nouveau fichier portainer-stack-swarm.yml avec tous les labels correctement placés.
Différence Clé
Avant (INCORRECT pour Swarm) :
xpeditis-backend:
labels: # ← Ne fonctionne PAS
- "traefik.enable=true"
Après (CORRECT pour Swarm) :
xpeditis-backend:
deploy:
restart_policy:
condition: on-failure
labels: # ← REQUIS ici
- "traefik.enable=true"
🚀 Étapes de Déploiement
1. Supprimer l'Ancien Stack (Portainer UI)
- Portainer → Stacks →
xpeditis - Remove stack → Confirmer
2. Créer le Nouveau Stack
- Portainer → Stacks → Add stack
- Name :
xpeditis-preprod - Build method : Web editor
- Copier TOUT le contenu de
docker/portainer-stack-swarm.yml - Deploy the stack
3. Attendre le Déploiement (~2-3 min)
Portainer → Services :
- ✅
xpeditis_xpeditis-backend: 1/1 - ✅
xpeditis_xpeditis-frontend: 1/1 - ✅
xpeditis_xpeditis-db: 1/1 - ✅
xpeditis_xpeditis-redis: 1/1 - ✅
xpeditis_xpeditis-minio: 1/1
4. Vérifier les Logs
Backend :
✅ Database migrations completed
🚀 Application is running on: http://0.0.0.0:4000
Frontend :
✓ Ready in XXms
5. Tester les URLs
curl https://api.preprod.xpeditis.com/api/v1/health
# Réponse attendue : {"status":"ok"}
curl -I https://app.preprod.xpeditis.com
# Réponse attendue : HTTP/2 200
🔍 Modifications Appliquées
1. Labels Déplacés sous deploy.labels
✅ Backend : Labels Traefik maintenant sous deploy.labels
✅ Frontend : Labels Traefik maintenant sous deploy.labels
✅ MinIO : Labels Traefik maintenant sous deploy.labels
2. Restart Policy Ajoutée
deploy:
restart_policy:
condition: on-failure # ← Remplace "restart: unless-stopped"
En Swarm mode, restart ne fonctionne pas. Utiliser deploy.restart_policy à la place.
3. Middleware Redirect Complété
- "traefik.http.routers.xpeditis-minio-http.middlewares=xpeditis-redirect"
Ajout du middleware manquant pour redirection HTTP → HTTPS.
📊 Comparaison
| Fichier | Usage | Compatibilité |
|---|---|---|
portainer-stack.yml |
❌ NE FONCTIONNE PAS en Swarm | Docker Compose standalone |
portainer-stack-swarm.yml |
✅ UTILISER CELUI-CI | Docker Swarm mode |
✅ Checklist Post-Déploiement
- Stack créé dans Portainer avec
portainer-stack-swarm.yml - Tous les services en état 1/1 (running)
- Logs backend :
✅ Database migrations completed - Logs frontend :
✓ Ready in XXms - API health :
curl https://api.preprod.xpeditis.com/api/v1/health→ 200 - Frontend :
curl https://app.preprod.xpeditis.com→ 200 - MinIO Console :
curl https://minio.preprod.xpeditis.com→ 200
🎯 Résultat Attendu
Avant :
GET https://api.preprod.xpeditis.com → 404 page not found
GET https://app.preprod.xpeditis.com → 404 page not found
Après :
GET https://api.preprod.xpeditis.com/api/v1/health → {"status":"ok"}
GET https://app.preprod.xpeditis.com → 200 OK (page d'accueil)
⚠️ Si Toujours 404 Après Fix
Vérifier que Traefik Voit les Services
# Via SSH sur le serveur
docker service logs traefik --tail 50 | grep xpeditis
# Devrait afficher :
# level=debug msg="Creating router xpeditis-api"
# level=debug msg="Creating service xpeditis-api"
Vérifier le Network Traefik
docker network inspect traefik_network | grep -A 5 xpeditis
# Devrait afficher les containers xpeditis
Forcer Traefik à Reload
docker service update --force traefik
Date : 2025-11-19
Fix : Labels Traefik déplacés sous deploy.labels
Fichier : docker/portainer-stack-swarm.yml
Status : ✅ Prêt pour déploiement
ETA : 5 minutes