Aller au contenu

Déploiement d'un serveur web LAMP

1. Objectif du cours

Assembler et valider une stack LAMP (Apache, MariaDB, PHP) sur Debian 13, sécuriser la base de données et diagnostiquer une panne de service web à partir des journaux.

2. Notions et définitions essentielles

  • Stack LAMP : Linux (socle), Apache (serveur HTTP), MariaDB (SGBD), PHP (moteur d'application).
  • Socket Unix : canal local inter-processus (ex. /run/php) évitant l'ouverture de ports réseau.
  • PHP-FPM vs mod_php : PHP-FPM = processus séparé via FastCGI (recommandé). mod_php = module embarqué dans Apache.
  • phpinfo() : page de test PHP exposant la configuration (à supprimer après validation).
  • mariadb-secure-installation : script interactif de durcissement MariaDB.

3. Fonctionnement et principes

La requête HTTP arrive sur Apache (port 80). Selon configuration, Apache sert les fichiers statiques ou délègue l'exécution PHP à PHP-FPM via FastCGI (socket Unix). PHP exécute la logique métier et peut interroger MariaDB via socket local. L'architecture en sockets réduit la surface réseau et améliore l'isolation. Sur Debian 13, privilégier les paquets APT officiels pour cohérence des dépendances et mises à jour de sécurité (Apache 2.4, MariaDB 11.8, PHP 8.4).

4. Commandes et manipulations

Groupées par procédure (liste restreinte aux commandes présentes dans le PDF) :

Installation et vérification Apache - Mettre à jour l'index et installer : apt update ; apt install apache2 - Vérifier service et activation au démarrage : systemctl status apache2 ; systemctl is-enabled apache2 ; systemctl is-active apache2 - Tester la configuration avant rechargement : apachectl configtest - Recharger la configuration : systemctl reload apache2

Installation MariaDB - Installer et vérifier : apt install mariadb-server ; systemctl status mariadb ; systemctl is-enabled mariadb

Installation PHP avec PHP-FPM (activation FastCGI dans Apache) - Installer PHP et extensions : apt install php php-cli ; apt install php-fpm ; apt install php-mysql - Vérifier le service FPM : systemctl status php8.4-fpm ; systemctl is-active php8.4-fpm - Activer modules/config Apache : a2enmod proxy_fcgi setenvif ; a2enconf php8.4-fpm ; systemctl reload apache2 - En cas de conflit avec mod_php : a2dismod php8.4 ; vérifier modules : apache2ctl -M | grep php

Validation fonctionnelle et tests - Créer page de test phpinfo() dans la racine web, puis la supprimer : rm /var/www/html/info.php

Durcissement MariaDB et gestion des comptes - Lancer le script interactif : sudo mariadb-secure-installation - Se connecter en tant que root système et administrer : mariadb ; commandes SQL CREATE DATABASE / CREATE USER / GRANT / FLUSH PRIVILEGES - Tester connexion applicative : mariadb -u appuser -p

Journaux et diagnostic - Consulter journal systemd d'Apache : journalctl -u apache2 --no-pager -n 50 - Suivre logs Apache en temps réel : tail -f /var/log/apache2/error.log et tail -f /var/log/apache2/access.log - Consulter logs PHP-FPM : journalctl -u php8.4-fpm

5. Sécurité et bonnes pratiques

  • Utiliser exclusivement les dépôts APT officiels de Debian 13 pour garantir cohérence et mises à jour.
  • Préférer PHP-FPM en production (isolation, pools, sécurité) ; ne pas activer simultanément mod_php et PHP-FPM sur un même vhost.
  • Après test phpinfo(), supprimer immédiatement le fichier de test (éviter fuite d'informations sensibles).
  • Exécuter mariadb-secure-installation et répondre positivement pour : suppression des comptes anonymes, désactivation de l'accès root distant, suppression de la base test, rechargement des privilèges.
  • Créer un compte applicatif dédié, limité à localhost et aux privilèges strictement nécessaires (SELECT, INSERT, UPDATE, DELETE) : principe du moindre privilège.
  • Vérifier que les services sont activés pour démarrer automatiquement (éviter un service désactivé après redémarrage).

6. Points essentiels à retenir pour le TSSR

  • La chaîne LAMP : Apache reçoit → délègue PHP via FastCGI (socket) → PHP interroge MariaDB → résultat retourné.
  • Apache écoute le port 80 ; PHP-FPM et MariaDB communiquent idéalement via sockets Unix locaux.
  • Debian 13 fournit Apache 2.4, MariaDB 11.8 et PHP 8.4 : privilégier ces paquets officiels pour production.
  • PHP-FPM est recommandé pour l'isolation et la gestion des ressources ; mod_php n'est pas conseillé en production.
  • Toujours valider la syntaxe Apache avant rechargement pour éviter interruptions : configtest préalable.
  • Supprimer toute page phpinfo() dès validation pour éviter fuite d'informations.
  • mariadb-secure-installation corrige trois points critiques : comptes anonymes, accès root distant, base test.
  • Créer un compte applicatif restreint et limiter sa portée à localhost et à la seule base applicative.
  • Démarche de diagnostic standard : vérifier l'état → valider syntaxe → lire journaux → correction ciblée → vérification et consignation.
  • Messages clés à connaître : AH00526 (erreur bloquante de config), AH00558 (avertissement ServerName), AH01079 (Apache ne parvient pas à joindre PHP-FPM).

7. Tableau récapitulatif

Élément Mod_php PHP-FPM
Intégration à Apache Interpréteur chargé dans processus Apache Processus séparé, FastCGI via socket
Isolation / pools Partagée avec Apache Isolation configurable par pool
Recommandation Debian 13 Non recommandé en production Recommandé en production
Risque de conflit Peut entrer en concurrence si les deux actifs Evite concurrence si mod_php désactivé

8. Vérifications pratiques

  • Confirmer que chaque service est actif et configuré pour démarrer automatiquement (état active/running et enabled).
  • Accéder à la page de test phpinfo() et vérifier que Server API affiche FPM/FastCGI (confirme PHP-FPM). Supprimer le fichier immédiatement après.
  • Après mariadb-secure-installation, vérifier l'absence de comptes anonymes, la désactivation de root distant et la suppression de la base test.
  • Tester la connexion du compte applicatif : il doit voir uniquement sa base applicative et information_schema, et ne pas pouvoir accéder à la base mysql.
  • En cas d'erreur HTTP 500, corréler horodatage et entrées : journal systemd pour un échec de démarrage, error.log pour erreurs de traitement (rechercher AH01079 pour backend php-fpm injoignable).

9. Flashcards Anki

Qu'est-ce que LAMP ? :: Linux, Apache, MariaDB et PHP formant une chaîne de traitement web. Sur quel port Apache reçoit-il les requêtes HTTP par défaut ? :: Port 80. Quel canal local évite l'ouverture d'un port réseau entre Apache et PHP-FPM ? :: Socket Unix (ex. /run/php). Quelle valeur de "Server API" dans phpinfo() confirme PHP-FPM ? :: FPM/FastCGI. Que corrige mariadb-secure-installation ? :: Supprime comptes anonymes, désactive accès root distant, supprime la base test et recharge les privilèges. Pourquoi privilégier les dépôts APT natifs de Debian en production ? :: Cohérence des dépendances, mises à jour de sécurité via apt et limitation des conflits de paquets tierce partie. Quelle commande vérifie la syntaxe des fichiers de configuration Apache ? :: apachectl configtest. Que signifie l'erreur AH00526 ? :: Erreur de syntaxe ou configuration bloquant le démarrage d'Apache. Quel message indique qu'Apache ne parvient pas à joindre PHP-FPM ? :: AH01079: failed to make connection to backend: php-fpm. Pourquoi ne pas utiliser root MariaDB pour l'application ? :: Root a tous les droits ; un compte applicatif restreint limite l'impact en cas d'exploitation (principe du moindre privilège).