Préambule
J’installe cet LAMP Debian 10 sur un système de fichier en btrfs pour son avantage concernant la déduplication des données (un fichier en double ne prend qu’une seule fois la place sur le disque). En effet, je vais avoir de nombreuses fois les mêmes fichiers WordPress.
Etant donné qu’il ne s’agit que d’un serveur de test sans accès depuis le monde extérieur et non d’un serveur de production, je fais l’impasse sur certaines « sécurisations ». Mais en pieds de pages dans les sources, je mets des liens pour apporter des modifications pour sécuriser d’avantage ce serveur.
Après avoir fait une configuration de base (voir ici), je vais installer Apache, MariaDB et PHP sur ma Debian.
Etape par étape
J’installe l’ensemble des paquets en une seule fois :
apt install openssl snapd wget git apache2 libapache2-mod-php php8.0 php8.0-{bcmath,curl,gd,imagick,mbstring,mysql,xml,zip} php-cli php-{cli,cgi,common,curl,gd,gettext,gmagick,imagick,intl,json,mbstring,memcache,mysql,pear,phpseclib,xml,zip} mariadb-server webp -y
Je rends le service apache automatique au démarrage :
systemctl enable apache2
J’ajoute quelques modules utiles pour apache :
a2enmod rewrite deflate headers
Enfin, je relance le service :
systemctl restart apache2
Tous les modules disponibles se trouvent dans /etc/apache2/mods-available ; quand aux activés elles sont dans /etc/apache2/mods-enabled.
Afin de masquer les informations de version du serveur, j’ajoute ServerSignature Off à la fin du fichier de configuration de apache /etc/apache2/apache2.conf.
echo "ServerSignature Off" >> /etc/apache2/apache2.conf
Et encore une fois, il faut redémarrer apache pour appliquer les modifications.
systemctl restart apache2
Je crée un fichier de test.php et vérifie le bon fonctionnement de apache et php.
echo "<?php phpinfo(); ?>" >> /var/www/html/test.php


Je passe maintenant à la configuration de MariaDB et je subis un interrogatoire :
mysql_secure_installation
Je supprime les utilisateurs anonymes, les connexions distantes de root, la base de donnée test, etc…
Remove anonymous users ? [Y/n] Y Disallow root login remotely? [Y/n] Y Remove test database and access to it? [Y/n] Y Reload privilege tables now? [Y/n] Y
Je crée un nouvel utilisateur administrateur.
Remplacer nomutil par le nom de l’utilisateur et motdepasse par le mot de passe de cet utilisateur :
mysql -u root -p CREATE USER 'nomutil'@'localhost' IDENTIFIED BY 'motdepasse'; GRANT ALL PRIVILEGES ON *.* TO 'nomutil'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES; exit
Et j’active ce service de façon automatique :
systemctl enable mariadb
Je continue en activant les protocoles avec les modules SSL :
a2enmod ssl a2ensite default-ssl systemctl restart apache2
Le protocole HTTPS sera fonctionnel mais les navigateurs me renverront une erreur de certificat due à l’autogénération. Il me faudra donc utiliser un certificat « fiable » généré avec Lets Encrypt par exemple. Etape abordée dans un autre article.
Pour finir, j’installe phpMyAdmin afin d’avoir une interface web pour gérer les bases de données.
Je commence par télécharger la dernière version de phpMyAdmin dans le dossier temporaire :
wget -P /tmp https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
Puis, je crée son dossier phpmyadmin dans /usr/share. Je l’installe dans le dossier share afin de la partager entre les sites qui seront sur ce serveur :
mkdir /var/www/html/phpmyadmin
Enfin, je décompresse l’archive dans le dossier nouvellement créé :
tar xvf /tmp/phpMyAdmin-latest-all-languages.tar.gz --strip-components=1 -C /var/www/html/phpmyadmin
Maintenant, je copie le fichier de configuration « exemple » et l’édite :
cp /var/www/html/phpmyadmin/config.sample.inc.php /var/www/html/phpmyadmin/config.inc.php nano /var/www/html/phpmyadmin/config.inc.php
Dans ce fichier, il me faut localiser la ligne suivante :
$cfg['blowfish_secret'] = '';
Je renseigne une phrase secrète. Je n’ai pas besoin de me souvenir de cette phrase. Elle sera simplement utilisée comme clé de cryptage pour les cookies. J’utilise un générateur de mot de passe pour créer cette chaîne de 32 caractères.

Je modifie les autorisations du ficher config.inc.php :
chmod 660 /var/www/html/phpmyadmin/config.inc.php
Et j’attribue les propriétés du dossier de phpmyadmin :
chown -R www-data:www-data /var/www/html/phpmyadmin
Puis, pour finir, je redémarre apache :
systemctl restart apache2


Conclusion
Et voilà ! J’ai un serveur LAMP Debian 10 prêt à fonctionner et incluant une interface graphique pour gérer les bases de données.
Sources :
https://www.linuxtricks.fr/wiki/debian-installer-un-serveur-lamp-apache-mysql-php
https://phoenixnap.com/kb/how-to-install-phpmyadmin-on-debian-10
https://www1.zonewebmaster.eu/serveur-debian-securite/securiser-phpmyadmin
https://www.codeflow.site/fr/article/how-to-install-phpmyadmin-from-source-debian-10
https://www.interserver.net/tips/kb/install-and-serve-webp-images-on-ubuntu/
