## 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. ```bash 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. ```bash sudo apt install -y apache2 sudo systemctl enable apache2 --now ``` Si UFW est utilisé, autorisez le trafic web. ```bash 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. ```bash 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. ```bash 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. ```bash 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. ```bash 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. ```bash sudo mysql -u root -p ``` ```sql 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. ```bash 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). ```bash 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. ```bash 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. ```php 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. ```php 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. ```bash sudo nano /etc/apache2/sites-available/wordpress.conf ``` ```apache ServerName votredomaine.com ServerAlias www.votredomaine.com DocumentRoot /var/www/wordpress AllowOverride All Require all granted DirectoryIndex index.php index.html ErrorLog ${APACHE_LOG_DIR}/wordpress-error.log CustomLog ${APACHE_LOG_DIR}/wordpress-access.log combined ``` 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. ```bash 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. ```bash 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. ```bash 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. ```bash 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. - https://votredomaine.com 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 : ```apache 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" ``` --- ## 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.