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 (CX22) | 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 CX22 (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 necessaires
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 modifie 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 connectes
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 terminee : $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 installe et configure avec les headers de sécurité
- PHP 8.2-FPM optimise avec OPcache
- MariaDB sécurisée avec utilisateur dédié
- WordPress installe 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.