1. Livres & vidéos
  2. Django
  3. Déploiement
Extrait - Django Concevez vos applications web professionnelles en Python : du modèle de données au déploiement
Extraits du livre
Django Concevez vos applications web professionnelles en Python : du modèle de données au déploiement Revenir à la page d'achat du livre

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...