Guides et tutoriels

Installer WordPress sur une stack LEMP (Nginx, PHP 8.3, MariaDB)

Publié le 5 septembre 2023 · 14 min de lecture

Prérequis

Un VPS Ubuntu 24.04 avec au moins 2 vCPU et 2 GB de RAM, un nom de domaine dont l'enregistrement A pointe vers l'IP du serveur, et un accès SSH root (ou sudo). Mettez le système à jour avant toute chose :

apt update && apt upgrade -y

Étape 1 — Installer Nginx et MariaDB

apt install -y nginx mariadb-server
systemctl enable --now nginx mariadb
mysql_secure_installation

Répondez « oui » à tout : suppression des utilisateurs anonymes, interdiction de la connexion root à distance, suppression de la base de test. Choisissez un mot de passe root MariaDB robuste.

Étape 2 — Installer PHP 8.3-FPM

Ubuntu 24.04 fournit PHP 8.3 en standard — inutile d'ajouter un PPA tiers :

apt install -y php8.3-fpm php8.3-mysql php8.3-curl php8.3-gd php8.3-mbstring \
  php8.3-xml php8.3-zip php8.3-intl php8.3-imagick php8.3-bcmath
systemctl enable --now php8.3-fpm

Étape 3 — Régler php.ini pour WordPress

Éditez /etc/php/8.3/fpm/php.ini et ajustez ces valeurs :

memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300

Appliquez avec systemctl reload php8.3-fpm. Le plafond d'upload doit rester cohérent avec le client_max_body_size de Nginx, défini à l'étape 6.

Étape 4 — Créer la base de données

mariadb
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'UnMotDePasseTresFort!';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wp_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

N'utilisez jamais le compte root MariaDB dans wp-config.php : un utilisateur dédié limite l'impact d'une fuite d'identifiants.

Étape 5 — Télécharger WordPress

mkdir -p /var/www/example.com
cd /tmp
wget https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz
cp -r wordpress/* /var/www/example.com/
chown -R www-data:www-data /var/www/example.com
chmod -R u=rwX,go=rX /var/www/example.com

Générez le fichier de configuration :

cd /var/www/example.com
cp wp-config-sample.php wp-config.php
curl -s https://api.wordpress.org/secret-key/1.1/salt/ > /tmp/salts.txt

Éditez wp-config.php : renseignez DB_NAME, DB_USER, DB_PASSWORD, remplacez le bloc des huit clés de sécurité par le contenu de /tmp/salts.txt, puis ajoutez :

define('FS_METHOD', 'direct');
define('DISABLE_WP_CRON', true);

FS_METHOD évite la demande d'identifiants FTP à chaque mise à jour de plugin. DISABLE_WP_CRON empêche le déclenchement des tâches planifiées à chaque visite — on le remplace par un vrai cron système à l'étape 8.

Étape 6 — Vhost Nginx

Créez /etc/nginx/sites-available/example.com :

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example.com;
    index index.php index.html;

    client_max_body_size 64M;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

Activez le site et validez la configuration :

ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx

Étape 7 — HTTPS avec Let's Encrypt

apt install -y certbot python3-certbot-nginx
certbot --nginx -d example.com -d www.example.com

Certbot réécrit le vhost pour servir le HTTPS et installe un timer systemd qui renouvelle le certificat automatiquement — vérifiez-le avec systemctl list-timers certbot.

Étape 8 — WP-Cron système

Par défaut, WordPress déclenche son cron à chaque chargement de page : imprévisible, et coûteux en pic de trafic. Avec DISABLE_WP_CRON actif, planifiez l'exécution toutes les cinq minutes :

crontab -u www-data -e
*/5 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1

Étape 9 — Terminer l'installation

Ouvrez https://example.com, choisissez la langue et créez le compte administrateur — jamais « admin » comme identifiant. Dans Réglages → Permaliens, sélectionnez « Titre de la publication » : le try_files du vhost gère déjà les réécritures, aucun .htaccess n'est nécessaire.

Vérification

  • systemctl status nginx mariadb php8.3-fpm — les trois services actifs.
  • curl -I https://example.com — réponse 200 en HTTPS.
  • Outil « Santé du site » de WordPress : aucun avertissement critique.

Dépannage

  • 502 Bad Gateway : PHP-FPM arrêté ou mauvais socket — comparez ls /run/php/ avec la directive fastcgi_pass, puis lisez journalctl -u php8.3-fpm.
  • « Error establishing a database connection » : testez les identifiants à la main avec mariadb -u wp_user -p wordpress.
  • Uploads refusés : upload_max_filesize, post_max_size et client_max_body_size doivent être cohérents des deux côtés.
  • Page blanche : passez WP_DEBUG à true dans wp-config.php et consultez wp-content/debug.log.

Aller plus loin

Installez WP-CLI pour administrer le site en ligne de commande :

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar && mv wp-cli.phar /usr/local/bin/wp

Sur un site à fort trafic, ajoutez un cache objet : paquet php8.3-redis, serveur Redis local, et le plugin « Redis Object Cache ». Les requêtes répétitives ne frapperont plus MariaDB.

Des tutoriels pas-à-pas rédigés par nos ingénieurs, testés sur notre infrastructure.

GLOBALCLOUDHOSTING →