Installer Magento 2 avec Docker Compose (prod) : Redis, OpenSearch, SSL (guide 2026)
Magento 2 est puissant… et exigeant : beaucoup d’I/O, une base de données sollicitée, un moteur de recherche (OpenSearch/Elasticsearch), et souvent un cache (Redis).
Objectif de ce guide : une base propre et reproductible pour la production, avec :
- HTTPS via reverse proxy
- volumes persistants
- Redis
- OpenSearch
- une stratégie simple pour sauvegarder et restaurer
Si vous voulez aller plus vite (déploiement 1 clic, facturation à l’heure, start/stop, sauvegardes automatiques, scaling CPU/RAM), vous pouvez aussi tester Magento sur adgents.cloud.
Vidéo (YouTube, FR)

Prérequis
- Un serveur Linux (Debian/Ubuntu), accès SSH
- Un domaine (ex :
shop.example.com) + DNS configuré - Docker + Docker Compose
- Un compte Magento (clés d’accès
repo.magento.compour installer via Composer)
Si vous avez déjà déployé un CMS en conteneurs, vous retrouveras les mêmes principes que dans Installer PrestaShop avec Docker Compose (prod) : proxy HTTPS, volumes, base de données isolée.
Architecture recommandée (simple et robuste)
On sépare clairement :
- Reverse proxy (Traefik) : TLS, redirections, en-têvos
- Nginx (front Magento)
- PHP-FPM (application)
- Base (MariaDB ou MySQL)
- Redis : cache / sessions
- OpenSearch : recherche catalogue
Pourquoi cette séparation ?
- vous pouvez mettre à jour le front sans toucher à la base
- vous pouvez dimensionner OpenSearch indépendamment
- vous réduis la surface exposée (seuls 80/443 sont publics)
Pour une approche “déploiement applicatif en 1 clic + scaling”, vois aussi adgents.cloud.

1) Préparer le dossier et les variables
Sur le serveur :
mkdir -p ~/magento-compose && cd ~/magento-compose
Crée un fichier .env (à adapter) :
# Domaine
MAGENTO_HOST=shop.example.com
[email protected]
# Base
DB_NAME=magento
DB_USER=magento
DB_PASSWORD=change_me_strong
DB_ROOT_PASSWORD=change_me_root
# Admin Magento
MAGENTO_ADMIN_USER=admin
MAGENTO_ADMIN_PASSWORD=change_me_very_strong
[email protected]
MAGENTO_ADMIN_FIRSTNAME=Admin
MAGENTO_ADMIN_LASTNAME=Store
# Locale
TZ=Europe/Paris
# OpenSearch
OPENSEARCH_JAVA_OPTS=-Xms1g -Xmx1g
Astuce : garde .env hors Git et utilise des mots de passe longs.
2) Docker Compose (Traefik + Magento + DB + Redis + OpenSearch)
Crée compose.yaml :
services:
traefik:
image: traefik:v3.2
restart: always
command:
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --entrypoints.web.address=:80
- --entrypoints.web.http.redirections.entrypoint.to=websecure
- --entrypoints.web.http.redirections.entrypoint.scheme=https
- --entrypoints.websecure.address=:443
- --certificatesresolvers.le.acme.tlschallenge=true
- --certificatesresolvers.le.acme.email=${LE_EMAIL}
- --certificatesresolvers.le.acme.storage=/letsencrypt/acme.json
ports:
- 80:80
- 443:443
volumes:
- traefik_letsencrypt:/letsencrypt
- /var/run/docker.sock:/var/run/docker.sock:ro
db:
image: mariadb:10.11
restart: always
environment:
MARIADB_DATABASE: ${DB_NAME}
MARIADB_USER: ${DB_USER}
MARIADB_PASSWORD: ${DB_PASSWORD}
MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
TZ: ${TZ}
volumes:
- db_data:/var/lib/mysql
redis:
image: redis:7-alpine
restart: always
command: ["redis-server", "--appendonly", "yes"]
volumes:
- redis_data:/data
opensearch:
image: opensearchproject/opensearch:2
restart: always
environment:
discovery.type: single-node
plugins.security.disabled: "true"
OPENSEARCH_JAVA_OPTS: ${OPENSEARCH_JAVA_OPTS}
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- opensearch_data:/usr/share/opensearch/data
magento:
image: bitnami/magento:2
restart: always
depends_on:
- db
- redis
- opensearch
environment:
MAGENTO_HOST: ${MAGENTO_HOST}
MAGENTO_DATABASE_HOST: db
MAGENTO_DATABASE_PORT_NUMBER: 3306
MAGENTO_DATABASE_NAME: ${DB_NAME}
MAGENTO_DATABASE_USER: ${DB_USER}
MAGENTO_DATABASE_PASSWORD: ${DB_PASSWORD}
MAGENTO_ADMIN_USER: ${MAGENTO_ADMIN_USER}
MAGENTO_ADMIN_PASSWORD: ${MAGENTO_ADMIN_PASSWORD}
MAGENTO_ADMIN_EMAIL: ${MAGENTO_ADMIN_EMAIL}
MAGENTO_ADMIN_FIRSTNAME: ${MAGENTO_ADMIN_FIRSTNAME}
MAGENTO_ADMIN_LASTNAME: ${MAGENTO_ADMIN_LASTNAME}
MAGENTO_TIMEZONE: ${TZ}
MAGENTO_USE_SECURE_ADMIN: "yes"
MAGENTO_SEARCH_ENGINE: opensearch
MAGENTO_OPENSEARCH_HOST: opensearch
MAGENTO_OPENSEARCH_PORT_NUMBER: 9200
MAGENTO_REDIS_HOST: redis
labels:
- traefik.enable=true
- traefik.http.routers.magento.rule=Host(`${MAGENTO_HOST}`)
- traefik.http.routers.magento.entrypoints=websecure
- traefik.http.routers.magento.tls=true
- traefik.http.routers.magento.tls.certresolver=le
- traefik.http.services.magento.loadbalancer.server.port=8080
volumes:
- magento_data:/bitnami/magento
volumes:
traefik_letsencrypt:
db_data:
redis_data:
opensearch_data:
magento_data:
Ce fichier donne une base “prod friendly” :
- le proxy publie uniquement 80/443
- DB/Redis/OpenSearch restent privés
- les données sont persistées via volumes
Pour un autre exemple de reverse proxy et de persistance, vous pouvez aussi lire Installer Botpress avec Docker (prod) : même logique d’expo minimale et de volumes.
3) Démarrer et vérifier
docker compose up -d
docker compose ps
docker compose logs -f --tail=200
Ensuite :
- Front :
https://${MAGENTO_HOST} - Admin :
https://${MAGENTO_HOST}/admin(l’URL exacte dépend du setup)
4) Réglages performance qui font une vraie différence
Redis (cache + sessions)
Redis réduit la pression DB sur beaucoup d’écrans Magento. Une fois l’instance stable, vérifie :
- que les caches applicatifs sont bien activés
- que les sessions ne reviennent pas au filesystem
Si vous êvos dans une démarche “boutique rapide”, la logique est proche de WooCommerce : optimiser performances + scaling + monitoring : d’abord cache/DB/images, puis montée en charge.
OpenSearch
OpenSearch est souvent le point qui consomme le plus de RAM. Ajuste :
- la mémoire Java (
OPENSEARCH_JAVA_OPTS) - le volume data sur disque rapide
5) Sauvegardes (minimum viable)
Objectif : pouvoir restaurer après une mise à jour ratée ou une erreur humaine.
Sauvegarder la base
mkdir -p ~/backups/magento
docker exec -i $(docker compose ps -q db) mariadb-dump -u${DB_USER} -p${DB_PASSWORD} ${DB_NAME} \
| gzip > ~/backups/magento/db-$(date +%F).sql.gz
Sauvegarder les fichiers
Le volume magento_data contient le code, la config et une partie des données. Deux approches :
- snapshots de volumes
- export tar + stockage externe
Lancez-vous avec Magento.
Envie de vous lancer avec Magento ? Créez votre site web en quelques clics.
Magento
E-commerce enterprise
6) Sécurité : 6 réflexes utiles
- n’ouvre que 80/443 (et SSH si nécessaire)
- pas d’accès public à la DB
- mots de passe forts + rotation
- mises à jour régulières des images
- logs proxy + alertes
- limiter l’accès admin (IP autorisées / VPN si possible)
Pour les principes de réduction d’exposition et de journalisation, plusieurs points recoupent Sécuriser n8n : secrets, webhooks, authentification, logs et RGPD.
Déployer Magento sans gérer l’infra
Si vous voulez une boutique Magento plus simple à opérer :
- déploiement en 1 clic
- facturation à l’heure
- start/stop (compute non facturé à l’arrêt)
- sauvegardes automatiques (24h par défaut, jusqu’à 1/h)
- rétention longue (jusqu’à 10 ans)
- scaling CPU/RAM à la demande
Découvrir : Magento sur adgents.cloud.

