4.6 KiB
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