Files
Imago/docs/DEPLOYMENT.md
bruno 13a40555f7
CI / Lint & Format (push) Failing after 8s
CI / Tests (push) Has been skipped
CI / Security Scan (push) Failing after 7s
CI / Docker Build (push) Has been skipped
docs: mise à jour DEPLOYMENT.md et PRODUCTION_CHECKLIST pour nouvelle structure
2026-06-24 10:57:36 -04:00

4.6 KiB

Guide de déploiement — Imago sur serveur Docker

Cible : serveur Linux avec Docker 24+, Docker Compose v2 Registry : docker-registry.dev.home:5000 (images pré-buildées)


Déploiement rapide (2 commandes)

# 1. Cloner le dépôt
git clone https://git.dracodev.net/Projets/Imago.git /opt/imago
cd /opt/imago

# 2. Préparer le serveur (une seule fois)
sudo ./scripts/setup.sh

Déconnectez/reconnectez-vous (groupe docker), puis :

cd /opt/imago
./scripts/deploy.sh

L'assistant interactif vous guide : choix du stockage (local/S3), configuration AI, OCR, CORS. Les secrets sont générés automatiquement.

Commandes quotidiennes

./scripts/deploy.sh -u     # Mise à jour (pull + recréation)
./scripts/deploy.sh -s     # État des conteneurs
./scripts/deploy.sh -l     # Logs en temps réel
./scripts/deploy.sh --reconfigure  # Modifier la configuration

URLs d'accès

Service URL
Admin UI http://<serveur>:3001
API Docs (Swagger) http://<serveur>:8001/docs
Health check http://<serveur>:8001/health

Structure du projet

/opt/imago/
├── docker-compose/
│   ├── docker-compose.yml          # Développement
│   ├── docker-compose.prod.yml     # Production
│   └── .env.example                # Template
├── scripts/
│   ├── setup.sh                    # Préparation serveur
│   └── deploy.sh                   # Déploiement
├── .env                            # Config (généré par deploy.sh)
└── backups/                        # Dumps PostgreSQL

Build des images (développeurs)

Depuis un poste Windows avec WSL Debian :

# Backend
cd C:\dev\git\python\imago
docker build --no-cache -t docker-registry.dev.home:5000/imago-backend:latest -f Dockerfile .
docker push docker-registry.dev.home:5000/imago-backend:latest

# Admin (React + Nginx)
cd imago-admin
docker build --no-cache -t docker-registry.dev.home:5000/imago-admin:latest .
docker push docker-registry.dev.home:5000/imago-admin:latest

Configuration manuelle du .env (sans l'assistant)

Si vous préférez créer le .env manuellement :

cp docker-compose/.env.example .env
nano .env

Variables essentielles :

Variable Description
SECRET_KEY Clé secrète (générer : openssl rand -hex 32)
STORAGE_BACKEND local ou s3
UPLOAD_DIR Chemin uploads dans le conteneur
SIGNED_URL_SECRET Clé pour URLs signées HMAC
OPENROUTER_API_KEY Clé API OpenRouter (ou GEMINI_API_KEY)
CORS_ORIGINS JSON array des origines autorisées

Pour le stockage S3, ajouter : S3_BUCKET, S3_ENDPOINT_URL, S3_ACCESS_KEY, S3_SECRET_KEY, S3_REGION.


Services

Service Image Port interne Rôle
backend imago-backend:latest 8000 API FastAPI
admin imago-admin:latest 80 Interface React + Nginx
db postgres:16-alpine 5432 Base de données
redis redis:7-alpine 6379 Cache, broker, pub/sub

Vérifications post-déploiement

# Santé de l'API
curl http://localhost:8001/health

# Santé détaillée
curl http://localhost:8001/health/detailed

# État des conteneurs
./scripts/deploy.sh -s

Checklist :

  • http://<serveur>:8001/health → {"status":"healthy"}
  • http://<serveur>:3001 → page de login accessible
  • Connexion admin avec la clé bootstrap (affichée dans les logs au 1er démarrage)
  • Upload d'une image test → traitement OK
  • Suppression d'une image → OK

Sauvegardes

# Backup manuel
docker exec imago-db-1 pg_dump -U imago imago > ./backups/imago_$(date +%Y%m%d).sql

# Restauration
docker exec -i imago-db-1 psql -U imago imago < ./backups/imago_20250101.sql

Pour automatiser (cron) :

# /etc/cron.d/imago-backup
0 2 * * * root docker exec imago-db-1 pg_dump -U imago imago > /opt/imago/backups/imago_$(date +\%Y\%m\%d).sql
0 3 * * * root find /opt/imago/backups -name "*.sql" -mtime +30 -delete

Résolution de problèmes

Les conteneurs ne démarrent pas

docker compose -f docker-compose/docker-compose.prod.yml logs

Réseau Docker saturé

docker network prune -f

Espace disque

docker system df
docker system prune -a -f

Réinitialiser la base de données

docker compose -f docker-compose/docker-compose.prod.yml down -v db
docker compose -f docker-compose/docker-compose.prod.yml up -d db
# Attendre que la BDD soit prête, puis relancer les autres services