# 🚀 Guide Push Images vers Registry Scaleway

## ❌ Problème

Portainer ne peut pas pull les images car elles n'existent pas dans le registry Scaleway :
- `rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod`
- `rg.fr-par.scw.cloud/weworkstudio/xpeditis-frontend:preprod`

## 📋 Checklist Avant de Push

- [ ] Docker Desktop est démarré
- [ ] Vous avez accès au registry Scaleway
- [ ] Les images locales sont à jour avec les dernières modifications

---

## 🔧 Solution Étape par Étape

### Étape 1 : Login au Registry Scaleway

```bash
# Login avec les credentials Scaleway
docker login rg.fr-par.scw.cloud/weworkstudio

# Vous serez invité à entrer :
# Username: <votre_username_scaleway>
# Password: <votre_token_scaleway>
```

**Si vous n'avez pas les credentials** :
1. Aller sur [console.scaleway.com](https://console.scaleway.com)
2. Container Registry → weworkstudio
3. Generate API token
4. Copier le token

---

### Étape 2 : Build Backend avec le bon tag

```bash
# Se positionner dans le dossier backend
cd apps/backend

# Build l'image avec le tag Scaleway
docker build \
  --platform linux/amd64 \
  -t rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod \
  .

# Vérifier que l'image est créée
docker images | grep xpeditis-backend

# Devrait afficher :
# rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend   preprod   <IMAGE_ID>   <TIME>   337MB
```

⏱️ **Temps estimé** : 2-3 minutes

---

### Étape 3 : Push Backend vers Registry

```bash
# Push l'image backend
docker push rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod

# Vous devriez voir :
# The push refers to repository [rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend]
# preprod: digest: sha256:... size: ...
```

⏱️ **Temps estimé** : 3-5 minutes (selon connexion)

---

### Étape 4 : Build Frontend avec le bon tag

```bash
# Retour à la racine
cd ../..

# Se positionner dans le dossier frontend
cd apps/frontend

# Build l'image avec le tag Scaleway
docker build \
  --platform linux/amd64 \
  -t rg.fr-par.scw.cloud/weworkstudio/xpeditis-frontend:preprod \
  .

# Vérifier que l'image est créée
docker images | grep xpeditis-frontend

# Devrait afficher :
# rg.fr-par.scw.cloud/weworkstudio/xpeditis-frontend   preprod   <IMAGE_ID>   <TIME>   165MB
```

⏱️ **Temps estimé** : 2-3 minutes

---

### Étape 5 : Push Frontend vers Registry

```bash
# Push l'image frontend
docker push rg.fr-par.scw.cloud/weworkstudio/xpeditis-frontend:preprod

# Vous devriez voir :
# The push refers to repository [rg.fr-par.scw.cloud/weworkstudio/xpeditis-frontend]
# preprod: digest: sha256:... size: ...
```

⏱️ **Temps estimé** : 2-3 minutes

---

### Étape 6 : Vérifier sur Scaleway Console

1. Aller sur [console.scaleway.com](https://console.scaleway.com)
2. Container Registry → weworkstudio
3. Vérifier que vous voyez :
   - ✅ `xpeditis-backend:preprod`
   - ✅ `xpeditis-frontend:preprod`

---

## 🤖 Utilisation du Script Automatisé

**Option recommandée** : Utiliser le script fourni

```bash
# Rendre le script exécutable
chmod +x docker/deploy-to-portainer.sh

# Option 1 : Build et push tout
./docker/deploy-to-portainer.sh all

# Option 2 : Backend seulement
./docker/deploy-to-portainer.sh backend

# Option 3 : Frontend seulement
./docker/deploy-to-portainer.sh frontend
```

Le script fait automatiquement :
1. ✅ Vérifie que Docker est démarré
2. 🔨 Build les images avec le bon tag
3. 📤 Push vers le registry
4. 📋 Affiche un résumé

---

## 🔍 Vérification des Images sur le Registry

### Via Docker CLI

```bash
# Vérifier que l'image backend existe
docker manifest inspect rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod

# Vérifier que l'image frontend existe
docker manifest inspect rg.fr-par.scw.cloud/weworkstudio/xpeditis-frontend:preprod

# Si les commandes retournent un JSON, les images existent ✅
# Si erreur "manifest unknown", les images n'existent pas ❌
```

### Via Scaleway Console

1. Console Scaleway → Container Registry
2. Sélectionner `weworkstudio`
3. Chercher `xpeditis-backend` et `xpeditis-frontend`
4. Vérifier le tag `preprod`

---

## ⚠️ Erreurs Courantes

### Erreur 1 : "denied: requested access to the resource is denied"

**Cause** : Pas authentifié au registry

**Solution** :
```bash
docker login rg.fr-par.scw.cloud/weworkstudio
# Entrer username et token Scaleway
```

---

### Erreur 2 : "no such host"

**Cause** : URL du registry incorrecte

**Solution** : Vérifier l'URL exacte dans la console Scaleway

---

### Erreur 3 : "server gave HTTP response to HTTPS client"

**Cause** : Docker essaie d'utiliser HTTP au lieu de HTTPS

**Solution** :
```bash
# Vérifier que le registry est en HTTPS
# Le registry Scaleway utilise toujours HTTPS
# Vérifier votre configuration Docker
```

---

### Erreur 4 : Build échoue avec "no space left on device"

**Cause** : Pas assez d'espace disque

**Solution** :
```bash
# Nettoyer les images inutilisées
docker system prune -a

# Vérifier l'espace disponible
docker system df
```

---

## 🎯 Après le Push

Une fois les images pushées :

1. **Aller sur Portainer** : https://portainer.weworkstudio.com
2. **Stacks** → `xpeditis-preprod`
3. Cliquer sur **Editor**
4. Vérifier que le YAML contient :
   ```yaml
   xpeditis-backend:
     image: rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod

   xpeditis-frontend:
     image: rg.fr-par.scw.cloud/weworkstudio/xpeditis-frontend:preprod
   ```
5. Cocher **✅ Re-pull image and redeploy**
6. Cliquer **Update the stack**

---

## 📊 Résumé des Commandes

### Build et Push - Version Complète

```bash
# 1. Login
docker login rg.fr-par.scw.cloud/weworkstudio

# 2. Backend
cd apps/backend
docker build --platform linux/amd64 -t rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod .
docker push rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod

# 3. Frontend
cd ../frontend
docker build --platform linux/amd64 -t rg.fr-par.scw.cloud/weworkstudio/xpeditis-frontend:preprod .
docker push rg.fr-par.scw.cloud/weworkstudio/xpeditis-frontend:preprod

# 4. Vérification
cd ../..
docker images | grep rg.fr-par.scw.cloud
```

### Build et Push - Version Script

```bash
# Plus simple et recommandé
chmod +x docker/deploy-to-portainer.sh
./docker/deploy-to-portainer.sh all
```

---

## 🔐 Sécurité

### Token Scaleway

**Ne jamais** commit ou partager votre token Scaleway !

Le token doit être stocké :
- ✅ Dans Docker credentials (après `docker login`)
- ✅ Dans un gestionnaire de mots de passe
- ❌ PAS dans Git
- ❌ PAS en clair dans un fichier

### Rotation des Tokens

Recommandé de changer le token tous les 90 jours :
1. Console Scaleway → API Tokens
2. Révoquer l'ancien token
3. Créer un nouveau token
4. Faire un nouveau `docker login`

---

## 📞 Besoin d'Aide ?

Si les images ne peuvent toujours pas être pullées après ces étapes :

1. **Vérifier les logs Portainer** :
   - Stacks → xpeditis-preprod → Logs
   - Chercher "manifest unknown" ou "access denied"

2. **Vérifier les permissions** :
   - Console Scaleway → IAM
   - Vérifier que votre compte a accès au registry

3. **Tester manuellement** :
   ```bash
   # Sur votre machine
   docker pull rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod

   # Si ça fonctionne localement mais pas sur Portainer,
   # le problème vient de l'accès de Portainer au registry
   ```

---

## ✅ Checklist Finale

Avant de dire que c'est résolu :

- [ ] `docker login` réussi
- [ ] Images backend et frontend buildées
- [ ] Images pushées vers le registry Scaleway
- [ ] Images visibles sur console.scaleway.com
- [ ] `docker manifest inspect` retourne du JSON (pas d'erreur)
- [ ] Portainer peut pull les images (pas d'erreur dans les logs)

---

**Date** : 2025-11-19
**Version** : 1.0
**Statut** : Guide complet pour résoudre les problèmes de pull
