Préparez la base de données et l’environnement de développement avec Docker et Docker Compose.
Dans cette leçon, tu vas apprendre à :
Ton objectif : avoir un environnement local Dockerisé où Remix, Strapi et PostgreSQL tournent ensemble, prêts pour le développement.
Pense « Infrastructure as code » : ta compose file versionnée garantit que chacun développe et teste dans le même contexte.
docker-compose.yml
On va ajouter 2 services :
1version: '3.8'2services:3postgres:4image: postgres:15-alpine5container_name: ecommerce_db6environment:7- POSTGRES_DB=${DATABASE_NAME}8- POSTGRES_USER=${DATABASE_USERNAME}9- POSTGRES_PASSWORD=${DATABASE_PASSWORD}10volumes:11- db_data:/var/lib/postgresql/data12ports:13- '5432:5432'1415strapi:16build:17context: .18dockerfile: Dockerfile19container_name: ecommerce_strapi20depends_on:21- postgres22environment:23- DATABASE_CLIENT=postgres24- DATABASE_HOST=postgres25- DATABASE_PORT=543226- DATABASE_NAME=${DATABASE_NAME}27- DATABASE_USERNAME=${DATABASE_USERNAME}28- DATABASE_PASSWORD=${DATABASE_PASSWORD}29- JWT_SECRET=${JWT_SECRET}30- STRAPI_TOKEN=${STRAPI_TOKEN}31ports:32- '1337:1337'33volumes:34- ./:/opt/app35command: npm run develop3637volumes:38db_data:
Points clés
depends_on
assure que Postgres démarre avant Strapi.${...}
seront chargées depuis un fichier .env
..env
Crée à la racine un .env
non versionné (ajoute-le dans .gitignore
) :
1cat > .env <<EOF2DATABASE_NAME=ecommerce3DATABASE_USERNAME=strapi4DATABASE_PASSWORD=strapi5JWT_SECRET=changeme1236STRAPI_TOKEN=securetoken4567EOF
Ne partage jamais ton .env
en clair. Utilise un vault ou tes secrets CI/CD en production.
Dans Strapi, la config se trouve dans config/database.ts
ou config/database.js
. Ici on utilise TS :
1export default ({ env }) => ({ // ^? env - fonction pour lire .env2connection: {3client: 'postgres',4connection: {5host: env('DATABASE_HOST', 'localhost'),6port: env.int('DATABASE_PORT', 5432),7database: env('DATABASE_NAME'),8user: env('DATABASE_USERNAME'),9password: env('DATABASE_PASSWORD'),10ssl: env.bool('DATABASE_SSL', false),11},12debug: false,13},14})15// @callout: Cette config permet à Strapi de se connecter à Postgres
env()
pour sécuriser et fallback si nécessaire.client: 'postgres'
cible bien notre moteur de base de données.ssl
en prod si tu utilises une base distante.Ton Dockerfile
doit déjà exister. Vérifie qu’il expose le port 1337
et démarre en développement :
1FROM node:18-alpine3.1823# dépendances pour sharp/vips (optimisation d’images)4RUN apk update && apk add --no-cache \5build-base gcc libpng-dev vips-dev bash git67WORKDIR /opt/app8COPY package.json package-lock.json ./9RUN npm install1011COPY . .12RUN chown -R node:node /opt/app13USER node1415EXPOSE 133716CMD ["npm", "run", "develop"]
Veille à exécuter sous un user non-root pour éviter les soucis de fichiers et de sécurité.
1docker-compose up -d --build
1docker-compose logs -f strapi
http://localhost:1337/admin
pour initialiser ton admin.Si tu changes la config DB, pense à supprimer le volume avec docker-compose down -v
pour repartir propre.
users-permissions_role
existe dans Postgres via docker exec -it ecommerce_db psql…
.Ajouter un service Redis
redis:6-alpine
dans docker-compose.yml
.SSL en prod
DATABASE_SSL
depuis .env
.Basculer sur MySQL
postgres
par mysql:8
dans Docker Compose.config/database.ts
pour charger le client mysql
.Tu es maintenant prêt à rendre ton backend Strapi robuste et versionné avec Docker Compose !