All checks were successful
CI/CD Pipeline / Backend - Build, Test & Push (push) Successful in 6m17s
CI/CD Pipeline / Frontend - Build, Test & Push (push) Successful in 14m45s
CI/CD Pipeline / Integration Tests (push) Has been skipped
CI/CD Pipeline / Deployment Summary (push) Successful in 2s
CI/CD Pipeline / Discord Notification (Failure) (push) Has been skipped
CI/CD Pipeline / Discord Notification (Success) (push) Successful in 2s
177 lines
5.2 KiB
Markdown
177 lines
5.2 KiB
Markdown
# Support Multi-Architecture (ARM64 + AMD64)
|
|
|
|
## 🎯 Problème Résolu
|
|
|
|
Le serveur Portainer tourne sur architecture **ARM64**, mais la CI/CD buildait uniquement des images **AMD64**. Cela causait des erreurs de compatibilité lors du déploiement.
|
|
|
|
## ✅ Solution Implémentée
|
|
|
|
La CI/CD build maintenant des images **multi-architecture** compatibles ARM64 et AMD64.
|
|
|
|
### Modifications dans `.github/workflows/ci.yml`
|
|
|
|
**Backend (ligne 73)** :
|
|
```yaml
|
|
platforms: linux/amd64,linux/arm64
|
|
```
|
|
|
|
**Frontend (ligne 141)** :
|
|
```yaml
|
|
platforms: linux/amd64,linux/arm64
|
|
```
|
|
|
|
## 📦 Images Multi-Architecture
|
|
|
|
Lorsque la CI/CD push vers le registry Scaleway, elle crée des **manifests multi-architecture** :
|
|
|
|
```bash
|
|
# Backend
|
|
rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod
|
|
├── linux/amd64
|
|
└── linux/arm64
|
|
|
|
# Frontend
|
|
rg.fr-par.scw.cloud/weworkstudio/xpeditis-frontend:preprod
|
|
├── linux/amd64
|
|
└── linux/arm64
|
|
```
|
|
|
|
Docker/Portainer sélectionne automatiquement l'architecture correcte lors du pull.
|
|
|
|
## ⚙️ Comment Ça Fonctionne
|
|
|
|
**Docker Buildx** utilise **QEMU emulation** sur GitHub Actions pour compiler les images ARM64 sur des runners AMD64 :
|
|
|
|
1. `docker/setup-buildx-action@v3` active Buildx
|
|
2. Buildx détecte les plateformes `linux/amd64,linux/arm64`
|
|
3. Compile nativement pour AMD64
|
|
4. Utilise QEMU pour cross-compiler vers ARM64
|
|
5. Crée un manifest avec les deux architectures
|
|
6. Push tout vers le registry
|
|
|
|
## 🚀 Déploiement
|
|
|
|
### Sur Serveur ARM64 (Portainer)
|
|
|
|
```bash
|
|
docker pull rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod
|
|
# ✅ Pull automatiquement l'image linux/arm64
|
|
```
|
|
|
|
### Sur Serveur AMD64 (Cloud classique)
|
|
|
|
```bash
|
|
docker pull rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod
|
|
# ✅ Pull automatiquement l'image linux/amd64
|
|
```
|
|
|
|
## 📊 Impact sur le Build Time
|
|
|
|
Le build multi-architecture prend environ **2x plus de temps** :
|
|
- Build AMD64 seul : ~5-7 min
|
|
- Build AMD64 + ARM64 : ~10-15 min
|
|
|
|
C'est normal car il compile deux fois l'image (une pour chaque architecture).
|
|
|
|
## 🔍 Vérifier l'Architecture d'une Image
|
|
|
|
```bash
|
|
# Voir les architectures disponibles
|
|
docker manifest inspect rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod
|
|
|
|
# Output attendu :
|
|
# {
|
|
# "manifests": [
|
|
# { "platform": { "architecture": "amd64", "os": "linux" } },
|
|
# { "platform": { "architecture": "arm64", "os": "linux" } }
|
|
# ]
|
|
# }
|
|
```
|
|
|
|
## 📝 Checklist de Déploiement (Mise à Jour)
|
|
|
|
### 1. Configurer GitHub Secret `REGISTRY_TOKEN`
|
|
- Aller sur [Scaleway Console](https://console.scaleway.com/registry/namespaces)
|
|
- Container Registry → weworkstudio → Push/Pull credentials
|
|
- Copier le token
|
|
- GitHub → Settings → Secrets → Actions → New repository secret
|
|
- Nom : `REGISTRY_TOKEN`
|
|
|
|
### 2. Commit et Push vers `preprod`
|
|
|
|
```bash
|
|
git add .
|
|
git commit -m "feat: add ARM64 support for multi-architecture builds"
|
|
git push origin preprod
|
|
```
|
|
|
|
### 3. Vérifier le Build CI/CD
|
|
|
|
Aller sur [GitHub Actions](https://github.com/VOTRE_USERNAME/xpeditis/actions) et attendre :
|
|
- ✅ Backend - Build, Test & Push (10-15 min)
|
|
- ✅ Frontend - Build, Test & Push (10-15 min)
|
|
|
|
### 4. Vérifier les Images dans le Registry
|
|
|
|
```bash
|
|
# Lister les images
|
|
docker manifest inspect rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod
|
|
|
|
# Devrait montrer linux/amd64 ET linux/arm64
|
|
```
|
|
|
|
### 5. Déployer sur Portainer (ARM64)
|
|
|
|
1. Copier le contenu de `docker/portainer-stack.yml`
|
|
2. Aller sur Portainer → Stacks → Update stack
|
|
3. Cocher "Re-pull image and redeploy"
|
|
4. Click "Update"
|
|
|
|
Portainer va automatiquement pull les images ARM64 compatibles ! 🎉
|
|
|
|
## 🛠️ Troubleshooting
|
|
|
|
### Erreur : "no matching manifest for linux/arm64"
|
|
|
|
**Cause** : L'image a été buildée avant l'ajout du support ARM64.
|
|
|
|
**Solution** : Re-trigger la CI/CD pour rebuild avec les deux architectures.
|
|
|
|
### Build Timeout sur GitHub Actions
|
|
|
|
**Cause** : Le build ARM64 via QEMU peut être lent.
|
|
|
|
**Solution** : Augmenter le timeout dans `.github/workflows/ci.yml` :
|
|
|
|
```yaml
|
|
jobs:
|
|
backend:
|
|
timeout-minutes: 30 # Défaut est 360, mais on peut réduire à 30
|
|
```
|
|
|
|
### Image ARM64 Trop Lente au Démarrage
|
|
|
|
**Cause** : C'est normal, QEMU émulation est plus lent que natif.
|
|
|
|
**Alternative** : Utiliser des runners ARM64 natifs (GitHub n'en propose pas gratuitement, mais Scaleway/AWS oui).
|
|
|
|
## 📚 Ressources
|
|
|
|
- [Docker Buildx Multi-Platform](https://docs.docker.com/build/building/multi-platform/)
|
|
- [GitHub Actions ARM64 Support](https://github.blog/changelog/2024-06-03-github-actions-arm64-linux-and-windows-runners-are-now-generally-available/)
|
|
- [Scaleway Container Registry](https://www.scaleway.com/en/docs/containers/container-registry/)
|
|
|
|
## ✅ Résumé
|
|
|
|
| Avant | Après |
|
|
|-------|-------|
|
|
| ❌ Build AMD64 uniquement | ✅ Build AMD64 + ARM64 |
|
|
| ❌ Incompatible avec serveur ARM | ✅ Compatible tous serveurs |
|
|
| ⚡ Build rapide (~7 min) | 🐢 Build plus lent (~15 min) |
|
|
| 📦 1 image par tag | 📦 2 images par tag (manifest) |
|
|
|
|
---
|
|
|
|
**Date** : 2025-01-19
|
|
**Status** : ✅ Implémenté et prêt pour déploiement
|