Installer WordPress sur Ubuntu Server : Le Guide Ultime (Performance & Sécurité)

Vous voulez propulser votre site WordPress à un niveau supérieur ? Oubliez les installations par défaut. Dans ce guide complet, je vous accompagne de A à Z pour déployer WordPress sur Ubuntu Server en utilisant les meilleures technologies actuelles : ApachePHP-FPMMariaDB, et un cache d’objet ultra-rapide avec Redis via Unix Sockets. Que vous soyez un vétéran de l’informatique ou un passionné autodidacte, ce tutoriel vous donnera les clés d’un serveur sécurisé, moderne et extrêmement performant.

Étape 1 : Domaine, DNS et Préparation Système

1.1 Acquisition du domaine et DNS (Cloudflare)

Avant d’installer quoi que ce soit, votre nom de domaine doit pointer vers votre serveur.

  1. Achat : Achetez votre domaine sur Cloudflare (ou transférez-le). C’est l’un des registraires les moins chers et les plus sécurisés.
  2. Configuration DNS : Dans l’onglet DNS de Cloudflare, créez deux enregistrements :
    • Type A : Nom @ | Valeur [IP_DE_VOTRE_SERVEUR] | Proxy : Activé (nuage orange).
    • Type A (ou CNAME) : Nom www | Valeur [IP_DE_VOTRE_SERVEUR] (ou @).

1.2 Mise à jour et outils de base

Connectez-vous à votre Ubuntu Server via SSH. La première chose à faire est de s’assurer que tout est à jour et d’installer les outils qui nous serviront tout au long du tutoriel.

# Mise à jour des dépôts et du système
sudo apt update && sudo apt upgrade -y

# Installation des utilitaires indispensables
sudo apt install -y software-properties-common curl wget vim git unzip ufw

1.3 Sécurisation du pare-feu (UFW)

On ouvre les ports nécessaires pour le Web (HTTP/HTTPS) et le SSH pour ne pas perdre la main.

# Autoriser SSH, HTTP et HTTPS
sudo ufw allow OpenSSH
sudo ufw allow 'Apache Full'

# Activer le pare-feu
sudo ufw enable

Étape 2 : Installation de la pile haute performance (LAMP + FPM)

2.1 Installation d’Apache et MariaDB

On installe le serveur web et la base de données.

sudo apt install -y apache2 mariadb-server

2.2 Installation de PHP-FPM et des extensions WordPress

WordPress a besoin de modules spécifiques pour fonctionner, notamment pour la gestion des images, du texte (mbstring) et de la base de données. On utilise la version la plus stable (actuellement PHP 8.3, mais adapte selon ton dépôt).

# Installation de PHP-FPM et des modules requis
sudo apt install -y php8.3-fpm php8.3-mysql php8.3-curl php8.3-gd php8.3-intl php8.3-mbstring php8.3-xml php8.3-zip php8.3-imagick

2.3 Configuration de MariaDB (Sécurisation)

Lancez le script de sécurisation pour supprimer les accès anonymes et verrouiller l’accès root.

sudo mysql_secure_installation

Répondez Y à tout. Définissez un mot de passe robuste pour le root MySQL.

2.4 Création de la base de données pour WordPress

On crée un espace propre pour le site. Remplace wp_user et ton_mot_de_passe par tes infos.

sudo mysql -u root -p

-- Dans la console MySQL :
CREATE DATABASE wordpress_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'ton_mot_de_passe';
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wp_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Étape 3 : Activation de PHP-FPM dans Apache

Par défaut, Apache n’utilise pas FPM. On doit lui dire de passer par le socket PHP-FPM pour traiter les scripts PHP.

# Activation des modules de proxy pour Apache
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.3-fpm

# Redémarrage pour appliquer
sudo systemctl restart apache2

Étape 4 : Installation et Optimisation de Redis

Redis stocke les requêtes de la base de données en mémoire vive (RAM). Vous avez deux options pour connecter WordPress à Redis : la méthode TCP (standard) ou la méthode Unix Socket (haute performance).

4.1 Installation de base

Bash

sudo apt install -y redis-server php-redis

4.2 Configuration de Redis

Ouvrez le fichier de configuration : sudo nano /etc/redis/redis.conf

Réglages communs (à modifier dans les deux cas) :

  • maxmemory 256mb
  • maxmemory-policy allkeys-lru

OPTION A : Connexion TCP (La plus simple)

Laissez les réglages par défaut. Redis écoute sur 127.0.0.1:6379.

OPTION B : Connexion Unix Socket (La plus rapide)

Cherchez et modifiez ces lignes pour supprimer la latence réseau locale :

Extrait de code

unixsocket /var/run/redis/redis-server.sock
unixsocketperm 770

Si vous choisissez l’Option B, vous devez ajouter l’utilisateur web au groupe Redis :

sudo usermod -aG redis www-data

4.3 Application des changements

sudo systemctl restart redis-server
sudo systemctl restart apache2

Étape 5 : Création du Virtual Host Apache (Le « Cerveau »)

C’est ici qu’on lie tout ensemble : le nom de domaine, PHP-FPM et les règles de sécurité.

5.1 Création du dossier du site

sudo mkdir -p /var/www/votre-site.com/public_html
sudo chown -X www-data:www-data /var/www/votre-site.com/public_html

5.2 Le fichier de configuration

On crée le fichier : sudo nano /etc/apache2/sites-available/votre-site.com.conf

Colle cette structure (elle inclut déjà la redirection vers FPM) :

Apache

<VirtualHost *:80>
    ServerName votre-site.com
    ServerAlias www.votre-site.com
    DocumentRoot /var/www/votre-site.com/public_html

    <Directory /var/www/votre-site.com/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    # Intégration PHP-FPM
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/var/run/php/php8.3-fpm.sock|fcgi://localhost"
    </FilesMatch>

    ErrorLog ${APACHE_LOG_DIR}/votre-site_error.log
    CustomLog ${APACHE_LOG_DIR}/votre-site_access.log combined
</VirtualHost>

5.3 Activation

sudo a2ensite votre-site.com.conf
sudo a2enmod rewrite
sudo systemctl restart apache2

Étape 5.4 : Blindage du Virtual Host (Sécurité & HTTP/2)

On va modifier ton fichier de configuration pour ajouter les headers de sécurité et forcer des protocoles modernes.

1. Activation des modules nécessaires

Pour que les headers et les protocoles avancés fonctionnent, on active ces modules :

sudo a2enmod headers http2

2. Mise à jour du Virtual Host

On ouvre à nouveau le fichier : sudo nano /etc/apache2/sites-available/votre-site.com.conf

On y insère les directives de sécurité à l’intérieur du bloc <VirtualHost *:80>. Voici à quoi doit ressembler ton fichier pour être « Bulletproof » :

Apache

<VirtualHost *:80>
    ServerName votre-site.com
    ServerAlias www.votre-site.com
    DocumentRoot /var/www/votre-site.com/public_html

    # Activation de HTTP/2 (beaucoup plus rapide)
    Protocols h2 http/1.1

    <Directory /var/www/votre-site.com/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    # --- HEADERS DE SÉCURITÉ ---
    # Empêche le site d'être affiché dans une iFrame (protection contre le Clickjacking)
    Header always set X-Frame-Options "SAMEORIGIN"
    # Empêche le navigateur de deviner le type de contenu (MIME-sniffing)
    Header always set X-Content-Type-Options "nosniff"
    # Active la protection XSS du navigateur
    Header always set X-XSS-Protection "1; mode=block"
    # Politique de Referrer pour la vie privée
    Header always set Referrer-Policy "no-referrer-when-downgrade"
    # Strict-Transport-Security (HSTS) - À activer surtout après avoir mis le SSL
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

    # Intégration PHP-FPM
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/var/run/php/php8.3-fpm.sock|fcgi://localhost"
    </FilesMatch>

    ErrorLog ${APACHE_LOG_DIR}/votre-site_error.log
    CustomLog ${APACHE_LOG_DIR}/votre-site_access.log combined
</VirtualHost>

3. Test et Redémarrage

Avant de redémarrer, on vérifie toujours que la syntaxe est correcte :

sudo apache2ctl configtest
# Si vous voyez "Syntax OK", on redémarre :
sudo systemctl restart apache2

Étape 6 : Certification SSL avec Certbot

Maintenant que le Virtual Host est prêt et sécurisé, on va obtenir le petit cadenas vert. C’est l’étape finale avant d’envoyer les fichiers WordPress.

# Installation de Certbot pour Apache
sudo apt install -y certbot python3-certbot-apache

# Lancement de la génération du certificat
sudo certbot --apache -d votre-site.com -d www.votre-site.com

Certbot va détecter automatiquement ton Virtual Host, créer les certificats Let’s Encrypt et modifier lui-même ton fichier de config pour rediriger tout le trafic HTTP vers HTTPS. Lorsque vous aurez termin/ votre site web vous pourrez vérifier à l’adresse suivante https://securityheaders.com/

Étape 7 : Installation de WordPress et Permissions

7.1 Téléchargement de la dernière version

On se place dans le dossier parent, on télécharge l’archive officielle et on l’extrait.

# Aller dans le dossier parent ou le créer avant (si ce n'est pas déjà fait)
sudo mkdir -p /var/www/votre-site.com/
cd /var/www/votre-site.com/

# Télécharger WordPress
sudo wget https://wordpress.org/latest.tar.gz

# Extraire l'archive
sudo tar -xzvf latest.tar.gz

# Déplacer le contenu vers public_html (si ce n'est pas déjà fait)
sudo cp -R wordpress/. public_html/

# Nettoyage
sudo rm -rf wordpress latest.tar.gz

7.2 Gestion des permissions (Crucial)

C’est l’étape où beaucoup de gens se trompent. Pour qu’Apache (via www-data) puisse écrire des fichiers (mises à jour, uploads d’images) tout en restant sécurisé, on applique ceci :

# Définir le propriétaire sur l'utilisateur web d'Ubuntu
sudo chown -R www-data:www-data /var/www/votre-site.com/public_html

# Permissions pour les dossiers (755) et les fichiers (644)
sudo find /var/www/votre-site.com/public_html -type d -exec chmod 755 {} \;
sudo find /var/www/votre-site.com/public_html -type f -exec chmod 644 {} \;

Étape 8 : Optimisation de PHP pour WordPress

Par défaut, PHP est assez restrictif sur la taille des fichiers. On va augmenter les limites pour ne pas être bloqué lors de l’import de thèmes ou d’images lourdes.

8.1 Édition du fichier php.ini

Il faut modifier le fichier de PHP-FPM (et non celui d’Apache). sudo nano /etc/php/8.3/fpm/php.ini (ajuste la version si besoin).

Cherchez et modifiez ces valeurs (Ctrl+W pour chercher dans Nano) :

  • upload_max_filesize = 128M
  • post_max_size = 128M
  • memory_limit = 512M
  • max_execution_time = 300
  • date.timezone = America/Toronto (ou ta zone)

8.2 Redémarrage des services

Pour que PHP-FPM prenne en compte les changements de mémoire et que WordPress puisse utiliser Redis :

sudo systemctl restart php8.3-fpm
sudo systemctl restart apache2

Étape 9 : Configuration de l’Object Cache (Redis)

Pour que WordPress utilise réellement la mémoire RAM (Redis) au lieu de solliciter la base de données MariaDB à chaque clic, il faut installer un « pont ».

  1. Installation via l’interface : Allez dans votre tableau de bord WordPress > Extensions > Ajouter.
  2. Recherchez : « Redis Object Cache ». Installez et activez-le.
  3. Activation : Allez dans Réglages > Redis et cliquez sur « Enable Object Cache ».
    • Note : Si tout est bien configuré (grâce à l’étape 4), le statut passera au vert (« Connected »).

Étape 9.1 : Liaison WordPress vers Redis (Choix de la méthode)

Selon l’option choisie à l’étape 4, ajoutez les lignes correspondantes dans votre fichier wp-config.php (juste avant la fin du fichier) :

Pour l’Option A (TCP) :

PHP

define( 'WP_REDIS_HOST', '127.0.0.1' );
define( 'WP_REDIS_PORT', 6379 );

Pour l’Option B (Unix Socket) :

PHP

define( 'WP_REDIS_SCHEME', 'unix' );
define( 'WP_REDIS_PATH', '/var/run/redis/redis-server.sock' );


Étape 10 : Optimisation du fichier wp-config.php

Le fichier wp-config.php est le cœur de votre installation. On va y ajouter quelques lignes pour la sécurité et la performance.

Ouvrez le fichier : sudo nano /var/www/votre-site.com/public_html/wp-config.php

Ajoutez ces lignes juste avant la ligne /* That's all, stop editing! Happy publishing. */ :

PHP

// Désactiver l'éditeur de fichiers intégré (Sécurité)
define( 'DISALLOW_FILE_EDIT', true );

// Forcer l'utilisation du SSL pour l'administration
define( 'FORCE_SSL_ADMIN', true );

// Limiter le nombre de révisions d'articles (pour ne pas encombrer la DB)
define( 'WP_POST_REVISIONS', 5 );

// Augmenter la mémoire WP (en plus du php.ini)
define( 'WP_MEMORY_LIMIT', '512M' );

Étape 11 : Mise en place du Cron Système (Optionnel mais recommandé)

Par défaut, WordPress lance ses tâches planifiées (publier un article, vérifier les mises à jour) chaque fois qu’un visiteur charge une page. Sur un site performant, il est préférable de confier cela au système Ubuntu.

  1. Désactiver le WP-Cron interne : Dans votre wp-config.php, ajoutez : define( 'DISABLE_WP_CRON', true );
  2. Créer une tâche Cron système : sudo crontab -u www-data -e
  3. Ajoutez cette ligne à la fin pour qu’elle s’exécute toutes les 5 minutes : */5 * * * * php /var/www/votre-site.com/public_html/wp-cron.php > /dev/null 2>&1

Étape 12 : Ajustement de PHP pour les médias lourds

Par défaut, WordPress limite l’envoi de fichiers à 2 Mo, ce qui est trop peu pour les thèmes modernes ou les images haute résolution.

12.1 Configuration de PHP-FPM

Ouvre le fichier de configuration PHP-FPM : sudo nano /etc/php/8.3/fpm/php.ini

Modifie les valeurs suivantes pour permettre des uploads confortables (128 Mo est une bonne base) :

Ini, TOML

upload_max_filesize = 128M
post_max_size = 128M
memory_limit = 512M
max_execution_time = 300

12.2 Configuration d’Apache (Optionnel)

Pour éviter qu’Apache ne bloque les requêtes avant même qu’elles n’atteignent PHP, tu peux ajouter cette ligne à ton Virtual Host (dans le bloc <VirtualHost>) :

Apache

LimitRequestBody 134217728

N’oublie pas de redémarrer le service pour appliquer : sudo systemctl restart php8.3-fpm


Étape 13 : Autocomplétion et Cache d’Objet (Le final)

C’est ici que la magie de Redis opère. WordPress va utiliser la RAM pour « prédire » et servir les données instantanément.

13.1 Installation de l’extension

  1. Connecte-toi à ton interface WordPress.
  2. Va dans Extensions > Ajouter.
  3. Installe « Redis Object Cache » (par Till Krüss).

13.2 Activation

Une fois l’extension activée :

  1. Va dans Réglages > Redis.
  2. Clique sur Enable Object Cache.
  3. Si tu as bien configuré le wp-config.php à l’étape précédente (TCP ou Socket), le statut passera à « Connected ».

13.3 Vérification avec le terminal

Pour être sûr que ton site envoie bien des données à Redis, tu peux surveiller le trafic en temps réel depuis ton terminal :

  • Si TCP : redis-cli monitor
  • Si Socket : redis-cli -s /var/run/redis/redis-server.sock monitor

Rafraîchis une page de ton site : tu devrais voir défiler des commandes GET et SET instantanément. C’est le signe que ton serveur ne travaille plus « dur » pour interroger la base de données !

Félicitations ! Votre instance WordPress est maintenant une véritable machine de guerre. En utilisant PHP-FPM et Redis, vous avez réduit la charge de votre base de données et optimisé le temps de réponse pour vos visiteurs.

Scroll to Top