============================== 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 --------------------------- .. code-block:: bash # 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 : .. list-table:: :header-rows: 1 :widths: 20 15 65 * - 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. .. list-table:: :header-rows: 1 :widths: 35 65 * - 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. **Lint** — ``ruff check`` + ``ruff format --check`` 2. **Test** — ``pytest --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. .. code-block:: json { "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