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_installationRé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 = 300Appliquez 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
mariadbCREATE 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.comGé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.comCertbot 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 directivefastcgi_pass, puis lisezjournalctl -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_sizeetclient_max_body_sizedoivent être cohérents des deux côtés. - Page blanche : passez
WP_DEBUGàtruedans wp-config.php et consultezwp-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/wpSur 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.