Qovans Docs
Architecture

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

RessourceValeur
ServeurVPS Debian 13, 4 vCPU, 8 GB RAM, 30 GB disque
IP81.22.222.96
Frontendhttps://espaceclient.qovans.com (port 3000)
APIhttps://apicegid.qovans.com (port 8000)
HTTPSCaddy (certificats Let's Encrypt automatiques)
Projet/opt/qovans/

Connexion SSH :

ssh -i ~/.ssh/vps_qovans root@81.22.222.96

Services Docker

Le fichier docker-compose.prod.yml definit quatre services :

ServiceImagePortRAMRole
postgrespostgres:155432 (local)1 GBBase de donnees
miniominio/minio9000, 9001 (local)512 MBStockage images/PDF
backendBuild local8000 (host network)2 GBAPI FastAPI
frontendBuild local3000512 MBNext.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.comlocalhost:3000 (frontend)
  • apicegid.qovans.comlocalhost: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@audaxium

Le 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 :

VariableDescription
POSTGRES_PASSWORDMot de passe PostgreSQL
SECRET_KEYCle JWT (generer avec openssl rand -hex 32)
CEGID_BASE_URLURL API Cegid (http://192.168.4.110/CegidMTSWebAPI)
CEGID_FOLDER_IDDossier comptable (CLIPS en prod, CLIPS_TEST en test)
CEGID_USERNAME / CEGID_PASSWORDIdentifiants NTLM
CORS_ORIGINSOrigines autorisees (domaine frontend)
FRONTEND_URLURL du frontend (https://espaceclient.qovans.com)
NEXT_PUBLIC_API_URLURL API vue du navigateur (https://apicegid.qovans.com/api/v1)
MINIO_ROOT_PASSWORDMot de passe MinIO
BREVO_API_KEYCle 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 :

VolumeContenuCritique
postgres-dataBase PostgreSQLOui — voir Sauvegardes
minio-dataImages produits, PDFOui
backend-uploadsFichiers uploadesNon

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.