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
- Copiez le code du module 05 dans ce dossier
- Créez le
Dockerfilemulti-stage (voir solution) - Créez le
.envà partir de.env.example - Créez le
docker-compose.yml(app + postgres) - Créez le
.dockerignore - Buildez et lancez :
docker compose up --build - 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