# 🚹 Fix 404 - Traefik Ne Route Pas vers les Containers ## ✅ Diagnostic **SymptĂŽmes** : - ✅ Backend dĂ©marre correctement : `Nest application successfully started` - ✅ Frontend dĂ©marre correctement : `✓ Ready in XXms` - ❌ 404 sur https://app.preprod.xpeditis.com - ❌ 404 sur https://api.preprod.xpeditis.com **Conclusion** : Les containers fonctionnent, mais **Traefik ne les trouve pas**. --- ## 🔍 Causes Possibles ### Cause 1 : Containers Pas dans le RĂ©seau Traefik **VĂ©rification** : ```bash # VĂ©rifier que les containers sont dans traefik_network docker network inspect traefik_network --format '{{range .Containers}}{{.Name}} {{end}}' # Devrait afficher : # xpeditis_xpeditis-backend.X.XXX # xpeditis_xpeditis-frontend.X.XXX ``` **Si absents**, le problĂšme vient du fait que Docker Swarm ne connecte pas automatiquement les services aux rĂ©seaux externes. --- ### Cause 2 : Labels Traefik Mal InterprĂ©tĂ©s en Swarm Mode En Docker Swarm, les labels doivent ĂȘtre sous `deploy.labels` et non directement sous `labels`. **Configuration Actuelle (INCORRECTE pour Swarm)** : ```yaml xpeditis-backend: labels: # ← Ne fonctionne PAS en Swarm mode - "traefik.enable=true" ``` **Configuration Correcte pour Swarm** : ```yaml xpeditis-backend: deploy: labels: # ← Doit ĂȘtre sous deploy.labels - "traefik.enable=true" ``` --- ### Cause 3 : Traefik Pas ConfigurĂ© pour Swarm Mode Traefik doit avoir `swarmMode: true` dans sa configuration. **VĂ©rification** : ```bash docker service inspect traefik --pretty | grep -A 5 "Args" # Devrait contenir : # --providers.docker.swarmMode=true ``` --- ## ✅ Solution : Corriger le Stack pour Swarm Mode ### Modification 1 : DĂ©placer Labels sous `deploy.labels` **Backend** : ```yaml xpeditis-backend: image: rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod restart: unless-stopped # ... environment ... networks: - xpeditis_internal - traefik_network deploy: labels: # ← DÉPLACER ICI - "traefik.enable=true" - "traefik.http.routers.xpeditis-api.rule=Host(`api.preprod.xpeditis.com`)" - "traefik.http.routers.xpeditis-api.entrypoints=websecure" - "traefik.http.routers.xpeditis-api.tls=true" - "traefik.http.routers.xpeditis-api.tls.certresolver=letsencrypt" - "traefik.http.services.xpeditis-api.loadbalancer.server.port=4000" - "traefik.docker.network=traefik_network" ``` **Frontend** : ```yaml xpeditis-frontend: image: rg.fr-par.scw.cloud/weworkstudio/xpeditis-frontend:preprod restart: unless-stopped # ... environment ... networks: - traefik_network deploy: labels: # ← DÉPLACER ICI - "traefik.enable=true" - "traefik.http.routers.xpeditis-app.rule=Host(`app.preprod.xpeditis.com`) || Host(`www.preprod.xpeditis.com`)" - "traefik.http.routers.xpeditis-app.entrypoints=websecure" - "traefik.http.routers.xpeditis-app.tls=true" - "traefik.http.routers.xpeditis-app.tls.certresolver=letsencrypt" - "traefik.http.services.xpeditis-app.loadbalancer.server.port=3000" - "traefik.docker.network=traefik_network" ``` **MinIO** : ```yaml xpeditis-minio: image: minio/minio:latest restart: unless-stopped # ... environment ... networks: - xpeditis_internal - traefik_network deploy: labels: # ← DÉPLACER ICI - "traefik.enable=true" - "traefik.http.routers.xpeditis-minio-api.rule=Host(`s3.preprod.xpeditis.com`)" - "traefik.http.routers.xpeditis-minio-api.entrypoints=websecure" - "traefik.http.routers.xpeditis-minio-api.tls=true" - "traefik.http.routers.xpeditis-minio-api.tls.certresolver=letsencrypt" - "traefik.http.services.xpeditis-minio-api.loadbalancer.server.port=9000" - "traefik.http.routers.xpeditis-minio-console.rule=Host(`minio.preprod.xpeditis.com`)" - "traefik.http.routers.xpeditis-minio-console.entrypoints=websecure" - "traefik.http.routers.xpeditis-minio-console.tls=true" - "traefik.http.routers.xpeditis-minio-console.tls.certresolver=letsencrypt" - "traefik.http.services.xpeditis-minio-console.loadbalancer.server.port=9001" - "traefik.docker.network=traefik_network" ``` --- ## 📋 Stack Complet CorrigĂ© pour Swarm Je vais crĂ©er le fichier corrigĂ© complet dans le prochain message. --- ## 🔧 VĂ©rification Post-Update AprĂšs avoir updatĂ© le stack : ### 1. VĂ©rifier que Traefik Voit les Services ```bash # Voir les routers Traefik docker exec $(docker ps -q -f name=traefik) traefik healthcheck # Ou via logs Traefik docker service logs traefik --tail 50 | grep xpeditis ``` **Logs attendus** : ``` Creating router xpeditis-api Creating service xpeditis-api ``` ### 2. VĂ©rifier les Containers ConnectĂ©s au Network ```bash docker network inspect traefik_network | grep -A 5 xpeditis ``` ### 3. Tester les Endpoints ```bash curl -I https://api.preprod.xpeditis.com/api/v1/health # Devrait retourner : HTTP/2 200 curl -I https://app.preprod.xpeditis.com # Devrait retourner : HTTP/2 200 ``` --- ## 🎯 RĂ©sumĂ© du Fix | ProblĂšme | Cause | Solution | |----------|-------|----------| | 404 sur API/Frontend | Labels Traefik sous `labels` au lieu de `deploy.labels` | DĂ©placer tous les labels sous `deploy.labels` | | Traefik ne voit pas les services | Swarm mode nĂ©cessite configuration spĂ©ciale | Utiliser `deploy.labels` | --- ## ⚠ Note Importante : Docker Compose vs Swarm **Docker Compose (standalone)** : ```yaml services: app: labels: # ← Fonctionne ici - "traefik.enable=true" ``` **Docker Swarm** : ```yaml services: app: deploy: labels: # ← REQUIS en Swarm mode - "traefik.enable=true" ``` Votre stack utilise `deploy.placement.constraints`, donc vous ĂȘtes **en mode Swarm**, d'oĂč le problĂšme. --- **Date** : 2025-11-19 **ProblĂšme** : Labels Traefik mal placĂ©s (hors de `deploy`) **Solution** : DĂ©placer tous les labels sous `deploy.labels` **ETA Fix** : 5 minutes