Red Hat et dérivées version SERVEUR

Red Hat, Alma Linux : Installer et configurer un serveur LAMP (8 et 9)

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières



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.


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 :

Code BASH :
yum install httpd php php-mysql mariadb-server mariadb php-gd php-pdo



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 les protocoles http et https (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



Configuration des services



Activation et démarrage des services



On active les services concernés au démarrage :

Code BASH :
systemctl enable httpd.service
systemctl enable mariadb.service


Et on les démarre :

Code BASH :
systemctl start httpd.service
systemctl start 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 ...


Fichiers de configuration



Apache2



Fichier de configuration httpd.conf



Le fichier de configuration d'httpd est /etc/httpd/conf/httpd.conf
On peut sauvegarder le fichier original de configuration d'Apache :

Code BASH :
cp /etc/httpd/conf/httpd.conf ~/httpd.conf.backup



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 redémarre le démon httpd
Code BASH :
systemctl restart httpd.service



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/

Création d'une base et d'un utilisateur



On peut créer une base de données et un utilisateur associé directement dans la console mysql :

Code SQL :
CREATE DATABASE webdb;
GRANT ALL ON webdb.* TO 'webuser' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
exit;



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 :

Code BASH :
systemctl restart httpd


Les lignes commentées sont précédées d'un point-virgule.

Quelques astuces php.ini



Si on développe, on peut améliorer la gestion des erreurs et des logs :
Code BASH :
error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR
error_log = /var/log/php/error.log
max_input_time = 30


Et on créé le répertoire associé :
Code BASH :
mkdir /var/log/php
chown apache /var/log/php



Configuration pour un serveur web Sécurisé (SSL)




Installation des prérequis pour SSL



Dans le cas d'un serveur web sécurisé, rajouter les paquets correspondant au module SSL :

Code BASH :
yum install mod_ssl openssl



Générer les certificats (autosigné)



On génère la clé privée
Code BASH :
openssl genrsa -out ca.key 2048 


On génère le CSR (Certificate Signing Request, en français demande de signature de certificat)
Code BASH :
openssl req -new -key ca.key -out ca.csr


On génère sa clé auto-signée pour 1 an :
Code BASH :
openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt


On copie les fichiers dans le bon dossier :
Code BASH :
cp ca.crt /etc/pki/tls/certs
cp ca.key /etc/pki/tls/private/ca.key
cp ca.csr /etc/pki/tls/private/ca.csr



Configuration d'apache



On créé un fichier ssl.conf dans /etc/httpd/conf.d pour y indiquer les emplacements des certificats

Code BASH :
vi /etc/httpd/conf.d/ssl.conf


Code BASH :
SSLCertificateFile /etc/pki/tls/certs/ca.crt
SSLCertificateKeyFile /etc/pki/tls/private/ca.key


Et on redémarre httpd
Code BASH :
systemctl restart httpd



Configuration du Virtual Host



En reprenant le VirtualHost de tout à l'heure :

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>


Il suffit de rajouter dedans

Code BASH :
NameVirtualHost *:443
 
<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/ca.crt
    SSLCertificateKeyFile /etc/pki/tls/private/ca.key
    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>


On redémarre httpd et c'est terminé

Code BASH :
systemctl restart httpd