# 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) ```bash # 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 : ```bash 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 ```bash ./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://:3001` | | API Docs (Swagger) | `http://:8001/docs` | | Health check | `http://: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 : ```powershell # 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 : ```bash 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 ```bash # 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://:8001/health` → `{"status":"healthy"}` - [ ] `http://: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 ```bash # 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) : ```bash # /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 ```bash docker compose -f docker-compose/docker-compose.prod.yml logs ``` ### Réseau Docker saturé ```bash docker network prune -f ``` ### Espace disque ```bash docker system df docker system prune -a -f ``` ### Réinitialiser la base de données ```bash 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 ```