Pourquoi déployer WordPress sur un VPS plutôt qu’un hébergement mutualise
Un VPS (Virtual Private Server) vous donne le contrôle total sur votre serveur : performances previsibles, sécurité personnalisee, et un coût souvent inférieur à un hébergement mutualise premium. Pour un site WordPress professionnel ou une boutique WooCommerce au Sénégal, un VPS a 3 000-5 000 FCFA/mois offre des performances 3 à 5 fois superieures a un hébergement mutualise a 10 000 FCFA.
Ce tutoriel vous guide de A à Z : de la commande du VPS jusqu’à un WordPress fonctionnel, sécurisé et optimise avec Nginx, PHP 8.2, MariaDB et un certificat SSL gratuit Let’s Encrypt.
Étape 1 : Commander votre VPS
Choisir un fournisseur
| Fournisseur | Prix minimum | Datacenter le plus proche | Paiement |
|---|---|---|---|
| Hetzner | 2 200 FCFA/mois (CX23) | Falkenstein, Allemagne | Carte bancaire |
| DigitalOcean | 3 000 FCFA/mois ($6) | Amsterdam | Carte, PayPal |
| Contabo | 3 500 FCFA/mois | Allemagne | Carte, PayPal |
| OVH | 4 000 FCFA/mois | Gravelines, France | Carte, PayPal |
Recommandation : Hetzner CX23 (2 vCPU, 4 Go RAM, 40 Go SSD) est le meilleur rapport qualité-prix. Le datacenter allemand offre une latence de 80-120ms depuis Dakar, largement suffisante.
Configuration minimale recommandee
- CPU : 2 vCPU minimum
- RAM : 2 Go minimum (4 Go pour WooCommerce)
- Stockage : 20 Go SSD minimum
- OS : Ubuntu 22.04 LTS
- Datacenter : Europe (Allemagne, France ou Pays-Bas)
Étape 2 : Sécuriser l’accès au serveur
Des que votre VPS est créé, securisez-le immédiatement. Connectez-vous en SSH :
ssh root@VOTRE_IP_SERVEUR
Mettre à jour le système
apt update && apt upgrade -y
Créer un utilisateur non-root
# Créer un utilisateur
adduser déployer
# Lui donner les droits sudo
usermod -aG sudo déployer
# Copier la clé SSH
rsync --archive --chown=déployer:déployer ~/.ssh /home/déployer
Sécuriser SSH
# Éditer la configuration SSH
nano /etc/ssh/sshd_config
# Modifier ces lignes :
Port 2222 # Changer le port par défaut
PermitRootLogin no # Interdire la connexion root
PasswordAuthentication no # Clés SSH uniquement
MaxAuthTries 3 # Maximum 3 tentatives
# Redémarrer SSH
systemctl restart sshd
Important : Avant de fermer votre session, testez la connexion avec le nouvel utilisateur dans un autre terminal :
ssh -p 2222 déployer@VOTRE_IP_SERVEUR
Configurer le pare-feu UFW
# Autoriser les ports nécessaires
ufw allow 2222/tcp # SSH (nouveau port)
ufw allow 80/tcp # HTTP
ufw allow 443/tcp # HTTPS
# Activer le pare-feu
ufw enable
# Vérifier le statut
ufw status
Étape 3 : Installer Nginx
Nginx est plus performant qu’Apache pour WordPress, surtout pour servir des fichiers statiques et gérer de nombreuses connexions simultanees.
# Installer Nginx
sudo apt install nginx -y
# Vérifier que Nginx fonctionne
sudo systemctl status nginx
# Activer le démarrage automatique
sudo systemctl enable nginx
Visitez http://VOTRE_IP_SERVEUR dans votre navigateur. Vous devriez voir la page par défaut de Nginx.
Étape 4 : Installer PHP 8.2
# Ajouter le dépôt PHP
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
# Installer PHP 8.2 et les extensions requises par WordPress
sudo apt install php8.2-fpm php8.2-mysql php8.2-curl php8.2-gd \
php8.2-intl php8.2-mbstring php8.2-soap php8.2-xml \
php8.2-zip php8.2-imagick php8.2-redis php8.2-opcache -y
Optimiser la configuration PHP
# Éditer php.ini
sudo nano /etc/php/8.2/fpm/php.ini
# Modifier ces valeurs :
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
memory_limit = 256M
max_input_vars = 3000
# Éditer la configuration de l'OPcache
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
opcache.save_comments=1
# Éditer la configuration du pool PHP-FPM
sudo nano /etc/php/8.2/fpm/pool.d/www.conf
# Pour un VPS 4 Go RAM, modifier :
pm = dynamic
pm.max_children = 25
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10
pm.max_requests = 500
# Redémarrer PHP-FPM
sudo systemctl restart php8.2-fpm
Étape 5 : Installer MariaDB
# Installer MariaDB
sudo apt install mariadb-server -y
# Sécuriser l'installation
sudo mysql_secure_installation
# Répondre :
# - Set root password : Oui (choisissez un mot de passe fort)
# - Remove anonymous users : Oui
# - Disallow root login remotely : Oui
# - Remove test database : Oui
# - Reload privilege tables : Oui
Créer la base de données WordPress
# Se connecter a MariaDB
sudo mysql -u root -p
# Créer la base et l'utilisateur
CREATE DATABASE wordpress_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'VotreMotDePasseComplexe2024!';
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wp_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Sécurité : N’utilisez jamais « root » comme utilisateur de base de données pour WordPress. Créez toujours un utilisateur dédié avec des privileges limites a la base WordPress.
Étape 6 : Configurer Nginx pour WordPress
# Créer le répertoire du site
sudo mkdir -p /var/www/votresite.com
sudo chown -R www-data:www-data /var/www/votresite.com
# Créer la configuration Nginx
sudo nano /etc/nginx/sites-available/votresite.com
Collez cette configuration optimisee :
server {
listen 80;
server_name votresite.com www.votresite.com;
root /var/www/votresite.com;
index index.php index.html;
# Taille max upload
client_max_body_size 64M;
# Logs
access_log /var/log/nginx/votresite.access.log;
error_log /var/log/nginx/votresite.error.log;
# Sécurité headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
# Bloquer les fichiers sensibles
location ~ /\.(ht|git|svn) {
deny all;
}
location = /wp-config.php {
deny all;
}
# Cache des fichiers statiques
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot|webp)$ {
expires 30d;
add_header Cache-Control "public, immutable";
access_log off;
}
# Permaliens WordPress
location / {
try_files $uri $uri/ /index.php?$args;
}
# PHP-FPM
location ~ \.php$ {
include snippets/fastcgi-params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 300;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
}
# Bloquer XML-RPC
location = /xmlrpc.php {
deny all;
}
# Protéger wp-login
location = /wp-login.php {
limit_req zone=login burst=3 nodelay;
include snippets/fastcgi-params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
# Ajouter la zone de limitation dans nginx.conf
sudo nano /etc/nginx/nginx.conf
# Ajouter dans le bloc http {} :
limit_req_zone $binary_remote_addr zone=login:10m rate=1r/s;
# Activer le site
sudo ln -s /etc/nginx/sites-available/votresite.com /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
# Tester la configuration
sudo nginx -t
# Recharger Nginx
sudo systemctl reload nginx
Étape 7 : Installer WordPress
# Télécharger WordPress
cd /tmp
curl -O https://wordpress.org/latest.tar.gz
tar xzf latest.tar.gz
# Copier les fichiers
sudo cp -r wordpress/* /var/www/votresite.com/
sudo chown -R www-data:www-data /var/www/votresite.com/
sudo chmod -R 755 /var/www/votresite.com/
sudo chmod 640 /var/www/votresite.com/wp-config-sample.php
Configurer wp-config.php
# Copier le fichier de configuration
sudo cp /var/www/votresite.com/wp-config-sample.php /var/www/votresite.com/wp-config.php
# Éditer la configuration
sudo nano /var/www/votresite.com/wp-config.php
# Modifier les informations de base de données :
define( 'DB_NAME', 'wordpress_db' );
define( 'DB_USER', 'wp_user' );
define( 'DB_PASSWORD', 'VotreMotDePasseComplexe2024!' );
define( 'DB_HOST', 'localhost' );
define( 'DB_CHARSET', 'utf8mb4' );
# Générer les clés de sécurité sur :
# https://api.wordpress.org/secret-key/1.1/salt/
# Collez les 8 lignes generees
# Ajouter ces optimisations :
define( 'WP_POST_REVISIONS', 5 );
define( 'AUTOSAVE_INTERVAL', 120 );
define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );
define( 'DISALLOW_FILE_EDIT', true );
define( 'WP_AUTO_UPDATE_CORE', 'minor' );
Étape 8 : Installer le certificat SSL Let’s Encrypt
Un certificat SSL est obligatoire en 2024. Let’s Encrypt fournit des certificats gratuits avec renouvellement automatique.
# Installer Certbot
sudo apt install certbot python3-certbot-nginx -y
# Obtenir le certificat (assurez-vous que votre domaine pointe vers le VPS)
sudo certbot --nginx -d votresite.com -d www.votresite.com
# Suivez les instructions :
# - Entrez votre email
# - Acceptez les conditions
# - Choisissez "Redirect" pour forcer HTTPS
# Vérifier le renouvellement automatique
sudo certbot renew --dry-run
Certbot modifié automatiquement votre configuration Nginx pour activer HTTPS et rediriger HTTP vers HTTPS.
Étape 9 : Activer le cache FastCGI Nginx
Le cache FastCGI est la méthode la plus performante pour cacher WordPress. Nginx sert les pages directement depuis la mémoire sans appeler PHP.
# Ajouter dans nginx.conf, dans le bloc http :
fastcgi_cache_path /var/cache/nginx/fastcgi levels=1:2
keys_zone=WORDPRESS:100m inactive=60m max_size=512m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout updating;
fastcgi_cache_background_update on;
# Dans la configuration du site, ajouter dans le bloc server :
set $skip_cache 0;
# Ne pas mettre en cache pour les utilisateurs connectés
if ($http_cookie ~* "wordpress_logged_in") {
set $skip_cache 1;
}
# Ne pas mettre en cache les pages d'admin et le panier WooCommerce
if ($request_uri ~* "wp-admin|wp-login|cart|checkout|my-account") {
set $skip_cache 1;
}
# Dans le bloc location ~ \.php$ ajouter :
fastcgi_cache WORDPRESS;
fastcgi_cache_valid 200 301 302 60m;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
add_header X-Cache-Status $upstream_cache_status;
Après cette configuration, testez avec curl -I https://votresite.com. Vous devriez voir X-Cache-Status: HIT sur la deuxieme requête.
Étape 10 : Sauvegardes automatiques
Un VPS sans sauvegardes est un désastre en attente. Configurez un script de sauvegarde automatique :
#!/bin/bash
# /home/déployer/backup-wordpress.sh
DATE=$(date +%Y%m%d_%H%M)
BACKUP_DIR="/home/déployer/backups"
SITE_DIR="/var/www/votresite.com"
DB_NAME="wordpress_db"
DB_USER="wp_user"
DB_PASS="VotreMotDePasseComplexe2024!"
# Créer le dossier si nécessaire
mkdir -p $BACKUP_DIR
# Sauvegarder la base de données
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME | gzip > $BACKUP_DIR/db_$DATE.sql.gz
# Sauvegarder les fichiers
tar czf $BACKUP_DIR/files_$DATE.tar.gz -C /var/www votresite.com \
--exclude='votresite.com/wp-content/cache'
# Supprimer les sauvegardes de plus de 30 jours
find $BACKUP_DIR -type f -mtime +30 -delete
echo "Sauvegarde terminée : $DATE"
# Rendre le script executable
chmod +x /home/déployer/backup-wordpress.sh
# Planifier avec cron (tous les jours a 3h du matin)
crontab -e
# Ajouter cette ligne :
0 3 * * * /home/déployer/backup-wordpress.sh >> /home/déployer/backup.log 2>&1
Conseil : Envoyez également une copie sur un stockage externe (Backblaze B2 à 500 FCFA/mois pour 10 Go, ou rclone vers Google Drive) pour vous protéger contre une panne du VPS entier.
Checklist finale de déploiement
- Serveur sécurisé : utilisateur non-root, SSH par clé, port change, UFW actif
- Nginx installé et configuré avec les headers de sécurité
- PHP 8.2-FPM optimise avec OPcache
- MariaDB sécurisée avec utilisateur dédié
- WordPress installé avec wp-config.php durci
- SSL Let’s Encrypt avec renouvellement automatique
- Cache FastCGI Nginx actif
- Sauvegardes automatiques quotidiennes
- Monitoring avec UptimeRobot (gratuit)
Performances attendues : Avec cette configuration, votre site WordPress affichera un TTFB (Time To First Byte) de 50-150ms et un temps de chargement total de 0,8-1,5 secondes. C’est 3 à 5 fois plus rapide qu’un hébergement mutualise classique, pour un coût de seulement 2 200 à 5 000 FCFA par mois.
Faire concevoir un site web professionnel
Site vitrine ou e-commerce, livré clé en main avec domaine, hébergement, formation et support inclus.
À partir de 350 000 FCFA
VPS ou hebergement managed en 2026 — l arbitrage
Le choix entre VPS auto-gere et hebergement managed WordPress depend de trois facteurs : budget, competences techniques disponibles, et besoin de personnalisation. Un VPS chez Hetzner, OVH, Hostinger ou DigitalOcean coute 5 a 30 USD/mois et offre le controle total. Un managed WordPress (Kinsta, WP Engine, Pressable) coute 30 a 200 USD/mois et delivre performance et securite sans effort. Pour un freelance ou une petite agence avec competences serveur, le VPS gagne en TCO. Pour un site critique sans equipe technique, le managed est plus sage.
Le stack moderne — Nginx, PHP-FPM, MariaDB, Redis
Quatre composants forment un environnement WordPress performant en 2026. Nginx sert les fichiers statiques et reverse-proxy les requetes PHP a PHP-FPM. Plus rapide qu Apache, configuration simple. PHP-FPM traite les requetes PHP avec des pools de workers. PHP 8.3 ou 8.4 en 2026 — toujours utiliser la derniere version supportee par WordPress. MariaDB remplace MySQL chez la majorite des hebergeurs (compatible drop-in, plus rapide). Version 10.11 ou 11.x en 2026. Redis en cache objet via le plugin Redis Object Cache. Reduit drastiquement les requetes SQL pour les sites a fort trafic.
Alternative LiteSpeed Web Server qui regroupe Nginx-like, PHP-LSAPI et un cache page integre. Performance superieure mais licence payante. Hostinger Premium WordPress utilise LiteSpeed par defaut.
Sequence d installation
(1) Provisionner le VPS (Ubuntu 24.04 LTS recommande). (2) Securiser SSH : desactiver root login, authentification par cle, fail2ban actif. (3) Installer Nginx, PHP-FPM, MariaDB. (4) Configurer un vhost Nginx pour le domaine, avec certificat Let s Encrypt via Certbot. (5) Creer la base et l utilisateur MariaDB. (6) Telecharger WordPress, configurer wp-config.php avec les credentials BDD. (7) Lancer le wizard d installation via navigateur ou via WP-CLI wp core install. (8) Installer les plugins indispensables (Redis Object Cache, plugin de cache page, plugin de securite). (9) Configurer les sauvegardes automatiques (UpdraftPlus vers S3 ou Backblaze B2).
Configuration Nginx optimale
Quelques directives Nginx font une difference majeure de performance pour WordPress. fastcgi_cache active un cache page integre Nginx — plus rapide que tout plugin WordPress. La directive gzip ou brotli compresse les reponses (gain 60-70 pour cent sur le HTML). expires 1y sur les assets statiques (CSS, JS, images) active le cache navigateur long. http2 et ssl_protocols TLSv1.2 TLSv1.3 pour les performances et la securite.
La protection des fichiers sensibles : bloquer l acces a wp-config.php, aux fichiers .log, aux dossiers de cache, et aux fichiers .htaccess (residuels d Apache). Ces blocs deny ajoutent quelques lignes au vhost et previennent les fuites d info.
Securite serveur — non negociable
Firewall UFW avec uniquement les ports 22 (SSH), 80 (HTTP), 443 (HTTPS) ouverts. Toute autre porte fermee. Fail2ban avec jails sshd et nginx-noscript pour bloquer automatiquement les IP d attaque. Mises a jour automatiques via unattended-upgrades pour patcher les CVE des qu elles sortent. SSH par cle uniquement (PasswordAuthentication no dans sshd_config). Compte non-root pour SSH, sudo configure pour l administration.
Pour aller plus loin, configurer AppArmor ou SELinux profile pour PHP-FPM (limite ce que PHP peut acceder en cas de compromission). Sur Ubuntu, AppArmor est actif par defaut — verifier que le profil PHP-FPM est en mode enforce.
Monitoring et alertes
Un VPS qui tombe sans monitoring tombe pendant des heures avant qu on s en rende compte. Trois niveaux de monitoring.
Uptime monitoring externe via UptimeRobot (gratuit, 50 monitors), Better Uptime, ou Pingdom. Ping HTTP toutes les 5 minutes et alerte par email/SMS si downtime. Indispensable.
Monitoring serveur via Netdata (open-source, install en une commande, dashboard riche), Datadog, ou New Relic. Suit CPU, RAM, disque, network, processes. Detecte les anomalies (CPU 100 pour cent, disque qui sature).
Monitoring WordPress via Query Monitor (dev/staging) et un service externe (WP Umbrella, ManageWP, MainWP) pour les alertes plugin/theme/core mise a jour disponibles.
Sauvegardes — strategie 3-2-1
Trois copies des donnees, sur deux supports differents, dont une hors site. Pour WordPress :
(1) Snapshot quotidien du VPS pris par l hebergeur (Hostinger, Hetzner, OVH offrent en option pour quelques euros par mois). Permet le restore complet en cas de probleme infrastructure.
(2) Backup WordPress + BDD quotidiens via UpdraftPlus vers un stockage objet (Backblaze B2 a 5 USD/TB, Wasabi a 6 USD/TB, AWS S3 plus cher mais standard). Conservation 30-90 jours.
(3) Une copie hors site additionnelle (autre region, autre fournisseur) pour les sites critiques. Backblaze B2 sur une region distincte de votre VPS.
Tester la restauration tous les trimestres sur un environnement sandbox. Une sauvegarde non testee n existe pas.
FAQ
Quel VPS minimum pour WordPress en 2026 ?
Pour un blog ou site vitrine : 2 vCPU, 4 Go RAM, 50 Go SSD (~10 USD/mois). Pour un site WooCommerce moyen : 4 vCPU, 8 Go RAM, 100 Go SSD (~25 USD/mois). Pour un site a fort trafic : 8+ vCPU, 16+ Go RAM, et eventuellement BDD dediee en sus.
Faut-il un panel de gestion (Plesk, cPanel, CyberPanel) ?
Pour un seul site simple, un VPS sans panel suffit (gestion via SSH). Pour gerer plusieurs sites ou pour deleguer a un client non-technique, un panel facilite. CyberPanel (open-source, base LiteSpeed) est l alternative gratuite credible a Plesk en 2026.
Comment migrer de mutualise a VPS ?
(1) Provisionner le VPS et installer la stack. (2) Migrer la base via export/import SQL ou WP Migrate. (3) Copier wp-content/uploads via rsync ou SFTP. (4) Mettre a jour wp-config.php avec les nouveaux credentials BDD. (5) Tester sur un sous-domaine. (6) Basculer le DNS quand validation OK. (7) Ne pas couper l ancien hebergement avant 7-14 jours pour permettre la propagation DNS et le retour arriere en cas de probleme.
Combien de sites WordPress sur un meme VPS ?
Variable selon les ressources et le trafic. 1-3 sites a fort trafic, 5-10 sites moyens, 20+ sites tres legers sur un VPS 4 vCPU / 8 Go RAM. Surveiller la charge serveur ; un site qui sature impacte les autres.
References
- Nginx Documentation — nginx.org/en/docs
- WordPress on Nginx (handbook) — wordpress.org/documentation/article/nginx
- Certbot Let s Encrypt — certbot.eff.org
- Redis Object Cache — wordpress.org/plugins/redis-cache
- Netdata — netdata.cloud
- UpdraftPlus — updraftplus.com