DDEV et Lando emballent tout ce dont un environnement WordPress a besoin derrière une commande unique. C’est confortable, mais cela laisse aussi une partie de la configuration hors de vue : le fichier PHP-FPM utilisé, la configuration nginx exacte, les variables MySQL par défaut. Pour une équipe qui veut comprendre et ajuster chaque paramètre, ou qui a besoin d’une configuration très spécifique difficile à faire rentrer dans le moule d’un outil packagé, construire son propre docker-compose.yml reste une option tout à fait raisonnable.
Ce n’est pas plus compliqué que d’utiliser DDEV, c’est simplement plus explicite : chaque service, chaque volume, chaque variable d’environnement est écrit noir sur blanc dans un fichier versionné avec le projet, sans magie cachée derrière une commande.
Les trois services nécessaires
Un environnement WordPress fonctionnel repose sur trois briques : un service PHP-FPM pour exécuter le code, un service MySQL pour la base de données, et un service nginx pour servir les requêtes HTTP et faire le lien avec PHP-FPM via FastCGI.
Le fichier docker-compose.yml complet

version: '3.8'
services:
php:
image: wordpress:php8.0-fpm
volumes:
- ./wp-content:/var/www/html/wp-content
- ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_NAME: wordpress
mysql:
image: mysql:8.0
environment:
MYSQL_DATABASE: wordpress
MYSQL_ROOT_PASSWORD: motdepasse
volumes:
- db_data:/var/lib/mysql
nginx:
image: nginx:1.21-alpine
ports:
- "8080:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
- ./wp-content:/var/www/html/wp-content
depends_on:
- php
volumes:
db_data:
La configuration nginx associée
C’est ce fichier qui échappe le plus souvent aux développeurs habitués à un outil packagé, alors qu’il détermine l’essentiel du comportement du serveur web :
server {
listen 80;
root /var/www/html;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
}
Ajuster PHP finement
Le fichier uploads.ini monté dans le service PHP permet d’ajuster des paramètres que les outils packagés fixent parfois à des valeurs par défaut inadaptées à un projet spécifique (import de médias volumineux, temps d’exécution long pour une synchronisation) :
upload_max_filesize = 256M
post_max_size = 256M
max_execution_time = 300
Ce que cette approche apporte réellement
- Aucune dépendance à un outil tiers dont l’évolution ou l’abandon échapperait au contrôle de l’équipe.
- Une configuration nginx et PHP entièrement lisible et modifiable, utile pour reproduire fidèlement un comportement de production particulier.
- Un fichier
docker-compose.ymlversionné qui documente lui-même l’infrastructure du projet, sans nécessiter de connaître les conventions internes d’un outil externe.
Le prix à payer
Cette maîtrise a un coût : chaque nouveau besoin (Redis pour un cache objet, Mailhog pour intercepter les e-mails de test, WP-CLI en conteneur séparé) demande d’ajouter et de configurer soi-même un service supplémentaire, alors qu’un outil comme DDEV ou Lando propose ces ajouts en une ligne de configuration ou une commande d’activation. Pour une équipe qui gère des dizaines de projets, maintenir un docker-compose.yml maison cohérent sur tous les projets demande une discipline de mise à jour que ces outils packagés assurent nativement.
On recommande cette approche à une équipe qui a déjà une bonne compréhension de Docker et des besoins d’infrastructure précis. Pour une équipe qui découvre Docker, un outil packagé reste un point de départ plus sûr.
En résumé
Construire son propre environnement Docker pour WordPress plutôt que de passer par DDEV ou Lando n’est pas un exercice de style : c’est un choix pertinent quand le projet a des besoins d’infrastructure spécifiques ou quand l’équipe veut garder un contrôle total sur chaque paramètre serveur. Ce n’est en revanche pas la voie la plus rapide pour démarrer, et elle demande un entretien continu que les outils packagés évitent par construction.