Installer WordPress 5 avec Apache sur Debian 9
Ce tutoriel te montrera comment installer et configurer la dernière version de WordPress 5 au sommet d’une pile LAMP dans Debian 9 – Stretch. WordPress est sans aucun doute l’un des systèmes de gestion de contenu ou CMS open-source les plus populaires utilisés de nos jours pour la publication sur Internet, qui alimente plus de 60 millions de sites Web dans le monde, qu’il s’agisse de petits sites de blogs ou de grandes marques notables. Basé sur le moteur PHP et MySQL, WordPress est souvent associé à la collection LAMP, soit installé sur des serveurs dédiés ou des serveurs privés virtuels, soit sur des fournisseurs d’hébergement web partagé. L’acronyme LAMP décrit une collection de logiciels, ou ensemble de logiciels, qui se compose généralement du noyau Linux Open Source, quelle que soit la distribution choisie, du serveur HTTP Apache, qui est l’un des serveurs Web open source les plus populaires sur Internet en raison de sa stabilité, de sa flexibilité et de ses performances, du langage de programmation interprété côté serveur PHP et du système de gestion de base de données relationnelle (SGBDR) MariaDB, l’un des logiciels de base de données les plus populaires, développé simultanément par la communauté open source à partir de MySQL.
Exigences
- Une installation propre du système d’exploitation Debian 9 sur un serveur privé virtuel ou une machine virtuelle ou directement sur une machine bare-metal dédiée.
- Un accès à distance SSH dans le cas d’un VPS ou d’un serveur distant ou un accès direct à la console.
- Au moins une adresse IP statique pour une interface réseau configurée sur le serveur
- Si la page Web doit être accessible au public sur Internet, tu auras besoin d’un nom de domaine public enregistré avec les enregistrements DNS appropriés configurés. Pendant ce tutoriel, nous utiliserons le domaine exemple.com et une adresse IP statique d’un espace privé, en NAT, derrière le routeur principal. Le domaine sera accessible depuis Internet en transférant les ports Apache 80 et 443 du côté du routeur vers le LAN interne de la machine virtuelle auto-hébergée.
Installe le pack de logiciels LAMP
La première chose à faire avant de commencer à installer tous les composants LAMP est de te connecter au serveur Debian 9 et d’effectuer une procédure de mise à jour pour tous les composants du système, comme les mises à niveau du noyau, les mises à jour des paquets ou les correctifs de sécurité, en envoyant les commandes suivantes avec les privilèges de root.
apt-get update
apt-get upgrade
apt-get dist-upgrade
À l’étape suivante, tu dois configurer le nom de ta machine en remplaçant la variable hostname par ton propre nom descriptif en exécutant la commande ci-dessous. Sache que tu devras peut-être redémarrer le système afin d’appliquer le nouveau nom d’hôte en conséquence.
hostnamectl set-hostname hostname.yourdomain.com
Tu devrais également installer les utilitaires suivants qui te seront utiles plus tard pour résoudre divers problèmes de dépannage.
apt install net-tools sudo wget curl bash-completion
Une fois que le nom d’hôte de la machine a été appliqué, connecte-toi à nouveau avec les privilèges root et installe le serveur HTTP Apache, qui est, par défaut, précompilé dans un paquet binaire et fourni par les dépôts de Debian 9.
apt install apache2
Ensuite, installe la dernière version de l’interpréteur de langage PHP et tous les modules nécessaires au serveur web Apache afin de déployer le CMS WordPress en lançant la commande suivante.
apt install libapache2-mod-php7.0 php7.0 php7.0-gd php7.0-xml php7.0-curl php7.0-mbstring php7.0-mcrypt php7.0-xmlrpc
Le dernier composant qui manque maintenant pour que la pile LAMP soit complète est le serveur de base de données MariaDB. Exécute la commande suivante pour installer le serveur MariaDB ainsi que le module PHP nécessaire pour accéder à la base de données depuis le serveur HTTP Apache.
apt install php7.0-mysql mariadb-server mariadb-client
Après avoir installé la base de données MariaDB, démarre le démon et sécurise la base de données en exécutant le script mysql_secure_installation comme illustré dans l’extrait ci-dessous. Réponds principalement par oui à toutes les questions que le script te pose. Veille aussi à choisir un mot de passe fort pour le compte root. Sache que le compte racine MySQL n’est pas identique au compte racine Linux. Le premier est utilisé uniquement pour gérer la base de données MariaDB et le second est le compte superutilisateur de chaque système Linux. Ces comptes ne se chevauchent jamais dans un système.
systemctl start mariadb
mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
Nous n’avons pas encore fini de sécuriser la base de données MariaDB. Par défaut, tu peux te connecter à MariaDB depuis localhost avec le compte root de la base de données sans qu’on te demande un mot de passe. Pour éviter d’éventuels problèmes de sécurité, connecte-toi à la base de données avec l’utilisateur root et exécute les commandes suivantes.
mysql -u root -p
MariaDB> use mysql;
MariaDB> update user set plugin='' where User='root';
MariaDB> flush privileges;
MariaDB> quit
Maintenant, teste la base de données en essayant de te connecter avec le compte root sans le mot de passe. Tu devrais te voir refuser l’accès à la base de données MariaDB.
Dans l’étape suivante, nous allons activer et configurer les modules TLS et rewrite pour le serveur Web Apache, qui sont désactivés par défaut. Exécute les commandes ci-dessous pour activer les deux modules.
a2enmod rewrite ssl
a2ensite default-ssl.conf
Ensuite, ouvre les fichiers de configuration Apache pour les deux sites activés et ajoute le bloc suivant sous la directive DocumentRoot comme illustré dans la capture d’écran suivante.
nano /etc/apache2/sites-enabled/000-default.conf
nano /etc/apache2/sites-enabled/default-ssl.conf
Dans les deux fichiers de configuration, ajoute le bloc de code suivant :
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
Dans apache default-ssl.conf TLS, tu peux aussi ajouter le contenu ci-dessous, s’il n’existe pas, afin d’améliorer la sécurité du protocole SSL d’Apache. Ces lignes de code devraient corriger les vulnérabilités SSL courantes.
SSLProtocol all -SSLv2 -SSLv3
# Add SSL Cipher in one long line
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder on
SSLOptions +StrictRequire
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
Si les lignes illustrées dans l’extrait ci-dessus existent déjà dans le fichier de configuration SSL d’Apache, assure-toi de les modifier pour qu’elles aient l’aspect décrit ci-dessus. Afin d’appliquer ces paramètres, active le module Apache headers et redémarre le service en exécutant les commandes suivantes :
a2enmod headers
systemctl restart apache2.service
Pour un site Web de production, il devrait être obligatoire d’activer le module Apache TLS car le CMS WordPress génère principalement du contenu dynamique via la passerelle PHP et gère également le processus d’authentification pour ses utilisateurs internes. L’utilisation de la technologie TLS garantit que les informations transférées sont cryptées aux deux extrémités et que la connexion est sécurisée. Un tiers ou un homme du milieu peut intercepter le trafic mais ne peut pas décrypter le contenu, car les informations ne sont pas livrées en texte clair.
Après avoir effectué toutes les modifications ci-dessus, teste la configuration d’Apache afin de détecter d’éventuelles erreurs de syntaxe et si tout est correct, redémarre les démons LAMP afin de refléter toutes les modifications effectuées jusqu’à présent et active les services à l’échelle du système en envoyant les commandes suivantes.
apache2ctl -t
systemctl restart apache2.service mariadb.service
systemctl enable apache2.service mariadb.service
Enfin, vérifie si les services Apache et MariaDB ont ouvert des ports en état d’écoute en lançant la commande netstat et en filtrant la sortie à l’aide d’egrep. À présent, le serveur Web Apache devrait avoir les ports 80 et 443 (correspondant aux protocoles HTTP et https) généralement exposés et MariaDB ne devrait être lié qu’au socket localhost:3306. Utilise l’indicateur -n contre la commande netstat pour ne pas afficher les noms des services.
netstat -tlp| egrep 'http|mysql'
Pour vérifier que ton serveur Web est accessible depuis Internet via les protocoles HTTP et HTTPS, ouvre un navigateur et navigue vers ton nom de domaine. En naviguant via le protocole HTTPS, une erreur de certificat s’affichera dans le navigateur. Cela est dû au fait que le fichier de configuration TLS par défaut d’Apache est configuré pour utiliser des certificats auto-signés. Tu dois accepter l’erreur TLS et continuer à naviguer vers la page Web par défaut comme illustré ci-dessous.
http://www.yourdomain.com
https://www.yourdomain.com
Si tu ne peux pas accéder à la page Web par défaut de ton domaine depuis Internet, tu dois d’abord vérifier si certaines règles du pare-feu du système bloquent les demandes ou si les ports appropriés du routeur sont transférés vers ton réseau local interne si le serveur se trouve derrière un réseau NAT. Tu peux aussi vérifier les enregistrements DNS dans le panneau de ton registraire de domaine et t’assurer qu’ils pointent vers ton IP WAN et que les enregistrements ont fini de se propager sur Internet.
Afin de tester si PHP fonctionne comme prévu du côté du serveur, crée un fichier PHP php dans le chemin système /var/www/html/, qui est le chemin par défaut de la racine du document Web du serveur Web Apache, en émettant la commande ci-dessous et en naviguant vers l’URI suivant depuis le navigateur pour obtenir le résultat : http://www.yourdomain.com/info.php
echo '<?php phpinfo(); ?>' > /var/www/html/info.php
Installe WordPress 5.0
Maintenant que la pile LAMP est entièrement configurée, l’installation du CMS WordPress est relativement simple. Tout d’abord, connecte-toi à la base de données MariaDB et crée une base de données d’installation pour WordPress et un utilisateur avec le mot de passe approprié pour installer et gérer WordPress CMS, en exécutant les commandes ci-dessous. N’hésite pas à remplacer le nom et les informations d’identification de la base de données pour qu’ils correspondent à tes propres besoins.
mysql -u root -p
CREATE DATABASE wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress-user'@'localhost' IDENTIFIED BY 'wordpress-pass';
FLUSH PRIVILEGES;
Ensuite, télécharge la dernière version de WordPress sur le site officiel à l’aide de l’utilitaire wget et extrais l’archive compressée avec l’utilitaire tar. Copie les fichiers d’installation dans le chemin de la racine du document du serveur Web Apache en exécutant les commandes ci-dessous. Veille aussi à supprimer la page Web index.html par défaut.
cd /tmp
wget http://wordpress.org/latest.tar.gz
tar xfz latest.tar.gz
cp -rf wordpress/* /var/www/html/
rm /var/www/html/index.html
Modifie les autorisations du chemin racine du document Web d’Apache comme décrit ci-dessous afin d’accorder au groupe www-data du serveur Web des droits d’écriture complets sur le répertoire d’installation. Cette configuration permettra au serveur Web Apache de créer ou de modifier des fichiers et des répertoires sous ce chemin système spécifique. Les plus importants sont le répertoire uploads et le fichier .htaccess qui peuvent être utilisés pour contrôler et étendre les fonctionnalités d’Apache.
chmod -R 775 /var/www/html/
chgrp -R www-data /var/www/html/
ls -al /var/www/html
Maintenant que tout est en place, commençons à installer WordPress. Le processus d’installation sera effectué depuis le navigateur. Ouvre un navigateur et visite ton domaine via le protocole HTTPS. Sur le premier écran de l’installation, clique sur le bouton Let’s go pour commencer l’installation.
Dans l’écran d’installation suivant, ajoute le nom de la base de données, les informations d’accès à la base de données et l’hôte de la base de données que tu as créé plus tôt pour l’installation de WordPress et clique sur le bouton Envoyer pour continuer. La configuration de la base de données sera enregistrée dans /var/www/html/wp-config.php Tu peux modifier manuellement le fichier à une date ultérieure pour des besoins particuliers de WordPress.
Sur l’écran suivant, clique sur le bouton Exécuter l’installation et renseigne le titre de ton site Web, les informations d’identification de l’administrateur du site et l’adresse e-mail. Un mot de passe fort devrait être automatiquement généré par les scripts d’installation. Tu peux choisir d’enregistrer ce mot de passe ou de fournir ton propre mot de passe fort. Lorsque tu as terminé, clique sur le bouton Installer WordPress pour terminer le processus d’installation.
Enfin, une fois l’installation terminée avec succès, connecte-toi au tableau de bord WordPress avec les informations d’identification créées pendant le processus d’installation et commence à gérer ton propre site Web.
Connecte-toi au backend de WordPress.
Tableau de bord d’administration de WordPress.
Modification d’un article dans le nouvel éditeur Gutenberg de WordPress.
Front-end de WordPress 5.0 avec le nouveau thème TwentyNineteen.
Félicitations ! Tu as réussi à installer la dernière version du CMS WordPress sur le paquet de logiciels LAMP dans Debian 9, nom de code Stretch.
Téléchargement de l’image de la machine virtuelle de ce tutoriel
Ce tutoriel est disponible sous forme d’image de machine virtuelle prête à l’emploi au format ovf/ova qui est compatible avec VMWare et Virtualbox. L’image de la machine virtuelle utilise les identifiants de connexion suivants :
Connexion SSH / Shell
Nom d’utilisateur : administrator
Mot de passe : howtoforge
Cet utilisateur a les droits su.
Nom d’utilisateur : root
Mot de passe : howtoforge
Connexion WordPress
Nom d’utilisateur : admin
Mot de passe : howtoforge
Connexion MySQL
Nom d’utilisateur : root
Mot de passe : howtoforge
L’IP de la VM est 192.168.1.100, elle peut être modifiée dans le fichier /etc/network/interfaces. Change tous les mots de passe ci-dessus pour sécuriser la machine virtuelle.