Installation d'une Solution LAMP

Procédure technique BTS SIO SISR - Debian 11

Objectif

Déployer un serveur web complet avec Apache, MariaDB et PHP sur Debian 11. Cette infrastructure permet d'héberger des applications web dynamiques et constitue la base de nombreux services web.

Prérequis

  • Serveur Debian 11 installé et fonctionnel
  • Accès root ou utilisateur avec droits sudo
  • Connexion réseau active et configurée
  • Nom de domaine ou adresse IP accessible (pour les tests)

Procédure Complète

Étape 1 : Mise à jour du système

Avant toute installation, mettre à jour la liste des paquets et le système :

apt update && apt upgrade -y
Explication : Cette commande met à jour la base de données des paquets disponibles et installe les dernières versions de sécurité. L'option -y permet de confirmer automatiquement les installations.

Étape 2 : Installation d'Apache

Apache est le serveur web qui va traiter les requêtes HTTP :

apt install apache2 -y

Activer Apache au démarrage du système :

systemctl enable apache2

Démarrer le service Apache :

systemctl start apache2

Vérifier le statut du service :

systemctl status apache2
Test : Ouvrir un navigateur et accéder à http://ADRESSE_IP_SERVEUR
Vous devriez voir la page par défaut d'Apache "Apache2 Debian Default Page".

Étape 3 : Installation de MariaDB

MariaDB est le système de gestion de base de données :

apt install mariadb-server -y

Activer MariaDB au démarrage :

systemctl enable mariadb

Démarrer le service :

systemctl start mariadb

Sécuriser l'installation de MariaDB :

mysql_secure_installation
Réponses recommandées pour mysql_secure_installation :
  • Enter current password for root : [Appuyer sur Entrée]
  • Switch to unix_socket authentication : N
  • Change the root password? : Y → [Saisir un mot de passe fort]
  • Remove anonymous users? : Y
  • Disallow root login remotely? : Y
  • Remove test database? : Y
  • Reload privilege tables? : Y

Étape 4 : Installation de PHP

Installation de PHP et des modules nécessaires :

apt install php php-mysql php-cli php-curl php-gd php-xml php-mbstring -y
Détail des modules PHP :
  • php : Interpréteur PHP
  • php-mysql : Connexion PHP vers MySQL/MariaDB
  • php-cli : Interface en ligne de commande PHP
  • php-curl : Transferts de données via URL
  • php-gd : Manipulation d'images
  • php-xml : Traitement XML
  • php-mbstring : Gestion des chaînes multi-octets

Redémarrer Apache pour prendre en compte PHP :

systemctl restart apache2

Étape 5 : Test de PHP

Créer un fichier de test PHP :

nano /var/www/html/phpinfo.php

Contenu du fichier phpinfo.php :

<?php
phpinfo();
?>

Sauvegarder et quitter (Ctrl+O, Entrée, Ctrl+X)

Test : Accéder à http://ADRESSE_IP_SERVEUR/phpinfo.php
Une page détaillée affichant la configuration PHP complète doit apparaître.
SÉCURITÉ CRITIQUE
Supprimer immédiatement le fichier phpinfo.php après le test, car il expose des informations sensibles sur la configuration du serveur.

Supprimer le fichier de test :

rm /var/www/html/phpinfo.php

Vérifications

Vérification des services

systemctl status apache2
systemctl status mariadb

Les deux services doivent être "active (running)"

Vérification des ports

ss -tulpn | grep -E '(apache|mysql)'

Résultat attendu :

  • Apache : port 80 (HTTP) et éventuellement 443 (HTTPS)
  • MySQL/MariaDB : port 3306

Test de connexion à MariaDB

mysql -u root -p

Saisir le mot de passe root défini lors de mysql_secure_installation

Une fois connecté, tester une commande SQL :

SHOW DATABASES;
EXIT;

Vérification de la version PHP

php -v

Affiche la version de PHP installée (généralement PHP 7.4.x sur Debian 11)

Test d'une page PHP simple

Créer un fichier de test basique :

echo "<?php echo 'LAMP fonctionne correctement !'; ?>" > /var/www/html/test.php

Accéder à http://ADRESSE_IP_SERVEUR/test.php

Sécurité et Limites

Mesures de sécurité essentielles

Configuration firewall (UFW) :
apt install ufw -y
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

Permissions des fichiers web

chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html

Désactiver l'affichage des erreurs PHP en production

Éditer le fichier de configuration PHP :

nano /etc/php/7.4/apache2/php.ini

Modifier les directives suivantes :

display_errors = Off
log_errors = On
error_log = /var/log/php/error.log

Sécuriser MariaDB

Configuration complémentaire dans /etc/mysql/mariadb.conf.d/50-server.cnf :

nano /etc/mysql/mariadb.conf.d/50-server.cnf

Vérifier que la directive suivante est présente (pour empêcher les connexions distantes) :

bind-address = 127.0.0.1

Limites techniques (niveau BTS)

Cette configuration n'est PAS production-grade :
  • Pas de certificat SSL/TLS configuré (HTTPS)
  • Pas de système de sauvegarde automatique
  • Pas de monitoring avancé
  • Pas de réplication de base de données
  • Pas de CDN ou cache avancé
  • Pas de système de haute disponibilité
  • Configuration minimale pour environnement de test/développement

Points de vigilance

  • Toujours supprimer les fichiers de test (phpinfo.php, test.php)
  • Utiliser des mots de passe forts pour MySQL root
  • Maintenir le système à jour régulièrement
  • Surveiller les logs : /var/log/apache2/ et /var/log/mysql/
  • Créer des utilisateurs MySQL spécifiques par application (jamais utiliser root)

Fichiers et Répertoires Importants

Chemin Description
/var/www/html/ Répertoire racine des fichiers web
/etc/apache2/ Configuration Apache
/etc/mysql/ Configuration MariaDB/MySQL
/etc/php/7.4/ Configuration PHP
/var/log/apache2/ Logs Apache (access.log, error.log)
/var/log/mysql/ Logs MariaDB

Points Clés pour l'Oral BTS

  • LAMP = Linux + Apache + MySQL/MariaDB + PHP
  • Apache : serveur web HTTP qui écoute sur le port 80
  • MariaDB : fork communautaire de MySQL (100% compatible)
  • PHP : langage de script côté serveur pour contenu dynamique
  • systemctl : gestionnaire de services sous systemd (Debian 11)
  • Sécurisation obligatoire : mysql_secure_installation, firewall, permissions
  • Cette stack permet d'héberger WordPress, Nextcloud, GLPI, etc.