Structure de base
services:
app:
build: .
volumes:
- .:/app
- /app/node_modules
ports:
- "3000:3000"
db:
image: postgres:16-alpine
volumes:
- pgdata:/var/lib/postgresql/data
nginx:
image: nginx:alpine
ports:
- "80:80"
depends_on:
- app
volumes:
pgdata:Pourquoi Nginx en dev ?
Un reverse proxy en dev permet de reproduire exactement le comportement de prod : même domaine, même gestion des headers, même routing. Ça évite les surprises CORS.
Hot-reload avec volumes
Le trick /app/node_modules est essentiel : il monte le dossier local dans le conteneur mais préserve les node_modules installés à l'image, ce qui évite les conflits binaires.
Variables d'env par service
J'utilise des fichiers .env.service séparés par service plutôt qu'un unique .env à la racine. Ça permet de compartimenter les secrets et de voir clairement quelles variables chaque service consomme.