Install WordPress sur Debian 13 from scratch

1 - Mettre à jour le système et installer les outils

apt update && apt full-upgrade
apt install curl wget gnupg lsb-release

2 - Installer le serveur web

apt install apache2
systemctl enable apache2
systemctl start apache2 

3 - Installer PHP

apt install php php-cli php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip php-bcmath
systemctl restart apache2

4 - Installer MariaDB (ou MySQL)

apt install mariadb-server mariadb-client
systemctl enable mariadb
systemctl start mariadb

Securisation par script :
mariadb-secure-installation (ou mysql_secure_installation)

Manuellement :
mariadb

– Définir le mot de passe root
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MotDePasseFortIci';

– Supprimer les utilisateurs anonymes
DELETE FROM mysql.user WHERE User='';

– Supprimer la DB de test
DROP DATABASE IF EXISTS test;

– Recharger les privilèges
FLUSH PRIVILEGES;

EXIT;

5 - Créer la base de données pour WordPress

mysql -u root -p

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

6 - Installer WordPress

cd 
wget https://wordpress.org/latest.tar.gz
tar xzvf latest.tar.gz
mv wordpress /var/www/html/

Configurer les permissions :

chown -R www-data:www-data /var/www/html/wordpress
chmod -R 755 /var/www/html/wordpress
cd /var/www/html/wordpress
cp wp-config-sample.php wp-config.php

Éditer wp-config.php pour mettre les infos de DB (point 5) :
vi /var/www/html/wordpress/wp-config.php

define('DB_NAME, 'wordpress');
define('DB_USER', 'wpuser');
define('DB_PASSWORD', 'un_mot_de_passe_fort');
define('DB_HOST', 'localhost');

7 - Configurer Apache pour WordPress :

vi /etc/apache2/sites-available/wordpress.conf

<VirtualHost *:80>
ServerAdmin admin@example.com
DocumentRoot /var/www/html/wordpress
ServerName example.com

<Directory /var/www/html/wordpress/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
<FilesMatch ".php$">
SetHandler "proxy:unix:/run/php/php8.x-fpm.sock|fcgi://localhost/"
</FilesMatch>
ErrorLog ${APACHE_LOG_DIR}/wordpress_error.log
CustomLog ${APACHE_LOG_DIR}/wordpress_access.log combined
</VirtualHost>

a2ensite wordpress.conf
a2enmod rewrite
a2dissite 000-default.conf
systemctl restart apache2

8 - Usage d’une frontale pour HTTPS :

vi /var/www/html/wordpress/wp-config.php

Juste avant la ligne « /* That’s all, stop editing! Happy publishing. */ » :

// Force HTTPS si reverse proxy
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$_SERVER['HTTPS'] = ‘on’;
}

// Corrige l’hôte si nécessaire
if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
$_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
}

9 - Config Wordpress

https://monsite.mondomaine.fr/wp-login
Renseigner les bonnes infos dans General → Settings
Mettre “https” dans les deux champs WordPress Address (URL) et Site Address (URL) : https://monsite.domaine.fr

Télécharger le pack de langue : https://wpfr.net/wporg-localization-api/

mkdir -p /var/www/html/wordpress/wp-content/languages
chown -R www-data:www-data /var/www/html/wordpress/wp-content/languages

Puis choisir la langue dans Settings → General

10 - Passer sur php-fpm au mieu de php-mode

apache2ctl -M | grep php
php_module (shared) → indique que mod_php est actif.

systemctl status php8.x-fpm
Active: active (running) → Prêt à être utilisé

apache2ctl -M | grep proxy_fcgi
Si vide → Apache ne passe pas les requêtes PHP à FPM

Désactiver mod_php
a2dismod php8.x

Activer les modules nécessaires pour FPM

a2enmod proxy_fcgi setenvif
a2enconf php8.x-fpm

Relancer Apache et vérifier :

apache2ctl -M | grep proxy_fcgi

→ proxy_fcgi_module

11 - Fine tuning wp-config :

Juste avant la ligne « /* That’s all, stop editing! Happy publishing. */ » :
ajouter "define( 'WP_MEMORY_LIMIT', '256M');"
Générer les salt ici https://api.wordpress.org/secret-key/1.1/salt/ et les remplacer dans le fichier original

12 - Fine tuning php.ini

vi /etc/php/8.4/fpm/php.ini

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