Héberger WordPress avec Docker Compose (prod) : SSL, backups, perf (guide 2026)
Installer WordPress avec Docker Compose, c’est simple. Le rendre robuste en production (HTTPS, persistance, sauvegardes, perf) est là où beaucoup se plantent : boucles de redirection, URLs en HTTP, uploads qui disparaissent, DB exposée…
Ce guide vous donne une base production-ready (à adapter à votre contexte), avec une architecture éprouvée : reverse proxy (HTTPS) → WordPress → base de données, plus backups et quelques garde-fous sécurité/perf.
TL;DR (ce que vous devez absolument avoir en prod)
- HTTPS géré par un reverse proxy (Nginx/Traefik) + redirection 80→443
- Volumes persistants :
wp-content/(uploads, plugins, thèmes)- base de données (MySQL/MariaDB)
- WordPress conscient du HTTPS derrière proxy (
X-Forwarded-Proto+ config WP) - Backups automatiques (et test de restauration)
- Hardening (WAF/rate-limit, secrets, mises à jour)
- Perf (cache, OPcache, images, CDN)
Architecture recommandée
Pourquoi un reverse proxy ?
- Le conteneur
wordpressne “fait pas” TLS tout seul : on termine TLS au proxy. - On centralise les règles : redirections, headers, rate-limit, cache, ACME/Let’s Encrypt.
Prérequis
- Un nom de domaine (ex:
example.com) pointant vers votre serveur - Docker + Docker Compose
- Ports 80/443 ouverts (et firewall propre)
Docker Compose (prod) — WordPress + MariaDB + reverse proxy
Deux approches qui marchent :
- Tout en Docker Compose (WordPress + DB + proxy)
- Proxy séparé (Traefik/Nginx partagé entre plusieurs apps)
Ici je vous donne un compose simple tout-en-un (facile à comprendre), puis les points à extraire si vous mutualises le proxy.
1) docker-compose.yml
Remplace
example.comet mets des mots de passe forts (idéalement via secrets).
services:
db:
image: mariadb:11
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
environment:
MARIADB_DATABASE: wordpress
MARIADB_USER: wordpress
MARIADB_PASSWORD: change_me
MARIADB_ROOT_PASSWORD: change_me_root
volumes:
- db_data:/var/lib/mysql
restart: unless-stopped
wordpress:
image: wordpress:php8.2-apache
depends_on:
- db
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: change_me
# Optionnel : injecter une conf pour proxy HTTPS
WORDPRESS_CONFIG_EXTRA: |
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) {
$_SERVER['HTTPS'] = 'on';
}
volumes:
- wp_data:/var/www/html
restart: unless-stopped
nginx:
image: nginx:alpine
depends_on:
- wordpress
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d:ro
- ./nginx/certs:/etc/nginx/certs:ro
restart: unless-stopped
volumes:
db_data:
wp_data:
2) nginx/conf.d/wordpress.conf
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/nginx/certs/fullchain.pem;
ssl_certificate_key /etc/nginx/certs/privkey.pem;
client_max_body_size 100m;
location / {
proxy_pass http://wordpress:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Point critique : le couple
X-Forwarded-Protocôté proxy + activation HTTPS côté WP évite les boucles de redirection et force WordPress à générer les URLs en HTTPS.
HTTPS : certificats (Let’s Encrypt)
En production, évite les certificats auto-signés. Utilise Let’s Encrypt (ACME).
Deux options :
- Traefik (super pratique si vous héberges plusieurs apps)
- Nginx + certbot
Si vous voulez rester en Nginx : mets en place certbot sur l’hôvous, ou un conteneur certbot qui renouvelle automatiquement, puis monte fullchain.pem/privkey.pem dans Nginx.
Backups : la règle 3-2-1 (et restauration testée)
vous devez sauvegarder deux choses :
- La DB (dump SQL régulier)
- Les fichiers (au minimum
wp-content, idéalement tout le volume WordPress)
Checklist backup :
- 1 backup/jour minimum (ou plus selon activité)
- 1 copie hors serveur (S3, Backblaze, stockage dédié)
- 1 test de restauration (sinon ce n’est pas un backup, c’est un pari)
Sécurité (prod) : 8 mesures simples qui évitent 80% des ennuis
- DB non exposée publiquement (pas de port 3306 sur 0.0.0.0)
- Mots de passe forts + rotation
- Limiter / protéger
wp-login.php+/wp-admin(rate-limit, CAPTCHA, WAF) - Désactiver XML-RPC si inutile
- Interdire l’exécution PHP dans
wp-content/uploads - Mettre à jour WordPress + plugins (et supprimer ceux inutiles)
- Ajouter des headers sécurité (HSTS, X-Frame-Options, etc.)
- Logs + alerting (au moins sur 401/403/5xx)
Performance : ce qui donne le meilleur ROI
- Cache page (plugin + règles proxy)
- Object cache (Redis si besoin)
- OPcache (souvent activé, à vérifier)
- Images : WebP/AVIF, lazy-load, compression
- CDN pour les assets
- Base de données : index, nettoyage, éviter plugins “lourds”
Vidéo (FR) — WordPress avec Docker
Déployer WordPress en 1 clic sur adgents.cloud
Si vous voulez éviter de maintenir l’infra (TLS, backups, scaling…), vous pouvez déployer WordPress sur adgents.cloud :
- Installation / déploiement en 1 clic
- Facturation à l’heure
- Stop/Start (compute non facturé à l’arrêt)
- Backups automatiques (24h par défaut, jusqu’à 1/h)
- Rétention longue (jusqu’à 10 ans)
- Scaling CPU/RAM à la demande
\1Découvrir l’application sur Adgents.cloud
Lancez-vous avec WordPress.
Envie de vous lancer avec WordPress ? Créez votre site web en quelques clics.
WordPress
Le CMS le plus populaire au monde
Essayer gratuitement : crée votre instance WordPress et teste le workflow (déploiement + backups + restore).
Aller plus loin
Essayer sur Adgents.cloud
Envie d’un déploiement propre sans passer des heures sur l’infra ? Sur Adgents.cloud, vous pouvez :
- déployer en 1 clic
- être facturé à l’heure
- utiliser stop/start (compute non facturé à l’arrêt)
- activer des backups automatiques (24h par défaut, jusqu’à 1/h)
- garder une rétention longue (jusqu’à 10 ans)
- ajuster le scaling CPU/RAM à la demande
→ Découvrir wordpress sur Adgents.cloud → Essayer gratuitement

