# 🔍 Debug Portainer - Images ARM64 Disponibles Mais Ne Montent Pas ## ✅ VĂ©rifications EffectuĂ©es ### 1. Images Multi-Architecture PrĂ©sentes dans Registry ✅ **Backend** : ```json { "manifests": [ { "platform": { "architecture": "amd64", "os": "linux" } }, { "platform": { "architecture": "arm64", "os": "linux" } } ] } ``` **Frontend** : ```json { "manifests": [ { "platform": { "architecture": "amd64", "os": "linux" } }, { "platform": { "architecture": "arm64", "os": "linux" } } ] } ``` ✅ **Conclusion** : Les images ARM64 existent bien dans le registry Scaleway. ### 2. Stack Portainer Correctement ConfigurĂ© ✅ ```yaml xpeditis-backend: image: rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod # ✅ Tag correct xpeditis-frontend: image: rg.fr-par.scw.cloud/weworkstudio/xpeditis-frontend:preprod # ✅ Tag correct ``` ### 3. Dockerfiles ARM64-Compatible ✅ Les deux Dockerfiles utilisent `node:20-alpine` qui supporte ARM64 nativement. ## 🚹 Causes Possibles du ProblĂšme ### Cause #1 : Registry Credentials Manquants dans Portainer (PROBABLE) **SymptĂŽme** : Portainer ne peut pas pull les images privĂ©es depuis Scaleway. **Erreur typique** : ``` Error response from daemon: pull access denied for rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend, repository does not exist or may require 'docker login' ``` **Solution** : Ajouter les credentials du registry Scaleway dans Portainer. #### Étape 1 : Obtenir les Credentials Scaleway 1. Aller sur [Scaleway Console](https://console.scaleway.com/registry/namespaces) 2. Container Registry → `weworkstudio` 3. **Push/Pull credentials** → CrĂ©er ou copier le token 4. Copier : - **Username** : `nologin` - **Password** : `[le token Scaleway]` #### Étape 2 : Ajouter Registry dans Portainer **Option A : Via Interface Portainer** 1. Portainer → **Registries** 2. **Add registry** 3. Remplir : - **Name** : `Scaleway Registry` - **Registry URL** : `rg.fr-par.scw.cloud/weworkstudio` - **Authentication** : ✅ Activer - **Username** : `nologin` - **Password** : `[token Scaleway]` 4. **Add registry** **Option B : Via Docker Swarm Secret (Plus sĂ©curisĂ©)** ```bash # Sur le serveur Portainer docker login rg.fr-par.scw.cloud/weworkstudio # Username: nologin # Password: [token] # VĂ©rifier que ça marche docker pull rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod ``` #### Étape 3 : Update le Stack Portainer 1. Aller sur Portainer → **Stacks** → Votre stack 2. **Editor** 3. Cocher **"Re-pull image and redeploy"** 4. **Update the stack** --- ### Cause #2 : Docker Swarm Mode Issues **SymptĂŽme** : Le stack utilise `deploy.placement.constraints` (ligne 22-25), ce qui signifie que vous ĂȘtes en **Docker Swarm mode**. **ProblĂšme connu** : Dans Swarm, les nodes doivent avoir accĂšs au registry individuellement. **Solution** : ```bash # Sur CHAQUE node du Swarm docker login rg.fr-par.scw.cloud/weworkstudio # Username: nologin # Password: [token] ``` **VĂ©rifier les nodes Swarm** : ```bash # Sur le manager docker node ls # Devrait montrer tous les nodes READY ``` --- ### Cause #3 : ProblĂšme de Platform Selection **SymptĂŽme** : Docker pull la mauvaise architecture (AMD64 au lieu de ARM64). **Solution** : Forcer la plateforme ARM64 dans le stack Portainer. **Modifier `portainer-stack.yml`** : ```yaml xpeditis-backend: image: rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod platform: linux/arm64 # ← Ajouter cette ligne restart: unless-stopped # ... xpeditis-frontend: image: rg.fr-par.scw.cloud/weworkstudio/xpeditis-frontend:preprod platform: linux/arm64 # ← Ajouter cette ligne restart: unless-stopped # ... ``` **Note** : Normalement Docker dĂ©tecte automatiquement l'architecture, mais forcer `platform` garantit le bon choix. --- ### Cause #4 : ProblĂšme de RĂ©seau Portainer → Registry **SymptĂŽme** : Portainer ne peut pas atteindre Scaleway registry depuis le serveur ARM. **Test** : ```bash # Sur le serveur Portainer curl -I https://rg.fr-par.scw.cloud/v2/ # Devrait retourner : # HTTP/2 401 (Unauthorized est OK, ça signifie que le registry est accessible) ``` Si erreur de connexion : - VĂ©rifier firewall - VĂ©rifier DNS - VĂ©rifier proxy --- ### Cause #5 : Erreur de Build CI/CD (ARM64 CassĂ©) **Test** : VĂ©rifier que l'image ARM64 fonctionne en la testant localement. ```bash # Sur votre Mac (Apple Silicon = ARM64) docker pull --platform linux/arm64 rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod docker run --rm --platform linux/arm64 \ -e DATABASE_HOST=test \ -e DATABASE_PORT=5432 \ -e DATABASE_USER=test \ -e DATABASE_PASSWORD=test \ -e DATABASE_NAME=test \ -e REDIS_HOST=test \ -e REDIS_PORT=6379 \ -e JWT_SECRET=test \ rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod \ node -e "console.log('ARM64 works!')" # Devrait afficher "ARM64 works!" sans erreur ``` Si erreur de build : - VĂ©rifier les logs GitHub Actions - VĂ©rifier que buildx a bien compilĂ© ARM64 --- ## 🎯 Diagnostic Rapide ### Commandes Ă  ExĂ©cuter sur le Serveur Portainer (ARM64) ```bash # 1. VĂ©rifier architecture du serveur uname -m # Devrait afficher : aarch64 ou arm64 # 2. VĂ©rifier que Docker peut voir le registry docker manifest inspect rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod # 3. Tester le pull manuel (SANS login) docker pull rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod # Si erreur "access denied" → C'est un problĂšme de credentials ✅ # 4. Login et retry docker login rg.fr-par.scw.cloud/weworkstudio # Username: nologin # Password: [token] docker pull rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod # Devrait maintenant rĂ©ussir ✅ # 5. VĂ©rifier que c'est bien ARM64 docker image inspect rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod | grep Architecture # Devrait afficher : "Architecture": "arm64" ``` --- ## 📋 Checklist de RĂ©solution - [ ] **VĂ©rifier que le serveur est bien ARM64** : `uname -m` - [ ] **Tester pull manuel SANS login** → Si erreur "access denied" = problĂšme credentials - [ ] **Ajouter registry dans Portainer** : Registries → Add registry → Scaleway - [ ] **Login Docker sur le serveur** : `docker login rg.fr-par.scw.cloud/weworkstudio` - [ ] **Si Swarm mode** : Login sur TOUS les nodes - [ ] **Forcer platform ARM64** : Ajouter `platform: linux/arm64` dans stack - [ ] **Tester pull manuel AVEC login** → Devrait rĂ©ussir - [ ] **Update stack Portainer** avec "Re-pull image and redeploy" - [ ] **VĂ©rifier logs des conteneurs** : Portainer → Containers → Logs --- ## 🔧 Solution la Plus Probable **90% du temps, c'est un problĂšme de registry credentials manquants.** ### Solution Rapide (5 minutes) ```bash # 1. SSH sur le serveur Portainer ssh votre-serveur # 2. Login Docker docker login rg.fr-par.scw.cloud/weworkstudio # Username: nologin # Password: [copier le token depuis Scaleway Console] # 3. Test pull docker pull rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod # Si ça marche, retourner sur Portainer et update le stack ``` **Ensuite dans Portainer** : 1. Stacks → Votre stack 2. Editor 3. ✅ Cocher "Re-pull image and redeploy" 4. Update the stack Les conteneurs devraient maintenant dĂ©marrer ! 🎉 --- ## 📊 Tableau de Diagnostic | SymptĂŽme | Cause Probable | Solution | |----------|----------------|----------| | `access denied` ou `authentication required` | Credentials manquants | Ajouter registry dans Portainer | | `manifest unknown` | Image n'existe pas | VĂ©rifier tag (`:preprod`) | | `no matching manifest for linux/arm64` | Image AMD64 uniquement | Rebuild avec ARM64 (dĂ©jĂ  fait ✅) | | Pull rĂ©ussit mais container crash | Erreur applicative | VĂ©rifier logs container | | Stuck Ă  "Preparing" | RĂ©seau lent ou proxy | VĂ©rifier connexion Scaleway | --- **Date** : 2025-11-19 **Status** : 🔍 Diagnostic complet - Attente test sur serveur Portainer **Action Suivante** : ExĂ©cuter les commandes de diagnostic sur le serveur ARM64