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.

4 min read

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.

1. Structure du docker-compose.yml

On va ajouter 2 services :

  1. postgres – ta base de données
  2. strapi – ton backend Strapi 5
docker-compose.yml
1
version: '3.8'
2
services:
3
postgres:
4
image: postgres:15-alpine
5
container_name: ecommerce_db
6
environment:
7
- POSTGRES_DB=${DATABASE_NAME}
8
- POSTGRES_USER=${DATABASE_USERNAME}
9
- POSTGRES_PASSWORD=${DATABASE_PASSWORD}
10
volumes:
11
- db_data:/var/lib/postgresql/data
12
ports:
13
- '5432:5432'
14
15
strapi:
16
build:
17
context: .
18
dockerfile: Dockerfile
19
container_name: ecommerce_strapi
20
depends_on:
21
- postgres
22
environment:
23
- DATABASE_CLIENT=postgres
24
- DATABASE_HOST=postgres
25
- DATABASE_PORT=5432
26
- DATABASE_NAME=${DATABASE_NAME}
27
- DATABASE_USERNAME=${DATABASE_USERNAME}
28
- DATABASE_PASSWORD=${DATABASE_PASSWORD}
29
- JWT_SECRET=${JWT_SECRET}
30
- STRAPI_TOKEN=${STRAPI_TOKEN}
31
ports:
32
- '1337:1337'
33
volumes:
34
- ./:/opt/app
35
command: npm run develop
36
37
volumes:
38
db_data:

Points clés

  • depends_on assure 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) :

Terminal
1
cat > .env <<EOF
2
DATABASE_NAME=ecommerce
3
DATABASE_USERNAME=strapi
4
DATABASE_PASSWORD=strapi
5
JWT_SECRET=changeme123
6
STRAPI_TOKEN=securetoken456
7
EOF
  • DATABASE_* : pour la connexion à Postgres
  • JWT_SECRET et STRAPI_TOKEN : requis par Strapi pour la génération de tokens.

3. Configuration database de Strapi

Dans Strapi, la config se trouve dans config/database.ts ou config/database.js. Ici on utilise TS :

config/database.ts
1
export default ({ env }) => ({ // ^? env - fonction pour lire .env
2
connection: {
3
client: 'postgres',
4
connection: {
5
host: env('DATABASE_HOST', 'localhost'),
6
port: env.int('DATABASE_PORT', 5432),
7
database: env('DATABASE_NAME'),
8
user: env('DATABASE_USERNAME'),
9
password: env('DATABASE_PASSWORD'),
10
ssl: env.bool('DATABASE_SSL', false),
11
},
12
debug: 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 ssl en 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 :

Dockerfile
1
FROM node:18-alpine3.18
2
3
# dépendances pour sharp/vips (optimisation d’images)
4
RUN apk update && apk add --no-cache \
5
build-base gcc libpng-dev vips-dev bash git
6
7
WORKDIR /opt/app
8
COPY package.json package-lock.json ./
9
RUN npm install
10
11
COPY . .
12
RUN chown -R node:node /opt/app
13
USER node
14
15
EXPOSE 1337
16
CMD ["npm", "run", "develop"]

5. Lancer les services

  1. Construis et démarre :
    Terminal
    1
    docker-compose up -d --build
  2. Vérifie les logs Strapi :
    Terminal
    1
    docker-compose logs -f strapi
  3. Va à http://localhost:1337/admin pour initialiser ton admin.

6. Vérifications et bonnes pratiques

  • Vérifie que la table users-permissions_role existe dans Postgres via docker 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

  1. Ajouter un service Redis

    • Mets en place un service redis:6-alpine dans docker-compose.yml.
    • Configure Strapi pour le cache Redis via un plugin.
  2. SSL en prod

    • Modifie la config pour activer DATABASE_SSL depuis .env.
    • Teste la connexion avec un conteneur Docker simulant SSL (self-signed).
  3. Basculer sur MySQL

    • Remplace postgres par mysql:8 dans Docker Compose.
    • Adapte config/database.ts pour charger le client mysql.

Tu es maintenant prêt à rendre ton backend Strapi robuste et versionné avec Docker Compose !