Déployer l’application avec Docker et Docker Compose

Préparez le déploiement en production avec Docker, Docker Compose et la configuration serveur.

4 min read

Préparer le déploiement avec Docker

Avant de mettre en production ton site e-commerce (Remix + Strapi 5), Docker et Docker Compose simplifient la gestion des dépendances, des variables d’environnement et des mises à l’échelle sous forme de conteneurs isolés.

Pourquoi Docker ?

  • Isolation des services (Strapi, Postgres, Remix).
  • Reproductibilité garantie (« it works on my machine »).
  • Facilité de mise à l’échelle et d’orchestration.

Structure des fichiers de déploiement

On va créer les éléments suivants :

  • Dockerfile pour Strapi
  • Dockerfile pour Remix
  • .dockerignore
  • docker-compose.yml
strapi/Dockerfile
1
FROM node:18-alpine
2
3
# Définit le répertoire de travail
4
WORKDIR /usr/src/app
5
6
# Copie package.json et package-lock.json pour cacher les
7
# installations aux changements de code
8
COPY package.json package-lock.json ./
9
10
# Installe les dépendances
11
RUN npm ci --production
12
13
# Copie le code source
14
COPY ./src ./src
15
COPY ./config ./config
16
17
# Expose le port Strapi
18
EXPOSE 1337
19
20
# Lancement du serveur Strapi en production
21
CMD ["npm", "run", "start"]
22
23
```docker remix/Dockerfile
24
FROM node:18-alpine
25
26
WORKDIR /usr/src/app
27
28
# Installe les dépendances
29
COPY package.json package-lock.json ./
30
RUN npm ci
31
32
# Copie tout le code front
33
COPY . .
34
35
# Compile le build Remix
36
RUN npm run build
37
38
EXPOSE 3000
39
40
# Démarre le serveur Remix en mode production
41
CMD ["npm", "run", "start"]
.dockerignore
1
node_modules
2
dist
3
.build
4
.env
5
docker-compose.yml
6
Dockerfile*
docker-compose.yml
1
version: "3.8"
2
3
services:
4
strapi:
5
build:
6
context: .
7
dockerfile: Dockerfile.strapi
8
image: strapi-ecommerce:latest
9
restart: unless-stopped
10
env_file: .env
11
ports:
12
- "1337:1337"
13
volumes:
14
- ./config:/usr/src/app/config
15
- ./src:/usr/src/app/src
16
- ./public:/usr/src/app/public
17
depends_on:
18
- db
19
20
db:
21
image: postgres:13-alpine
22
restart: unless-stopped
23
env_file: .env
24
volumes:
25
- strapi-db-data:/var/lib/postgresql/data
26
27
remix:
28
build:
29
context: .
30
dockerfile: Dockerfile.remix
31
image: remix-ecommerce:latest
32
restart: unless-stopped
33
env_file: .env
34
ports:
35
- "3000:3000"
36
depends_on:
37
- strapi
38
39
volumes:
40
strapi-db-data:

Explications pas à pas

1. Dockerfile Strapi

  1. On choisit l’image node:18-alpine pour légèreté.
  2. npm ci --production installe uniquement les dépendances utiles en prod.
  3. Le code est copié après l’installation pour tirer parti du cache Docker.

2. Dockerfile Remix

  1. Identique pour Node 18.
  2. Installation complète (npm ci) car on a besoin du compilateur.
  3. npm run build génère le dossier .build (ou build) pour Remix.

3. .dockerignore

Limite les fichiers copiés dans le contexte Docker pour accélérer le build.

4. docker-compose.yml

  • services.strapi : ton backend headless • dépend de la base de données db.
  • services.db : Postgres pour Strapi.
  • services.remix : l’app Remix qui interagit avec Strapi.

Démarrer les conteneurs

Terminal
1
docker-compose up -d
  • -d : mode détaché
  • docker ps pour vérifier que tous les conteneurs tournent.

Gérer les logs

Terminal
1
docker-compose logs -f strapi

Bonnes pratiques de production

  • Active le mode production (NODE_ENV=production) dans .env.
  • Utilise un reverse proxy (Nginx, Traefik) pour (SSL, domaine).
  • Surveille la santé des conteneurs avec un outil comme Portainer.
  • Prévois des backups automatiques de la base Postgres (cron + pg_dump).

En route vers la mise en ligne

  1. Test en local : vérifie tous les endpoints Strapi (CRUD produits).
  2. Test front : passe une commande, gère un utilisateur.
  3. Production : pousse tes images Docker sur Docker Hub ou un registry privé.
  4. CI/CD : automatise ton pipeline (GitHub Actions, GitLab CI) pour rebuild & push.

Exercices rapides

  1. 💻 Modifier docker-compose.yml pour ajouter un service Redis et configurer Strapi
    à utiliser un cache.
  2. ⚙️ Créer un script make build qui exécute les builds Docker et pousse
    les images sur un registry.
  3. 🔒 Configuration SSL : ajoute un service Nginx en front pour gérer HTTPS
    avec un certificat Let's Encrypt.

Liens utiles :