Serveur LAMP

Mise en œuvre d'un serveur LAMP (Linux, Apache, MySQL, PHP)

Introduction

Un serveur LAMP (Linux, Apache, MySQL, PHP) est une pile logicielle courante pour héberger des sites web dynamiques. Cette activité présente l'installation et la configuration complète d'un tel serveur sur Debian.

Architecture du serveur LAMP

Internet
pfSense
WAN (DHCP) LAN: 192.168.1.1
Réseau Local
192.168.1.0/24
Serveur LAMP
Debian Core 192.168.1.10 Apache + MySQL + PHP
Station Admin
Debian GUI IP: DHCP

1. Préparation du serveur LAMP

Connexion au serveur depuis la machine cliente en ssh:

Terminal
ssh administrateur@192.168.1.10

On modifie le hostname en debian-lamp :

sudo nano /etc/hostname

De memes pour le fichier hosts

sudo nano /etc/hosts

qui doit au final ressembler à ceci :

127.0.0.1       localhost
127.0.1.1       debian-lamp

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Il faut à ce point redémarrer le serveur :

sudo reboot

le redémarrage du serveur a coupé la session ssh et rendu la main du terminal à notre VM debian-gui (cliente) ; profitons-en pour lancer une mise à jour et installer des outils wget, curl et dnsutils :

sudo apt update && sudo apt upgrade && sudo apt -y install curl wget dnsutils

Puis on se reconnecte au serveur fraîchement relancé :

ssh pascal@192.168.1.10

On lance une mise à jour et l'installation des utilitaires wget et tree :

sudo apt update && sudo apt upgrade && sudo apt -y install wget tree

2. Installation et configuration d'APACHE

Sur notre serveur tout neuf, on installe tout simplement apache avec :

sudo apt install apache2

On peut dès lors tester le fonctionnement depuis le navigateur de la machine GUI :

Capture d'ecran Apache HTTP

Configuration type :

curl -I 192.168.1.10

On peut obtenir l’état du service apache2 avec cette commande habituelle (depuis le terminal connecté au serveur) :

systemctl status apache2

Pour arrêter le service :

sudo systemctl stop apache2

On voit alors qu’il ne répond plus (si on rafraichit la page web depuis le navigateur) :

Capture d'ecran Apache HTTP

Vérifiez aussi ce que donne la vérification du statut. Relaçons le service :

sudo systemctl restart apache2

3. Configuration de base d'Apache

L’installation d'Apache2 vient avec une configuration de base, qui s’appuie sur la structure du répertoire /etc/apache2, dont on peut voir l’arborescence au premier niveau en tapant cette commande :

tree -L 1 /etc/apache2

Ce qui donne :

/etc/apache2
├── apache2.conf
├── conf-available
├── conf-enabled
├── envvars
├── magic
├── mods-available
├── mods-enabled
├── ports.conf
├── sites-available
└── sites-enabled

Le fichier de configuration principal est /etc/apache2/apache2.conf, dont on affiche le contenu ci-dessous. A l’aide de grep, on supprime de l’affichage les lignes de commentaire (les lignes qui commencent par le caractère #) :

cat /etc/apache2/apache2.conf | grep ^[^#]

Nous obtenons ::

DefaultRuntimeDir ${APACHE_RUN_DIR}
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
HostnameLookups Off
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
Include ports.conf

    Options FollowSymLinks
    AllowOverride None
    Require all denied


    AllowOverride None
    Require all granted


    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted

AccessFileName .htaccess

    Require all denied

LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf

4. VirtualHost par defaut

La page d’accueil par défaut post-installation nous invite à modifier le fichier /var/www/html/index.html :

On peut dès lors tester le fonctionnement depuis le navigateur de la machine GUI :

Capture d'ecran Apache HTTP

D'abord, on se rend dans le répertoire :

cd /etc/apache2/sites-enabled

On liste les fichiers, et on voit le lien symbolique de 000-default.conf :

ls -lht

Regardons son contenu, en supprimant les commentaires (grâce à l'outil grep) :

cat 000-default.conf | grep -v ^[[:space:]]*#

Ce qui donne :

VirtualHost *:80>

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

  ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

VirtualHost

Rendez-vous dans le répertoire racine (root) du virtualhost : /var/www/html

cd /var/www/html

On peut voir que le fichier index.html appartient à root :

ls -l

Pour le modifier, ne donc pas oublier le sudo :

sudo nano index.html

5. Creation d'un site web basique

Pour créer un premier site web spécifique, on va configurer un nouveau serveur virtuel.

Créons donc notre fichier de configuration virtualhost :

sudo nano /etc/apache2/sites-available/example.com.conf

Qui contiendra le texte suivant :

VirtualHost *:80
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot "/var/www/example"
    Directory "/var/www/example"
        Options +FollowSymLinks
        AllowOverride all
        Require all granted
    /Directory
    ErrorLog /var/log/apache2/error.example.com.log
    CustomLog /var/log/apache2/access.example.com.log combined
VirtualHost

Conclusion

Le serveur LAMP est maintenant opérationnel. Vous pouvez y déployer des applications web en PHP et gérer les bases de données avec MySQL. Cette configuration de base peut être enrichie avec des modules supplémentaires selon les besoins.