Déploiement
Préparer Django pour la production
Pour visualiser le code relatif à ce chapitre : git diff v1.12.2..v1.13.0.
1. Cache
Pour commencer, nous allons activer le cache de Django en nous appuyant sur Redis.
Nous devons donc ajouter un nouveau conteneur à Docker :
tuto_django_redis:
container_name: tuto_django_redis
image: redis:latest
ports:
- "6379:6379"
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 3
Ajoutons ensuite les éléments suivants au conteneur principal :
tuto_django:
...
depends_on:
tuto_django_postgres:
...
tuto_django_redis:
condition: service_healthy
environment:
...
- REDIS_URL=redis://tuto_django_redis:6379
Il faut également installer un nouvel outil : django-redis.
$ make bash
$ poetry add django-redis
Cette commande met à jour les fichiers pyproject.toml et poetry.lock.
Nous pouvons également ajouter directement la ligne suivante dans pyproject.toml :
django-redis = "^6.0.0"
Puis générer un fichier poetry.lock cohérent avec ce dernier :
$ make lock
Une fois ceci fait, il faut reconstruire le conteneur :
$ make build
Nous pouvons ensuite ajouter la configuration suivante dans le fichier project/settings.py :
REDIS_URL = os.environ.get("REDIS_URL")
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': f'{REDIS_URL}/1', # Redis URL...Déploiement
Nous pouvons commencer par apporter quelques améliorations mineures à notre Dockerfile :
FROM python:3.13-slim
ENV PYTHONUNBUFFERED 1
ENV LANG=C.UTF-8
ARG UID=1000
ARG GID=1000
ARG POETRY_VERSION=2.2.1
RUN apt update && apt install -y \
vim \
make \
gcc \
gettext \
graphviz \
graphviz-dev \
libpq-dev \
&& apt clean \
&& rm -rf /var/lib/apt/lists/*
RUN pip install --upgrade pip
RUN pip install poetry=="${POETRY_VERSION}"
RUN groupadd -g "${GID}" django && useradd --create-home
--no-log-init -u "${UID}" -g "${GID}" django
RUN mkdir /opt/app
RUN chown "${UID}:${GID}" /opt/app
USER django
WORKDIR /opt/app
COPY --chown="${UID}:${GID}" . /opt/app
RUN poetry install --no-interaction -no-ansi
WORKDIR /opt/app/project
Ces lignes permettent de mieux maîtriser la version de Poetry utilisée.
Nous allons également installer un serveur d’application destiné à la production, Gunicorn, ainsi qu’un outil annexe utilisé pour préparer la configuration, bcrypt.
$ make bash
$ poetry add gunicorn bcrypt
Cette commande met à jour les fichiers pyproject.toml et poetry.lock.
On peut aussi rajouter directement la ligne suivante dans pyproject.toml :
bcrypt = "^5.0.0"
gunicorn = "^23.0.0"
Puis générer un fichier poetry.lock cohérent avec ce dernier :
$ make lock
Une fois ceci fait, il faut reconstruire le conteneur :
$ make build
Nous pouvons maintenant travailler sur le fichier Docker Compose de notre application.
Avant cela, précisons qu’un environnement de production peut exécuter plusieurs services et s’appuyer sur plusieurs serveurs : l’un pour la base de données...