Ce manuel décrit la procédure complète de déploiement du projet sur un serveur de production de type VPS, depuis la mise à disposition des images Docker jusqu’à la publication de l’application derrière un reverse proxy HTTPS. L’application repose sur plusieurs services spécialisés, seuls le backend FastAPI et Grafana LGTM ont un port sur 127.0.0.1, ils ne sont accessibles que via le serveur Nginx de l’hôte. Les autres services communiquent uniquement au sein du réseau Docker interne app-net.
L’architecture de déploiement côté production peut être résumée de la manière suivante :
127.0.0.1:8000 pour l’API backend127.0.0.1:3001 pour GrafanaLe déploiement nécessite un serveur VPS Ubuntu ou Debian, avec systemd, Docker Engine 20.10+ et Docker Compose v2. Un utilisateur non-root appartenant au groupe docker est recommandé afin d’exécuter les commandes sans privilèges administratifs.
Le serveur doit également disposer de Nginx ou Apache configuré en reverse proxy, ainsi que le logiciel Certbot pour l’obtention et le renouvellement du certificat HTTPS. L’accès sortant vers ghcr.io est nécessaire pour télécharger les images conteneurisées.
Un pare-feu de type UFW doit autoriser uniquement les ports nécessaires pour les protocoles SSH, HTTP, HTTPS.
Les images Docker sont construites et publiées automatiquement par la chaîne d’intégration continue GitHub Actions sur GitHub Container Registry (GHCR). Aucun build n’est réalisé directement sur le VPS, le serveur se contente de récupérer les images publiées.
À chaque push, la CI exécute les contrôles de qualité du code. Chaque image est publiée avec deux tags : latest, utilisé en production, et un tag basé sur le git SHA, permettant de revenir facilement à une version antérieure en cas de rollback.
Le mode de développement local reste disponible à partir du dépôt source, via la commande docker compose up -d --build pour effectuer différents tests avant de push les modifications.
Les commandes de déploiement sont exécutées depuis le répertoire de production copié sur le VPS. Le fichier d’environnement utilisé par Docker Compose est .env. Le déploiement automatisé est pris en charge par le workflow GitHub Actions précédemment mentionné dans la Partie 4 – Protocole de déploiement continu. Après le premier déploiement, et à chaque évolution du schéma de base de données, les migrations Alembic doivent être appliquées afin de garantir la cohérence du modèle de données.
Le reverse proxy Nginx doit ensuite être configuré pour router les requêtes vers les bons services :
/ vers l’interface frontend distribuée par le backend/api/ vers le backend/grafana/ vers la pile d’observabilitéLa configuration Nginx doit également inclure client_max_body_size 500M, indispensable pour l’envoi de fichiers EPUB volumineux. Une fois le DNS correctement configuré, Certbot permet d’activer HTTPS automatiquement. Un exemple de configuration complet est disponible dans docs/nginx/desc-image-ia.conf.example.
Après la mise en service, il convient de vérifier :
Les incidents les plus fréquents concernent :