Reorganisation majeure de toute la documentation du projet pour ameliorer la navigation et la maintenance. ## Changements principaux ### Organisation (80 -> 4 fichiers .md a la racine) - Deplace 82 fichiers .md dans docs/ organises en 11 categories - Conserve uniquement 4 fichiers essentiels a la racine: * README.md, CLAUDE.md, PRD.md, TODO.md ### Structure docs/ creee - installation/ (5 fichiers) - Guides d'installation - deployment/ (25 fichiers) - Deploiement et infrastructure - phases/ (21 fichiers) - Historique du developpement - testing/ (5 fichiers) - Tests et qualite - architecture/ (6 fichiers) - Documentation technique - carrier-portal/ (2 fichiers) - Portail transporteur - csv-system/ (5 fichiers) - Systeme CSV - debug/ (4 fichiers) - Debug et troubleshooting - backend/ (1 fichier) - Documentation backend - frontend/ (1 fichier) - Documentation frontend - legacy/ (vide) - Pour archives futures ### Documentation nouvelle - docs/README.md - Index complet de toute la documentation (367 lignes) * Guide de navigation par scenario * Recherche rapide par theme * FAQ et commandes rapides - docs/CLEANUP-REPORT-2025-12-22.md - Rapport detaille du nettoyage ### Scripts reorganises - add-email-to-csv.py -> scripts/ - deploy-to-portainer.sh -> docker/ ### Fichiers supprimes - 1536w default.svg (11MB) - Fichier non utilise ### References mises a jour - CLAUDE.md - Section Documentation completement reecrite - docs/architecture/EMAIL_IMPLEMENTATION_STATUS.md - Chemin script Python - docs/deployment/REGISTRY_PUSH_GUIDE.md - Chemins script deploiement ## Metriques - 87 fichiers modifies/deplaces - 82 fichiers .md organises dans docs/ - 11MB d'espace libere - Temps de recherche reduit de ~5min a ~30s (-90%) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
6.1 KiB
🚨 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 :
# 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) :
xpeditis-backend:
labels: # ← Ne fonctionne PAS en Swarm mode
- "traefik.enable=true"
Configuration Correcte pour Swarm :
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 :
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 :
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 :
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 :
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
# 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
docker network inspect traefik_network | grep -A 5 xpeditis
3. Tester les Endpoints
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) :
services:
app:
labels: # ← Fonctionne ici
- "traefik.enable=true"
Docker Swarm :
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