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.
On va donc installer Apache (le paquet est httpd), MariaDB, PHP, et les modules PHP permettant la connexion à la base de données :
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 les protocoles http et https (ici si la zone de l'interface est public) :
On active les services concernés au démarrage :
Et on les démarre :
On initialise le moteur de base de données :
On va pouvoir ainsi définir le mot de passe root, supprimer les comptes anonymes ...
Le fichier de configuration d'httpd est /etc/httpd/conf/httpd.conf
On peut sauvegarder le fichier original de configuration d'Apache :
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 redémarre le démon httpd
Le fichier de configuration de MariaDB est /etc/my.cnf et certaines sections sont présentes dans /etc/my.cnf.d/
On peut créer une base de données et un utilisateur associé directement dans la console mysql :
Le fichier de configuration de PHP est /etc/php.ini
Après chaque modification, il est nécessaire de recharger httpd :
Les lignes commentées sont précédées d'un point-virgule.
Si on développe, on peut améliorer la gestion des erreurs et des logs :
Et on créé le répertoire associé :
Dans le cas d'un serveur web sécurisé, rajouter les paquets correspondant au module SSL :
On génère la clé privée
On génère le CSR (Certificate Signing Request, en français demande de signature de certificat)
On génère sa clé auto-signée pour 1 an :
On copie les fichiers dans le bon dossier :
On créé un fichier ssl.conf dans /etc/httpd/conf.d pour y indiquer les emplacements des certificats
Et on redémarre httpd
En reprenant le VirtualHost de tout à l'heure :
Il suffit de rajouter dedans
On redémarre httpd et c'est terminé
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