Deploiement
Infrastructure VPS, Docker Compose, reverse proxy Caddy et VPN Cegid.
Qovans tourne sur un VPS Debian avec Docker Compose. Quatre conteneurs cooperent pour servir l'application.
Infrastructure
| Ressource | Valeur |
|---|---|
| Serveur | VPS Debian 13, 4 vCPU, 8 GB RAM, 30 GB disque |
| IP | 81.22.222.96 |
| Frontend | https://espaceclient.qovans.com (port 3000) |
| API | https://apicegid.qovans.com (port 8000) |
| HTTPS | Caddy (certificats Let's Encrypt automatiques) |
| Projet | /opt/qovans/ |
Connexion SSH :
ssh -i ~/.ssh/vps_qovans root@81.22.222.96Services Docker
Le fichier docker-compose.prod.yml definit quatre services :
| Service | Image | Port | RAM | Role |
|---|---|---|---|---|
postgres | postgres:15 | 5432 (local) | 1 GB | Base de donnees |
minio | minio/minio | 9000, 9001 (local) | 512 MB | Stockage images/PDF |
backend | Build local | 8000 (host network) | 2 GB | API FastAPI |
frontend | Build local | 3000 | 512 MB | Next.js standalone |
Le backend utilise network_mode: host pour acceder aux routes VPN (necessaire pour joindre Cegid sur 192.168.4.110).
PostgreSQL et MinIO n'ecoutent que sur 127.0.0.1 — ils ne sont pas accessibles depuis l'exterieur.
Reverse proxy Caddy
Caddy fait office de reverse proxy HTTPS. Il gere automatiquement les certificats Let's Encrypt.
Il route :
espaceclient.qovans.com→localhost:3000(frontend)apicegid.qovans.com→localhost:8000(backend)
La configuration Caddy est dans /etc/caddy/Caddyfile sur le VPS.
VPN Cegid
L'API Cegid (192.168.4.110) est accessible uniquement via le VPN Audaxium. Le VPN tourne sur le host (pas dans Docker) :
sudo systemctl start openvpn-client@audaxium
sudo systemctl status openvpn-client@audaxiumLe serveur Cegid est parfois eteint le weekend — les erreurs 502 sont normales dans ce cas. Voir la page VPN Cegid pour le diagnostic.
Variables d'environnement
Les variables de production sont dans .env.prod sur le VPS. Les principales :
| Variable | Description |
|---|---|
POSTGRES_PASSWORD | Mot de passe PostgreSQL |
SECRET_KEY | Cle JWT (generer avec openssl rand -hex 32) |
CEGID_BASE_URL | URL API Cegid (http://192.168.4.110/CegidMTSWebAPI) |
CEGID_FOLDER_ID | Dossier comptable (CLIPS en prod, CLIPS_TEST en test) |
CEGID_USERNAME / CEGID_PASSWORD | Identifiants NTLM |
CORS_ORIGINS | Origines autorisees (domaine frontend) |
FRONTEND_URL | URL du frontend (https://espaceclient.qovans.com) |
NEXT_PUBLIC_API_URL | URL API vue du navigateur (https://apicegid.qovans.com/api/v1) |
MINIO_ROOT_PASSWORD | Mot de passe MinIO |
BREVO_API_KEY | Cle API Brevo pour les emails |
Le fichier .env.prod.example a la racine du repo contient la liste complete avec les valeurs par defaut.
Volumes Docker
Trois volumes persistent les donnees :
| Volume | Contenu | Critique |
|---|---|---|
postgres-data | Base PostgreSQL | Oui — voir Sauvegardes |
minio-data | Images produits, PDF | Oui |
backend-uploads | Fichiers uploades | Non |
Ces volumes survivent aux redemarrages et rebuilds Docker. Ne jamais lancer docker volume rm sans backup.
Cron jobs
Un crontab sur le VPS lance des synchronisations periodiques :
- Sync produits — met a jour le cache local depuis Cegid SQL
- Sync stocks — rafraichit les stocks par depot
Voir Monitoring pour les logs de ces jobs.