# 🔍 Commandes de Debug Portainer - Status REJECTED

## Problème
Les tâches Docker Swarm passent de `pending` à `rejected`, ce qui signifie que le conteneur ne peut pas démarrer.

## Commandes de Diagnostic

### 1. Voir les logs détaillés du service

```bash
# Backend
docker service logs xpeditis_xpeditis-backend --tail=100 --follow

# Frontend
docker service logs xpeditis_xpeditis-frontend --tail=100 --follow

# Voir TOUTES les erreurs depuis le début
docker service logs xpeditis_xpeditis-backend --no-trunc
```

### 2. Inspecter le service pour voir l'erreur exacte

```bash
# Backend
docker service ps xpeditis_xpeditis-backend --no-trunc

# Frontend
docker service ps xpeditis_xpeditis-frontend --no-trunc

# Cela va montrer la raison du rejet dans la colonne "ERROR"
```

### 3. Vérifier l'état du service

```bash
docker service inspect xpeditis_xpeditis-backend --pretty
docker service inspect xpeditis_xpeditis-frontend --pretty
```

### 4. Tester manuellement le pull de l'image

```bash
# Teste si l'image peut être téléchargée
docker pull rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod
docker pull rg.fr-par.scw.cloud/weworkstudio/xpeditis-frontend:preprod

# Si erreur "unauthorized" → problème de credentials
# Si erreur "manifest unknown" → l'image n'existe pas
# Si erreur "connection refused" → problème réseau
```

### 5. Vérifier les credentials du registry

```bash
# Vérifie si tu es login au registry
docker info | grep -A 5 "Registry"

# Login au registry Scaleway
docker login rg.fr-par.scw.cloud/weworkstudio
# Username: nologin
# Password: <REGISTRY_TOKEN>
```

---

## 🐛 Erreurs Communes et Solutions

### Erreur 1: "no suitable node (insufficient resources)"
**Cause**: Pas assez de RAM/CPU sur le serveur
**Solution**:
```bash
# Vérifie les ressources disponibles
docker node ls
docker node inspect <node-id> --pretty

# Libère de l'espace
docker system prune -a
```

### Erreur 2: "image not found" ou "manifest unknown"
**Cause**: L'image n'existe pas dans le registry
**Solution**:
1. Vérifie que le CI/CD a bien terminé
2. Vérifie sur Scaleway Console que les images existent
3. Vérifie les tags disponibles

### Erreur 3: "unauthorized: authentication required"
**Cause**: Docker Swarm n'a pas les credentials du registry
**Solution**:
```bash
# Sur CHAQUE nœud du Swarm:
docker login rg.fr-par.scw.cloud/weworkstudio

# OU configure le registry dans Portainer:
# Portainer → Registries → Add registry
# Name: Scaleway
# URL: rg.fr-par.scw.cloud/weworkstudio
# Username: nologin
# Password: <REGISTRY_TOKEN>
```

### Erreur 4: "pull access denied"
**Cause**: Token Scaleway expiré ou invalide
**Solution**:
1. Génère un nouveau token sur Scaleway Console
2. Mets à jour le secret GitHub Actions `REGISTRY_TOKEN`
3. Mets à jour les credentials dans Portainer

### Erreur 5: "network xpeditis_internal not found"
**Cause**: Le réseau overlay n'existe pas
**Solution**:
```bash
# Crée le réseau manuellement
docker network create --driver overlay --internal xpeditis_internal

# Redéploie la stack
docker stack deploy -c portainer-stack.yml xpeditis
```

### Erreur 6: "traefik_network not found"
**Cause**: Le réseau Traefik externe n'existe pas
**Solution**:
```bash
# Vérifie que Traefik est bien déployé
docker network ls | grep traefik

# Si le réseau n'existe pas, crée-le:
docker network create --driver overlay traefik_network
```

### Erreur 7: "container failed to start"
**Cause**: L'application crash au démarrage
**Solution**:
```bash
# Voir les logs de démarrage
docker service logs xpeditis_xpeditis-backend --tail=200

# Erreurs courantes:
# - Variables d'environnement manquantes
# - Database non accessible
# - Redis non accessible
# - Port déjà utilisé
```

---

## 🔧 Commandes de Réparation

### Redémarrer complètement la stack

```bash
# Supprime la stack
docker stack rm xpeditis

# Attends 30 secondes que tout se nettoie
sleep 30

# Redéploie
docker stack deploy -c portainer-stack.yml xpeditis
```

### Forcer le re-pull des images

```bash
# Update le service avec force
docker service update --force --image rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod xpeditis_xpeditis-backend

docker service update --force --image rg.fr-par.scw.cloud/weworkstudio/xpeditis-frontend:preprod xpeditis_xpeditis-frontend
```

### Vérifier la configuration de la stack

```bash
# Valide le fichier compose
docker stack config -c portainer-stack.yml

# Cela va afficher les warnings/erreurs de configuration
```

---

## 📊 Monitoring en Temps Réel

```bash
# Surveille les événements Docker
docker events --filter type=service

# Surveille les tasks qui échouent
watch -n 2 'docker service ps xpeditis_xpeditis-backend --no-trunc'

# Surveille tous les services de la stack
docker stack ps xpeditis --no-trunc --filter "desired-state=running"
```

---

## 🎯 Workflow de Debug Recommandé

1. **Voir l'erreur exacte**:
   ```bash
   docker service ps xpeditis_xpeditis-backend --no-trunc
   ```

2. **Lire les logs**:
   ```bash
   docker service logs xpeditis_xpeditis-backend --tail=100
   ```

3. **Tester le pull manuel**:
   ```bash
   docker pull rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod
   ```

4. **Vérifier les dépendances** (DB, Redis, MinIO):
   ```bash
   docker service ls
   docker service ps xpeditis_xpeditis-db
   docker service ps xpeditis_xpeditis-redis
   docker service ps xpeditis_xpeditis-minio
   ```

5. **Redéployer si nécessaire**:
   ```bash
   docker service update --force xpeditis_xpeditis-backend
   ```

---

## 🔐 Configuration Registry dans Portainer

Via l'interface Portainer:

1. **Registries** → **Add registry**
2. Remplis:
   - **Name**: `Scaleway Container Registry`
   - **Registry URL**: `rg.fr-par.scw.cloud/weworkstudio`
   - **Authentication**: ✅ ON
   - **Username**: `nologin`
   - **Password**: `<TON_REGISTRY_TOKEN>` (le même que dans GitHub Secrets)
3. **Add registry**

4. **Stacks** → **xpeditis** → **Editor**
5. En bas de la page, sélectionne le registry nouvellement ajouté
6. **Update the stack**

---

## 📝 Checklist de Vérification

- [ ] CI/CD GitHub Actions terminé avec succès
- [ ] Images existent sur Scaleway Container Registry
- [ ] Registry configuré dans Portainer avec credentials
- [ ] Réseau `traefik_network` existe
- [ ] PostgreSQL, Redis, MinIO démarrent correctement
- [ ] Variables d'environnement correctes dans la stack
- [ ] Pas d'erreur de pull dans `docker service ps`
- [ ] Logs de démarrage ne montrent pas d'erreur

---

## 🆘 Si Rien ne Fonctionne

1. **Supprime et redéploie tout**:
   ```bash
   docker stack rm xpeditis
   sleep 30
   docker system prune -f
   docker stack deploy -c portainer-stack.yml xpeditis
   ```

2. **Vérifie manuellement avec docker-compose** (en local sur le serveur):
   ```bash
   # Convertis la stack en docker-compose
   docker-compose -f portainer-stack.yml config

   # Lance en mode local pour debug
   docker-compose -f portainer-stack.yml up backend
   ```

3. **Contacte le support Scaleway** si problème de registry

---

## 📞 Informations Importantes

- **Registry Scaleway**: `rg.fr-par.scw.cloud/weworkstudio`
- **Images**:
  - Backend: `rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod`
  - Frontend: `rg.fr-par.scw.cloud/weworkstudio/xpeditis-frontend:preprod`
- **Username registry**: `nologin`
- **Password registry**: Dans GitHub Secrets `REGISTRY_TOKEN`
