Déploiement (Docker & CI/CD)¶
Le projet fournit un environnement Docker complet et un pipeline CI/CD GitHub Actions prêt à l’emploi.
Docker¶
Fichiers fournis :
Dockerfile— Image de production basée sur Python 3.13-slim + gunicorndocker-compose.yml— Stack complète (API, PostgreSQL, Redis, Celery worker, Celery beat).dockerignore— Exclut les fichiers non nécessaires à l’image
Démarrer la stack complète¶
# Copier le fichier d'environnement
cp .env.example .env
# Lancer tous les services
docker compose up -d
# Vérifier le statut
docker compose ps
Services disponibles :
Service |
Port |
Description |
|---|---|---|
|
8000 |
Django API (gunicorn, hot-reload en dev) |
|
5433 |
PostgreSQL 17 |
|
6379 |
Redis 7 (cache + broker Celery) |
|
— |
Worker Celery (2 workers concurrents) |
|
— |
Scheduler Celery (tâches périodiques) |
Variables d’environnement¶
Toute la configuration est externalisée via django-environ et le
fichier .env. Voir .env.example pour la référence complète.
Variable |
Description |
|---|---|
|
Clé secrète Django (obligatoire en production) |
|
Mode debug ( |
|
Hosts autorisés (séparés par des virgules) |
|
URL de connexion PostgreSQL |
|
URL Redis (laisser vide pour cache mémoire locale) |
|
Origines CORS autorisées (séparées par des virgules) |
|
DSN Sentry (laisser vide pour désactiver) |
|
Backend email Django |
|
Serveur SMTP par défaut |
|
Credentials SMTP |
|
Adresse expéditeur par défaut |
CI/CD — GitHub Actions¶
Le pipeline .github/workflows/ci.yml s’exécute sur chaque push et PR :
Lint —
ruff check+ruff format --checkTest —
pytest --covavec PostgreSQL en service containerDocker — Build de l’image Docker (uniquement sur
master/main)
Le rapport de couverture est uploadé en artifact.
Health Check¶
L’endpoint GET /health/ vérifie la connectivité de la base de données
et du cache. Utilisé par les load balancers et les probes Kubernetes.
{
"status": "healthy",
"checks": {
"database": {"status": "ok", "latency_ms": 1.23},
"cache": {"status": "ok", "latency_ms": 0.45}
}
}
HTTP 200 — tous les checks passent
HTTP 503 — au moins un check échoue