ITSkillsCenter
WordPress

Déployer WordPress sur un VPS avec Nginx : tutoriel complet

9 min de lecture

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.

Besoin d'un site web ?

Confiez-nous la Création de Votre Site Web

Site vitrine, e-commerce ou application web — nous transformons votre vision en réalité digitale. Accompagnement personnalisé de A à Z.

À partir de 350.000 FCFA
Parlons de Votre Projet
Publicité

Articles Similaires