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 + gunicorn

  • docker-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

api

8000

Django API (gunicorn, hot-reload en dev)

db

5433

PostgreSQL 17

redis

6379

Redis 7 (cache + broker Celery)

celery-worker

Worker Celery (2 workers concurrents)

celery-beat

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

DJANGO_SECRET_KEY

Clé secrète Django (obligatoire en production)

DJANGO_DEBUG

Mode debug (True / False)

DJANGO_ALLOWED_HOSTS

Hosts autorisés (séparés par des virgules)

DATABASE_URL

URL de connexion PostgreSQL

REDIS_URL

URL Redis (laisser vide pour cache mémoire locale)

CORS_ALLOWED_ORIGINS

Origines CORS autorisées (séparées par des virgules)

SENTRY_DSN

DSN Sentry (laisser vide pour désactiver)

EMAIL_BACKEND

Backend email Django

EMAIL_HOST / EMAIL_PORT

Serveur SMTP par défaut

EMAIL_HOST_USER / EMAIL_HOST_PASSWORD

Credentials SMTP

DEFAULT_FROM_EMAIL

Adresse expéditeur par défaut

CI/CD — GitHub Actions

Le pipeline .github/workflows/ci.yml s’exécute sur chaque push et PR :

  1. Lintruff check + ruff format --check

  2. Testpytest --cov avec PostgreSQL en service container

  3. Docker — 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