xpeditis2.0/FIX_404_SWARM.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

185 lines
4.4 KiB
Markdown

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