Red Hat, Alma Linux : Installer et configurer un serveur LAMP (8 et 9)
Table des matières
LAMP est un acronyme :
Avec LAMP, on peut donc mettre en place un serveur Web, hébergeant un site web dynamique écrit en PHP, tout en allant chercher des données dans une base MariaDB.
Ce tutoriel est identique pour les bases Red Hat 8 et 9
On va donc installer Apache (le paquet est httpd), MariaDB, PHP, et les modules PHP permettant la connexion à la base de données + la couche SSL :
L'extension php-mysqlnd installée grâce à la précédente commande permet à PHP de pouvoir communiquer avec les bases MySQL / MariaDB.
Si vous ne voulez pas utiliser MySQL / MariaDB, il n'est pas nécessaire de l'installer. (Et vous pouvez ignorer la section MariaDB)
Si SELinux est actif, on active ce booléen permettant à httpd d'écrire dans le répertoires d'apache
Et on autorise dans le pare-feu le protocole http (ici si la zone de l'interface est public) :
On active les services concernés au démarrage :
Pour Apache :
Pour PHP-FPM :
Pour MariaDB :
On initialise le moteur de base de données :
On va pouvoir ainsi définir le mot de passe root, supprimer les comptes anonymes ...
Si et seulement si vous devez accéder à MariaDB depuis une autre machine; on autorise dans le pare-feu le protocole mysql (port 3306) (ici si la zone de l'interface est public) :
Le fichier de configuration principal d'Apache est /etc/httpd/conf/httpd.conf
On peut sauvegarder le fichier original de configuration d'Apache avant toute modification :
Vous pouvez aussi inclure vos propres fichiers de configuration dans /etc/httpd/conf.d/*.conf
On peut aussi créer des VirtualHosts pour chaque site web.
Voici une idée de config d'un site :
Les lignes ErrorLog et CustomLog ne sont pas nécessaires mais peuvent aider pour déboguer ou faire une analyse fine des éventuels dysfonctionnements.
On créé les ressources nécessaires :
Et bien sûr on recharge le démon httpd après chaque modification de configuration
Vous trouverez plus d'information concernant les Virtualhosts ici : https://www.linuxtricks.fr/wiki/apache-les-virtual-hosts
Le fichier de configuration de MariaDB est /etc/my.cnf et certaines sections sont présentes dans /etc/my.cnf.d/
Plus d'informations sur la configuration de MariaDB ici : https://www.linuxtricks.fr/wiki/mysql-configuration-et-securisation
Un guide des commandes de base est disponible ici : https://www.linuxtricks.fr/wiki/sql-guide-des-commandes-de-base
Le fichier de configuration de PHP est /etc/php.ini
Après chaque modification, il est nécessaire de recharger httpd et pfp-fpm :
Les lignes commentées sont précédées d'un point-virgule.
Vous pouvez retrouver les astuces, les personnalisations de PHP ici : https://www.linuxtricks.fr/wiki/php-configuration-et-securisation
Un article est dédié à la mise en place de Let's Encrypt ainsi que de la modification du VirtualHost à cette adresse : https://www.linuxtricks.fr/wiki/let-s-encrypt-mise-en-place
RHEL et dérivées : Installer une autre version de PHP grâce aux modules https://www.linuxtricks.fr/wiki/rhel-et-derivees-installer-une-autre-version-de-php-grace-aux-modules
Suite à plusieurs demandes, j'ai réalisé un article d'installation de phpMyAdmin sous CentOS 8 ici : https://www.linuxtricks.fr/wiki/centos-installer-phpmyadmin
Si vous avez des soucis d'accès à un dossier (exemple CMS qui n'a pas les droits malgré chown ou chmod correct), il faut appliquer le contexte correct au dossier :
Introduction
LAMP est un acronyme :
- Linux : Le système d'exploitation
- Apache : Le serveur Web
- MariaDB : Le serveur de Base de données (Fork de MySQL)
- PHP : Le langage de script
Avec LAMP, on peut donc mettre en place un serveur Web, hébergeant un site web dynamique écrit en PHP, tout en allant chercher des données dans une base MariaDB.
Ce tutoriel est identique pour les bases Red Hat 8 et 9
Installation des prérequis
On va donc installer Apache (le paquet est httpd), MariaDB, PHP, et les modules PHP permettant la connexion à la base de données + la couche SSL :
Code BASH :
dnf install httpd php mariadb-server mariadb php-{gd,pdo,xml,mbstring,zip,mysqlnd,opcache,json} mod_ssl openssl
L'extension php-mysqlnd installée grâce à la précédente commande permet à PHP de pouvoir communiquer avec les bases MySQL / MariaDB.
Si vous ne voulez pas utiliser MySQL / MariaDB, il n'est pas nécessaire de l'installer. (Et vous pouvez ignorer la section MariaDB)
Configuration du système
Si SELinux est actif, on active ce booléen permettant à httpd d'écrire dans le répertoires d'apache
Code BASH :
setsebool -P httpd_unified on
Et on autorise dans le pare-feu le protocole http (ici si la zone de l'interface est public) :
Code BASH :
firewall-cmd --permanent --zone=public --add-service=http firewall-cmd --permanent --zone=public --add-service=https firewall-cmd --reload
Configuration des services
Activation et démarrage des services
On active les services concernés au démarrage :
Pour Apache :
Code BASH :
systemctl enable --now httpd.service
Pour PHP-FPM :
Code BASH :
systemctl enable --now php-fpm.service
Pour MariaDB :
Code BASH :
systemctl enable --now mariadb.service
Initialisation du moteur de base de données
On initialise le moteur de base de données :
Code BASH :
mysql_secure_installation
On va pouvoir ainsi définir le mot de passe root, supprimer les comptes anonymes ...
Code TEXT :
Enter current password for root (enter for none): OK, successfully used password, moving on... Set root password? [Y/n] Y New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. ... Success! Remove anonymous users? [Y/n] ... Success! Disallow root login remotely? [Y/n] ... Success! Remove test database and access to it? [Y/n] - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reload privilege tables now? [Y/n] ... 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!
Si et seulement si vous devez accéder à MariaDB depuis une autre machine; on autorise dans le pare-feu le protocole mysql (port 3306) (ici si la zone de l'interface est public) :
Code BASH :
firewall-cmd --permanent --zone=public --add-service=mysql firewall-cmd --reload
Fichiers de configuration
Apache2
Fichier de configuration httpd.conf
Le fichier de configuration principal d'Apache est /etc/httpd/conf/httpd.conf
On peut sauvegarder le fichier original de configuration d'Apache avant toute modification :
Code BASH :
cp /etc/httpd/conf/httpd.conf ~/httpd.conf.backup
Vous pouvez aussi inclure vos propres fichiers de configuration dans /etc/httpd/conf.d/*.conf
Mise en place de site dans des VirtualHosts
On peut aussi créer des VirtualHosts pour chaque site web.
Voici une idée de config d'un site :
Code BASH :
NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin webmaster@example.com ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/example.com/public_html/ ErrorLog /var/www/example.com/logs/error.log CustomLog /var/www/example.com/logs/access.log combined </VirtualHost>
Les lignes ErrorLog et CustomLog ne sont pas nécessaires mais peuvent aider pour déboguer ou faire une analyse fine des éventuels dysfonctionnements.
On créé les ressources nécessaires :
Code BASH :
mkdir -p /var/www/example.com/public_html mkdir /var/www/example.com/logs
Et bien sûr on recharge le démon httpd après chaque modification de configuration
Code BASH :
systemctl reload httpd.service
Vous trouverez plus d'information concernant les Virtualhosts ici : https://www.linuxtricks.fr/wiki/apache-les-virtual-hosts
MariaDB
Fichier de configuration my.cnf
Le fichier de configuration de MariaDB est /etc/my.cnf et certaines sections sont présentes dans /etc/my.cnf.d/
Plus d'informations sur MySQL
Plus d'informations sur la configuration de MariaDB ici : https://www.linuxtricks.fr/wiki/mysql-configuration-et-securisation
Un guide des commandes de base est disponible ici : https://www.linuxtricks.fr/wiki/sql-guide-des-commandes-de-base
PHP
Fichier de configuration php.ini
Le fichier de configuration de PHP est /etc/php.ini
Après chaque modification, il est nécessaire de recharger httpd et pfp-fpm :
Code BASH :
systemctl reload httpd
Code BASH :
systemctl restart php-fpm
Les lignes commentées sont précédées d'un point-virgule.
Quelques astuces php.ini
Vous pouvez retrouver les astuces, les personnalisations de PHP ici : https://www.linuxtricks.fr/wiki/php-configuration-et-securisation
Configuration pour un serveur web Sécurisé (SSL) avec Let's Encrypt
Un article est dédié à la mise en place de Let's Encrypt ainsi que de la modification du VirtualHost à cette adresse : https://www.linuxtricks.fr/wiki/let-s-encrypt-mise-en-place
Aller plus loin avec PHP
RHEL et dérivées : Installer une autre version de PHP grâce aux modules https://www.linuxtricks.fr/wiki/rhel-et-derivees-installer-une-autre-version-de-php-grace-aux-modules
Installer phpMyAdmin
Suite à plusieurs demandes, j'ai réalisé un article d'installation de phpMyAdmin sous CentOS 8 ici : https://www.linuxtricks.fr/wiki/centos-installer-phpmyadmin
SElinux
Si vous avez des soucis d'accès à un dossier (exemple CMS qui n'a pas les droits malgré chown ou chmod correct), il faut appliquer le contexte correct au dossier :
Code BASH :
chcon -R -t httpd_sys_rw_content_t /var/www/html/ledossier