Configurer la base de données et Docker Compose
Préparez la base de données et l’environnement de développement avec Docker et Docker Compose.
Configurer la base de données et Docker Compose
Dans cette leçon, tu vas apprendre à :
- Préparer une base de données PostgreSQL pour Strapi 5
- Orchestrer tes services backend et base de données avec Docker Compose
- Relier les variables d’environnement à la config Strapi
Ton objectif : avoir un environnement local Dockerisé où Remix, Strapi et PostgreSQL tournent ensemble, prêts pour le développement.
Pourquoi Docker Compose et PostgreSQL ?
- Docker Compose te permet de définir et lancer plusieurs conteneurs en une seule commande.
- PostgreSQL est robuste, open-source et bien supporté par Strapi 5.
- Tu gardes une configuration reproductible pour toute ton équipe ou CI/CD.
Tip
Pense « Infrastructure as code » : ta compose file versionnée garantit que chacun développe et teste dans le même contexte.
1. Structure du docker-compose.yml
On va ajouter 2 services :
- postgres – ta base de données
- strapi – ton backend Strapi 5
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_onassure que Postgres démarre avant Strapi.- Les variables
${...}seront chargées depuis un fichier.env. - On mappe le dossier de l’app pour un rechargement à chaud.
2. Fichier .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
- DATABASE_* : pour la connexion à Postgres
- JWT_SECRET et STRAPI_TOKEN : requis par Strapi pour la génération de tokens.
Sécurité
Ne partage jamais ton .env en clair. Utilise un vault ou tes secrets CI/CD en production.
3. Configuration database de Strapi
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
- On utilise
env()pour sécuriser et fallback si nécessaire. client: 'postgres'cible bien notre moteur de base de données.- Active
sslen prod si tu utilises une base distante.
4. Dockerfile pour Strapi
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"]
Permissions
Veille à exécuter sous un user non-root pour éviter les soucis de fichiers et de sécurité.
5. Lancer les services
- Construis et démarre :
Terminal1docker-compose up -d --build
- Vérifie les logs Strapi :
Terminal1docker-compose logs -f strapi
- Va à
http://localhost:1337/adminpour initialiser ton admin.
Tip
Si tu changes la config DB, pense à supprimer le volume avec docker-compose down -v pour repartir propre.
6. Vérifications et bonnes pratiques
- Vérifie que la table
users-permissions_roleexiste dans Postgres viadocker exec -it ecommerce_db psql…. - Utilise PgAdmin ou un client SQL pour inspecter tes données.
- Documente toujours tes variables d’environnement dans un README.
Exercices rapides
-
Ajouter un service Redis
- Mets en place un service
redis:6-alpinedansdocker-compose.yml. - Configure Strapi pour le cache Redis via un plugin.
- Mets en place un service
-
SSL en prod
- Modifie la config pour activer
DATABASE_SSLdepuis.env. - Teste la connexion avec un conteneur Docker simulant SSL (self-signed).
- Modifie la config pour activer
-
Basculer sur MySQL
- Remplace
postgresparmysql:8dans Docker Compose. - Adapte
config/database.tspour charger le clientmysql.
- Remplace
Tu es maintenant prêt à rendre ton backend Strapi robuste et versionné avec Docker Compose !