Déployer Django en production avec Docker, Nginx et Gunicorn
Un guide concret pour passer du serveur de dev à une mise en production fiable : conteneurisation, reverse proxy et fichiers statiques.
Faire tourner runserver en local, c'est facile. Mettre une application Django en
production de façon fiable, c'est une autre histoire. Voici l'architecture que j'utilise sur mes
projets ASITECH.
L'architecture en trois couches
Le trio classique reste imbattable pour la plupart des projets :
- Gunicorn : le serveur d'application WSGI qui exécute Django.
- Nginx : le reverse proxy qui termine le TLS et sert les fichiers statiques.
- Docker : pour un déploiement reproductible, identique en staging et en prod.
Un Dockerfile minimal
FROM python:3.12-slim
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
RUN python manage.py collectstatic --noinput
CMD ["gunicorn", "config.wsgi:application", "--bind", "0.0.0.0:8000"]
Les fichiers statiques
WhiteNoise simplifie énormément la donne : pas besoin de configurer Nginx pour servir le
statique, tout passe par l'application avec compression et cache busting. En activant
CompressedManifestStaticFilesStorage, vos assets sont versionnés automatiquement.
Règle d'or : ne jamais déployer avec DEBUG=True. Vos secrets passent par des
variables d'environnement, jamais dans le code.
Et ensuite ?
Ajoutez un pipeline CI/CD (GitHub Actions), des sauvegardes automatiques de la base et un monitoring basique. C'est ce qui transforme un projet « qui marche » en plateforme de confiance.