# ⚡ 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)** : ```yaml xpeditis-backend: labels: # ← Ne fonctionne PAS - "traefik.enable=true" ``` **Après (CORRECT pour Swarm)** : ```yaml 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) 1. **Portainer** → **Stacks** → `xpeditis` 2. **Remove stack** → Confirmer ### 2. Créer le Nouveau Stack 1. **Portainer** → **Stacks** → **Add stack** 2. **Name** : `xpeditis-preprod` 3. **Build method** : Web editor 4. **Copier TOUT le contenu** de `docker/portainer-stack-swarm.yml` 5. **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 ```bash 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 ```yaml 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é ```yaml - "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 ```bash # 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 ```bash docker network inspect traefik_network | grep -A 5 xpeditis # Devrait afficher les containers xpeditis ``` ### Forcer Traefik à Reload ```bash 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