Skip to main content

Dockeriser une application Django avec Postgres et Redis

Devin écrit un Dockerfile multi-étapes, un docker-compose.yml avec Django, PostgreSQL et Redis, puis construit et exécute la stack pour vérifier qu'elle fonctionne.
AuthorCognition
CategoryDéveloppement de fonctionnalités
1

(Facultatif) Délimiter le périmètre du projet avec Ask Devin

Si vous ne savez pas sur quels services repose votre application Django ni comment le projet est structuré, utilisez Ask Devin pour commencer votre analyse :Vous pouvez également démarrer une session Devin directement depuis Ask Devin, et Devin conservera tout ce qu’il a appris comme contexte.
2

Transmettez à Devin votre projet Django et votre fichier requirements.txt

Indiquez à Devin quel projet Django containeriser et mentionnez tout besoin spécifique : préférences d’image de base, services dont l’application dépend ou contraintes de taille d’image. Devin lit votre requirements.txt ou pyproject.toml pour déduire le reste.
3

Devin explore et construit

Devin lit votre projet Django et les fichiers de dépendance pour comprendre le processus de build, puis génère la configuration Docker :
  1. Lit les fichiers de dépendance — Analyse requirements.txt ou pyproject.toml, identifie Django, psycopg2, redis, celery et gunicorn
  2. Écrit le Dockerfile — Crée un build multi-étapes qui installe les dépendances dans une étape de build et copie l’environnement virtuel dans une image d’exécution minimale python:3.12-slim
# ---- Builder ----
FROM python:3.12-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN python -m venv /opt/venv \
    && /opt/venv/bin/pip install --no-cache-dir -r requirements.txt

# ---- Runtime ----
FROM python:3.12-slim
RUN groupadd -r django && useradd -r -g django django
COPY --from=builder /opt/venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
WORKDIR /app
COPY src/ .
RUN python manage.py collectstatic --noinput
EXPOSE 8000
USER django
CMD ["gunicorn", "config.wsgi:application", "--bind", "0.0.0.0:8000", "--workers", "3"]
  1. Crée le fichier docker-compose.yml — Ajoute Django, PostgreSQL, Redis et un worker Celery, avec des contrôles d’état, des volumes et un réseau partagé
services:
  web:
    build: .
    ports:
      - "8000:8000"
    env_file: .env
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/api/health/')"]
      interval: 10s
      retries: 3

  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: app_db
      POSTGRES_USER: app_user
      POSTGRES_PASSWORD: app_pass
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U app_user -d app_db"]
      interval: 5s
      retries: 5

  redis:
    image: redis:7-alpine
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      retries: 5

  celery:
    build: .
    command: celery -A config worker -l info
    env_file: .env
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_healthy

volumes:
  pgdata:
  1. Ajoute .dockerignore — Exclut les fichiers qui n’appartiennent pas au contexte de build (__pycache__, .git, tests/, docs/, *.pyc)
  2. Exécute docker compose up --build — Construit l’image et démarre tous les services dans le terminal de Devin
  3. Vérifie l’application — Envoie une requête curl vers /api/health/ pour confirmer que Django démarre correctement, se connecte à PostgreSQL et accède à Redis
4

Pilotez la session avec des commandes slash

Utilisez les commandes slash pendant la session pour orienter le flux de travail de Devin :
  • /plan — Demandez à Devin de présenter sa démarche avant d’écrire toute configuration Docker. Passez en revue le plan et proposez des modifications.
  • /test — Demandez à Devin de reconstruire et de revérifier la pile de conteneurs. Utilisez cette commande après chaque modification pour détecter les problèmes le plus tôt possible.
  • /review — Demandez à Devin de relire son propre Dockerfile et la configuration Compose afin de détecter les problèmes de sécurité, d’optimiser la taille de l’image et d’appliquer les bonnes pratiques avant d’ouvrir la PR.
5

Valider et itérer

Une fois que Devin a ouvert la PR, passez en revue les fichiers générés. Suites possibles :
6

Examinez la PR avec Devin Review

Une fois que Devin a ouvert la PR, utilisez Devin Review pour examiner la configuration Docker. Devin Review peut détecter des problèmes de sécurité (exécution en tant que root, secrets exposés), le non-respect de certaines bonnes pratiques (pas de .dockerignore, aucun health check défini) ainsi que des incohérences avec votre infrastructure existante.