Objectif

Conteneuriser l'API FastAPI du module 05 avec un Dockerfile multi-stage et docker-compose incluant PostgreSQL. L'API doit être prête pour la production.

Critères de réussite : Image < 200MB, user non-root, healthcheck fonctionnel, logs JSON, endpoint /health avec check DB.

Prérequis

  • Docker Desktop installé et démarré
  • Récupérez le code du module 05 (mini-projet/solution/)
  • Compréhension de base des conteneurs Docker

Structure

08-deploiement/mini-projet/solution/
├── Dockerfile          # Multi-stage, non-root user
├── docker-compose.yml  # app + db postgres + healthchecks
├── .env.example        # Template des variables d'env
├── .dockerignore       # Exclut venv, __pycache__, .env
└── main.py             # App FastAPI avec /health endpoint

Étapes

  1. Copiez le code du module 05 dans ce dossier
  2. Créez le Dockerfile multi-stage (voir solution)
  3. Créez le .env à partir de .env.example
  4. Créez le docker-compose.yml (app + postgres)
  5. Créez le .dockerignore
  6. Buildez et lancez : docker compose up --build
  7. Testez le health check et l'API

Commandes Docker

# Build seul
docker build --target runtime -t taskapi:1.0 .

# Vérifier la taille de l'image
docker images taskapi

# Lancer avec docker-compose
docker compose up --build

# En arrière-plan
docker compose up -d

# Voir les logs en temps réel
docker compose logs -f app

# Arrêter et supprimer les volumes
docker compose down -v

# Inspecter le healthcheck
docker inspect taskapi_app --format='{{.State.Health}}'

# Se connecter à la DB
docker compose exec db psql -U taskuser -d taskapi

Validation

# 1. Health check
curl http://localhost:8000/health
# → {"status":"ok","uptime_seconds":12.3,"checks":{"database":{"status":"ok"}}}

# 2. Register
curl -X POST http://localhost:8000/auth/register \
  -H "Content-Type: application/json" \
  -d '{"email":"test@test.com","username":"test","password":"TestPass123"}'

# 3. Login
curl -X POST http://localhost:8000/auth/login \
  -d "username=test@test.com&password=TestPass123"

# 4. Docs
open http://localhost:8000/docs
← Retour au cours 🧠 QCM Module 08 🏠 Accueil Formation