Pourquoi auto-héberger WordPress sur un VPS
L'hébergement mutualisé partage CPU, RAM et même la base de données avec des centaines d'autres sites : votre vitesse dépend des voisins, et l'accès SSH ou la configuration fine du serveur sont souvent verrouillés. Un VPS vous donne des ressources allouées à votre machine, le contrôle total de PHP-FPM, du serveur web, du cache objet (Redis) et du cache de pages. Pour une agence qui gère plusieurs sites clients, c'est aussi la possibilité de tout isoler en conteneurs sur une seule machine, avec des sauvegardes et des déploiements maîtrisés, là où le mutualisé impose ses limites et ses surcoûts.
Les gains d'un WordPress sur VPS
- Ressources CPU/RAM allouées à votre machine : moins de ralentissements dus aux voisins
- Contrôle total de PHP-FPM, du serveur web et des extensions
- Cache objet Redis et cache de pages pour des temps de réponse divisés
- Accès SSH/WP-CLI complet pour automatiser maintenance et déploiements
- Isolation par conteneur : plusieurs sites clients sur un seul VPS
- Sauvegardes et règles de sécurité définies par vous, sans surcoût par site
Prérequis réalistes
Un VPS 2 vCPU / 2 Go de RAM tient confortablement un site WordPress avec un trafic modéré ; passez à 4 Go avec Redis, WooCommerce ou plusieurs sites. Il vous faut Docker + Compose, une base MariaDB ou MySQL, idéalement Redis pour le cache objet, et un domaine votredomaine.com avec son certificat SSL. Prévoyez un peu de réglage PHP (upload_max_filesize, memory_limit) selon vos médias et extensions.
Déploiement pas à pas
Composer WordPress, MariaDB et Redis
Dans
docker-compose.yml, déclarezwordpress:php8.3-fpmouwordpress:apache, un servicemariadb:11etredis:alpine. Persistezwp-contentet la base dans des volumes nommés, sur un réseau Docker interne.Renseigner la base et les secrets
Passez
WORDPRESS_DB_*et des mots de passe forts via variables d'environnement. Ajoutez les clés de sécurité (salts) générées depuis l'API officielle WordPress dansWORDPRESS_CONFIG_EXTRA.Lancer et installer WordPress
Démarrez avec
docker compose up -dpuis ouvrez votre domaine pour l'assistant d'installation. Mieux : automatisez via WP-CLI (wp core install) pour des déploiements reproductibles d'un site à l'autre.Placer le reverse proxy et le SSL
Configurez Nginx/Caddy en HTTPS devant WordPress. Ajustez
client_max_body_sizepour les uploads, activez la compression gzip/brotli et le cache des assets statiques (images, CSS, JS) avec des en-têtesCache-Controllongs.Activer le cache objet Redis
Installez un plugin de cache objet (ex. Redis Object Cache), pointez-le vers le service
redis, et activez-le : les requêtes répétées à la base sont servies depuis la mémoire, allégeant fortement MariaDB.Durcir et sauvegarder
Désactivez l'édition de fichiers dans l'admin (
DISALLOW_FILE_EDIT), limitez les tentatives de connexion, et planifiez une sauvegarde nocturne dewp-content+ dump SQL vers un stockage objet distant.Se connecter la première fois
Ouvrez l'URL du site : WordPress lance son installation en 5 minutes — langue, titre du site, puis création de VOTRE identifiant administrateur avec le mot de passe et l'e-mail de votre choix. Terminez-la sans attendre, une installation inachevée est offerte au premier visiteur.
Pour des performances qui rivalisent avec les plateformes managées les plus rapides, ajoutez un cache de pages complet en amont de PHP : un plugin générant des fichiers HTML statiques servis directement par Nginx (via try_files), ou un module FastCGI cache. Vos pages publiques ne touchent alors plus du tout PHP ni MariaDB, ce qui permet à un VPS modeste d'encaisser des milliers de visiteurs simultanés, tout en gardant le back-office et le panier (WooCommerce) exclus du cache.
Alerte PHP du 21/10/2026 (PHP2Shell) : mettre à jour WordPress ne corrige pas PHP
Le 21 octobre 2026, le projet PHP a publié des versions de sécurité pour deux failles d'exécution de code à distance, CVE-2026-109618 et CVE-2026-109619. Le correctif se trouve dans PHP lui-même : les versions corrigées sont 8.5.12, 8.4.27, 8.3.36 et 8.2.35. Votre WordPress peut donc être à jour (cœur, thèmes, extensions) tout en tournant sur un PHP vulnérable, puisque le tableau de bord de mises à jour ne touche jamais à l'interpréteur. Avec la stack de cet article, PHP vit dans l'image Docker wordpress : tant que vous n'avez pas récupéré une image reconstruite sur une version corrigée et recréé le conteneur, la faille reste ouverte. Pour le détail des deux failles, lisez l'article php2shell-cve-2026-109618-109619-mettre-a-jour-php ; pour la reconstruction des images, php2shell-docker-wordpress-reconstruire-images-php.
Vérifier puis corriger en cinq gestes
Lire la version PHP réellement servie
Le plus fiable est dans WordPress : Outils > Santé du site > Infos > Serveur affiche la version PHP qui exécute vos pages. Sur un VPS sans Docker, méfiez-vous de
php -v: il interroge le binaire en ligne de commande, qui peut être une autre version que celle de PHP-FPM, laquelle sert vos visiteurs. Interrogez le service lui-même avecphp-fpm -v(ouphp-fpm8.3 -vsur Debian et Ubuntu).Contrôler la version dans le conteneur
Avec Docker, lancez
docker compose exec wordpress php -v: l'image embarque un seul PHP, donc ce résultat vaut pour le FPM ou le mod_php du conteneur. Comparez-le aux versions corrigées ci-dessus, en gardant la même branche (8.3.x doit atteindre 8.3.36, pas 8.4.27).Récupérer l'image à jour
Exécutez
docker compose pull && docker compose up -d. Le pull télécharge la dernière image publiée pour votre tag (par exemplewordpress:php8.3-fpm), etup -drecrée le conteneur dessus. Vos volumes nommés conserventwp-contentet la base. Siphp -vaffiche encore une ancienne version, l'image corrigée n'est pas encore publiée pour ce tag : revenez-y plus tard, ou changez de branche PHP si votre site la supporte.Redémarrer PHP-FPM
Une mise à jour de paquet ou de fichiers ne change pas le code déjà chargé par les processus en cours. Sur un serveur classique, redémarrez le service avec
systemctl restart php8.3-fpm(adaptez le numéro de version) ; avec Docker, la recréation du conteneur suffit, sinondocker compose restart wordpress. Un simple reload est moins sûr qu'un restart pour être certain que tous les workers sont renouvelés.Chercher des traces d'exploitation
Une mise à jour ferme la porte, elle ne dit pas si quelqu'un est déjà entré. Parcourez les journaux d'accès et d'erreur de Nginx ou d'Apache (
docker compose logs --since 72h wordpressavec Docker) à la recherche de plantages de workers PHP-FPM, de messages « out of memory » répétés et de requêtes inhabituelles de gros volume. Danswp-content, listez les fichiers.phpmodifiés récemment avecfind wp-content -name '*.php' -mtime -7, surtout dansuploads, où aucun script ne devrait se trouver. Au moindre doute, restaurez depuis une sauvegarde saine et changez les mots de passe et les salts.Automatiser le contrôle avec WP-CLI et cron
Notez que
wp --inforenvoie la version du PHP en ligne de commande, pas celle de PHP-FPM : gardez-le pour les scripts, pas pour juger l'exposition web. Planifiez plutôt une tâche cron hebdomadaire qui exécutedocker compose pullpuis compare le résultat dedocker compose exec wordpress php -và la version attendue, et vous prévient par e-mail en cas d'écart. Ainsi, la prochaine alerte de sécurité PHP ne dépend plus de votre mémoire.Vérifier de nouveau
Rouvrez Santé du site et relancez
php -vdans le conteneur : les deux doivent afficher une version corrigée. Notez la date de l'opération dans votre journal de maintenance, et recommencez à chaque nouvelle publication de sécurité PHP.
Atténuation partielle, pas un correctif
Pour CVE-2026-109619, l'avis PHP indique de désactiver session.upload_progress.enabled dans le php.ini ou le pool FPM, puis de redémarrer tous les workers ; ini_set() et .user.ini ne suffisent pas. Cela réduit l'exposition le temps de planifier la mise à jour, mais seule la mise à jour de PHP corrige réellement les deux failles.
La documentation officielle
Pour la configuration avancée et les options propres à l'outil, référez-vous à la documentation officielle de WordPress. Ce guide couvre la mise en ligne sur VPS ; la doc éditeur reste la référence pour les réglages fins, les mises à jour majeures et les cas d'usage spécifiques.