Prérequis

  • Serveur Debian 13 frais, accès SSH avec un utilisateur disposant de sudo ou root
  • Nom de domaine pointant vers l’adresse IP publique du serveur (recommandé pour HTTPS)
  • Ports 80 et 443 ouverts vers le serveur
  • Heure système correcte et synchronisée (chrony ou systemd-timesyncd)

Optionnel : si un pare-feu est actif, prévoyez d’ouvrir HTTP et HTTPS. Avec UFW, vous utiliserez plus bas les profils Apache ou Apache Full.


Étape 1 : Mise à jour du système

Mettez à jour tous les paquets puis redémarrez si nécessaire.

sudo apt update
sudo apt -y full-upgrade
sudo reboot

Reconnectez-vous en SSH après le redémarrage.


Étape 2 : Installer Apache

Installez Apache et activez-le au démarrage.

sudo apt install -y apache2
sudo systemctl enable apache2 --now

Si UFW est utilisé, autorisez le trafic web.

sudo ufw allow "Apache"

Test rapide : rendez-vous sur l’adresse IP du serveur dans un navigateur, la page par défaut d’Apache doit s’afficher.


Étape 3 : Installer MariaDB et sécuriser l’instance

Installez le serveur MariaDB et démarrez-le.

sudo apt install -y mariadb-server mariadb-client
sudo systemctl enable mariadb --now

Exécutez l’assistant de sécurisation, puis suivez les invites pour définir un mot de passe root SQL, supprimer les utilisateurs anonymes, désactiver l’accès root distant et supprimer la base de test.

sudo mariadb-secure-installation

Étape 4 : Installer PHP et les extensions nécessaires

Installez PHP avec le module Apache et les extensions requises par WordPress.

sudo apt install -y php libapache2-mod-php php-mysql php-xml php-curl php-gd php-mbstring php-zip

Vérifiez la version de PHP.

php -v

Étape 5 : Créer la base de données et l’utilisateur WordPress

Connectez-vous à MariaDB en root et créez une base dédiée ainsi qu’un utilisateur restreint. Remplacez le mot de passe par une valeur forte.

sudo mysql -u root -p
CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'MotDePasseUltraSecret!';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Étape 6 : Télécharger et positionner WordPress

Placez-vous dans le répertoire web et récupérez l’archive officielle, puis extrayez-la. Ici, on installe WordPress dans le dossier /var/www/wordpress.

cd /var/www
sudo wget https://wordpress.org/latest.tar.gz
sudo tar -xzf latest.tar.gz
sudo rm latest.tar.gz

Ajustez les propriétaires et permissions pour Apache (www-data).

sudo chown -R www-data:www-data /var/www/wordpress
sudo find /var/www/wordpress -type d -exec chmod 755 {} \;
sudo find /var/www/wordpress -type f -exec chmod 644 {} \;

Copiez et éditez le fichier de configuration modèle.

cd /var/www/wordpress
sudo cp wp-config-sample.php wp-config.php
sudo nano wp-config.php

Dans wp-config.php, adaptez les quatre constantes suivantes : DB_NAME, DB_USER, DB_PASSWORD et DB_HOST.

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

Option recommandé : ajoutez des clés et salages uniques en récupérant les valeurs depuis l’API de WordPress et remplacez celles par défaut. Vous pouvez également ajouter cette directive pour empêcher l’édition de fichiers depuis l’admin WordPress.

define( 'DISALLOW_FILE_EDIT', true );

Étape 7 : Créer un VirtualHost Apache dédié

Créez un site dédié pour votre domaine. Remplacez votredomaine.com par votre nom de domaine réel.

sudo nano /etc/apache2/sites-available/wordpress.conf
<VirtualHost *:80>
    ServerName votredomaine.com
    ServerAlias www.votredomaine.com
    DocumentRoot /var/www/wordpress

    <Directory /var/www/wordpress>
        AllowOverride All
        Require all granted
    </Directory>

    DirectoryIndex index.php index.html
    ErrorLog ${APACHE_LOG_DIR}/wordpress-error.log
    CustomLog ${APACHE_LOG_DIR}/wordpress-access.log combined
</VirtualHost>

Activez le site et mod_rewrite, puis désactivez le site par défaut si vous ne souhaitez pas qu’il réponde sur l’IP nue.

sudo a2ensite wordpress.conf
sudo a2enmod rewrite
sudo a2dissite 000-default.conf
sudo apache2ctl configtest
sudo systemctl reload apache2

Si UFW est actif, pensez à autoriser HTTPS dès maintenant.

sudo ufw allow "Apache Full"

Étape 8 : Activer HTTPS avec Let’s Encrypt

Installez Certbot et son plugin Apache, puis obtenez un certificat pour votre domaine. Acceptez la redirection automatique HTTP vers HTTPS lorsqu’elle est proposée.

sudo apt install -y certbot python3-certbot-apache
sudo certbot --apache -d votredomaine.com -d www.votredomaine.com

Le renouvellement est automatique via timer systemd. Testez un renouvellement à blanc si besoin.

sudo certbot renew --dry-run

Étape 9 : Finaliser l’installation via le navigateur

Ouvrez votre navigateur et rendez-vous sur l’URL de votre site en HTTPS.

Sélectionnez la langue, définissez le titre du site, créez l’utilisateur administrateur et validez. Ensuite :

  • Dans Réglages > Permaliens, activez un format convivial comme Nom de l’article
  • Supprimez le contenu de démonstration
  • Activez les mises à jour proposées

Étape 10 : Vérifications et dépannage

Vérifications rapides :

  • Apache actif et écoute sur 80 et 443
  • VirtualHost chargé, aucun conflit de DocumentRoot
  • Permissions correctes sur /var/www/wordpress
  • Accès à la base avec l’utilisateur wpuser
  • HTTPS fonctionnel et redirection en place

Journalisation utile :

  • Logs Apache : /var/log/apache2/wordpress-access.log et wordpress-error.log
  • Service Apache : sudo systemctl status apache2
  • Service MariaDB : sudo systemctl status mariadb

Problèmes fréquents :

  • Page blanche ou erreur interne : activer temporairement WP_DEBUG dans wp-config.php et consulter les logs Apache
  • Permaliens qui renvoient 404 : vérifier que mod_rewrite est activé et que AllowOverride All est bien présent dans le bloc Directory
  • Échec Let’s Encrypt : vérifier la résolution DNS du domaine et qu’aucun proxy ou pare-feu n’intercepte les requêtes ACME

Étape 11 : Étapes facultatives recommandées

Performances et sécurité :

  • Installer un cache côté WordPress et activer la compression et l’expiration côté Apache
  • Ajouter php-imagick et php-intl si nécessaire
  • Mettre en place des sauvegardes régulières de la base et du dossier wp-content
  • Surveiller automatiquement les mises à jour de sécurité système

Exemple de configuration d’entêtes basiques dans le VirtualHost SSL :

<IfModule mod_headers.c>
    Header always set X-Content-Type-Options "nosniff"
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>

Résumé

Vous disposez maintenant d’un WordPress opérationnel sur Debian 13 avec Apache, MariaDB, PHP et HTTPS. Conservez vos identifiants en lieu sûr, appliquez régulièrement les mises à jour et mettez en place des sauvegardes. Bon déploiement.