183 lines
4.6 KiB
Markdown
183 lines
4.6 KiB
Markdown
# 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://<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 :
|
|
|
|
```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://<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
|
|
|
|
```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
|
|
```
|