Tuto installation serveur LAMP sur Debian 13

Tuto installation serveur LAMP sur Debian 13
Un serveur LAMP sur Debian 13 s’installe en préparant le système, puis en configurant Apache, MariaDB et PHP 8.4 avec PHP-FPM. La pile obtenue permet d’héberger des applications PHP reliées à une base de données, à condition de vérifier chaque service avant de passer au suivant et de ne pas exposer de fichiers de test en production.
Ce tutoriel d’installation d’un serveur LAMP cible Debian 13 et utilise les paquets officiels : Apache 2, MariaDB et PHP 8.4-FPM. La procédure suit l’ordre réel des dépendances : système, serveur web, base de données, moteur PHP, VirtualHost, puis validation par des requêtes locales.
En bref
🧩 LAMP signifie Linux, Apache, MariaDB et PHP. Debian 13 fournit PHP 8.4 dans ses dépôts officiels, selon les informations de version publiées lors de sa disponibilité en 2025.
🔒 MariaDB doit être sécurisée immédiatement après son installation. Le script dédié retire notamment des réglages de démonstration qui ne conviennent pas à un serveur exposé.
⚙️ PHP-FPM sépare l’exécution PHP du processus Apache. Cette méthode évite d’utiliser mod_php et facilite le contrôle du service PHP.
✅ Le test final repose sur trois contrôles distincts : Apache répond, PHP s’exécute et MariaDB accepte une connexion locale.
Quels prérequis faut-il réunir avant d’installer un serveur LAMP ?
Un serveur LAMP est une pile logicielle associant Linux pour le système, Apache pour les requêtes HTTP, MariaDB pour les données relationnelles et PHP pour l’exécution des applications web. Le tutoriel utilise une machine Debian 13 fraîchement installée, avec un accès administrateur via sudo et un accès réseau pour télécharger les paquets.
La procédure ci-dessous vise Debian 13 avec les dépôts APT officiels et PHP 8.4-FPM. Elle ne doit pas être copiée telle quelle sur Ubuntu, Debian 12 ou une distribution dérivée : les noms de paquets, les versions et certains fichiers de configuration peuvent différer.
- Une installation neuve ou une machine de test sous Debian 13.
- Un compte membre du groupe
sudo. - Un nom de domaine seulement si le serveur doit être publié sur Internet.
- Un accès SSH si la machine est distante, sans connexion administrateur directe exposée inutilement.
- Une sauvegarde ou un instantané de machine virtuelle avant toute modification sur un environnement existant.
Un serveur web fonctionnel ne devient pas automatiquement un serveur prêt pour Internet : l’exposition réseau, les comptes de base de données et les fichiers de test doivent être traités séparément.
Comment installer un serveur LAMP sur Debian 13 : les étapes
La séquence suivante installe Apache, MariaDB et PHP 8.4-FPM, puis configure un site PHP local. Chaque étape produit une ressource vérifiée immédiatement après sa création : cette méthode évite de chercher une erreur PHP alors que le service Apache ou le socket PHP-FPM n’est pas démarré.
Exécutez les commandes dans l’ordre, sans installer MySQL en parallèle de MariaDB sur la même machine. MariaDB est le choix retenu ici ; MySQL reste une alternative réelle, mais son installation et son administration doivent suivre sa propre documentation.

-
Mettre Debian 13 à jour. Cette étape applique les mises à jour disponibles avant l’installation des composants de la pile.
sudo apt update && sudo apt upgrade -y sudo rebootAprès le redémarrage, reconnectez-vous puis contrôlez la version de la distribution.
cat /etc/debian_version uname -rLe premier résultat doit afficher une version Debian 13.x. Le second affiche le noyau actuellement démarré.
-
Installer Apache et activer son démarrage automatique. Apache écoute habituellement sur le port HTTP 80 ; le service doit être actif avant de configurer un site.
sudo apt install -y apache2 sudo systemctl enable --now apache2 sudo systemctl status apache2 --no-pagerLe résultat attendu contient
active (running). Depuis la machine elle-même, vérifiez aussi la réponse HTTP :curl -I http://127.0.0.1Une ligne commençant par
HTTP/1.1 200ouHTTP/1.1 403confirme qu’Apache répond localement. Une réponse 403 peut être normale avant la création d’un contenu dans le répertoire configuré. -
Installer MariaDB et lancer sa sécurisation. MariaDB fournit le moteur de base de données de ce tutoriel ; le paquet serveur installe également le service système nécessaire.
sudo apt install -y mariadb-server sudo systemctl enable --now mariadb sudo systemctl status mariadb --no-pagerLe service doit être
active (running). Lancez ensuite l’assistant de sécurisation fourni par MariaDB :sudo mysql_secure_installationRépondez aux questions en lisant précisément le texte affiché. Refusez les comptes anonymes et la base de test lorsque l’assistant les propose. N’inscrivez pas un mot de passe dans l’historique du terminal, dans une commande collée ou dans un fichier de configuration lisible par d’autres utilisateurs.
sudo mariadb -e "SELECT VERSION();"La commande doit retourner une version MariaDB. Cette vérification teste une connexion locale avec les droits administratifs système, sans créer de mot de passe en clair.
-
Installer PHP 8.4-FPM et les extensions PHP courantes. L’extension
php8.4-mysqlpermet aux scripts PHP de communiquer avec MariaDB, tandis quecurl,gdetzipcouvrent des besoins fréquents d’applications web.sudo apt install -y php8.4-fpm php8.4-mysql php8.4-cli php8.4-curl php8.4-gd php8.4-zip sudo systemctl enable --now php8.4-fpm php -v sudo systemctl status php8.4-fpm --no-pagerLa commande
php -vdoit identifier PHP 8.4. Le statut dephp8.4-fpmdoit indiqueractive (running). -
Relier Apache à PHP-FPM. Apache doit activer les modules nécessaires pour transmettre les scripts PHP au service FPM via sa configuration fournie par Debian.
sudo a2enmod proxy_fcgi setenvif sudo a2enconf php8.4-fpm sudo systemctl reload apache2 sudo apachectl configtestLe dernier contrôle doit retourner
Syntax OK. Une configuration Apache ne doit jamais être rechargée sans ce test : une erreur de syntaxe peut rendre le service indisponible au prochain redémarrage. -
Créer un répertoire web et un VirtualHost dédié. Le site de démonstration sera servi depuis
/var/www/lamp-demo/public, avec des fichiers détenus parrootet lisibles par le serveur web ainsi que par les utilisateurs locaux autorisés par les permissions du système.sudo install -d -o root -g root -m 0755 /var/www/lamp-demo/public sudo tee /var/www/lamp-demo/public/index.php > /dev/null <<'PHP' <?php declare(strict_types=1); echo '<h1>Serveur LAMP opérationnel</h1>'; echo '<p>Apache transmet ce script à PHP-FPM.</p>'; PHP sudo chown root:root /var/www/lamp-demo/public/index.php sudo chmod 0644 /var/www/lamp-demo/public/index.phpCréez ensuite le fichier VirtualHost complet. Le nom local
lamp-demo.localsera utilisé uniquement pour le test depuis la machine serveur.sudo tee /etc/apache2/sites-available/lamp-demo.conf > /dev/null <<'APACHE' <VirtualHost *:80> ServerName lamp-demo.local DocumentRoot /var/www/lamp-demo/public <Directory /var/www/lamp-demo/public> Options -Indexes +FollowSymLinks AllowOverride None Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/lamp-demo-error.log CustomLog ${APACHE_LOG_DIR}/lamp-demo-access.log combined </VirtualHost> APACHE sudo a2dissite 000-default.conf sudo a2ensite lamp-demo.conf sudo apachectl configtest sudo systemctl reload apache2Le résultat attendu est
Syntax OK. Le paramètreOptions -Indexesempêche l’affichage automatique du contenu d’un dossier lorsqu’aucun fichier d’index n’est présent. -
Déclarer le nom local et tester PHP. Le fichier
/etc/hostsassocie un nom local à l’adresse de boucle ; cette étape ne remplace pas une configuration DNS publique.echo '127.0.0.1 lamp-demo.local' | sudo tee -a /etc/hosts curl -i http://lamp-demo.localLa réponse doit contenir
HTTP/1.1 200 OKet le texte « Serveur LAMP opérationnel ». Le fichier de démonstration ne révèle aucune information détaillée sur PHP.
Le fichier phpinfo() est utile pour diagnostiquer une machine de test, mais il expose la configuration PHP et ne doit pas rester accessible sur un serveur de production.
Pourquoi utiliser PHP-FPM plutôt que mod_php avec Apache ?
PHP-FPM est un gestionnaire de processus PHP qui exécute les scripts hors des processus Apache. Apache envoie les fichiers PHP au socket de PHP-FPM ; cette séparation permet de contrôler le service PHP indépendamment et correspond à la configuration retenue dans ce tutoriel Debian 13.
PHP-FPM constitue ici une option adaptée pour séparer le traitement PHP du serveur HTTP. Cette architecture ne remplace pas une surveillance des ressources, mais elle rend les responsabilités plus lisibles lors d’un diagnostic : Apache gère HTTP, PHP-FPM traite PHP et MariaDB stocke les données.
| Option | Fonctionnement | Cas d’usage | Limite à connaître |
|---|---|---|---|
| PHP-FPM | Apache transmet les scripts à un service PHP distinct. | Installation Debian 13 de ce tutoriel et hébergement d’applications PHP. | La configuration Apache et le service FPM doivent être actifs ensemble. |
| mod_php | PHP est chargé directement dans Apache. | Anciennes configurations ou cas simples à maintenir. | Ne doit pas être mélangé sans raison avec PHP-FPM sur le même VirtualHost. |
Comment vérifier que la pile LAMP fonctionne réellement ?
Un test LAMP fiable distingue les composants au lieu de se limiter à l’affichage d’une page web. Apache peut répondre alors que PHP-FPM est arrêté, et PHP peut fonctionner alors que l’extension MariaDB manque. Chaque commande suivante vérifie une couche précise.
La validation complète exige une réponse HTTP, une exécution PHP et une connexion locale à MariaDB. Un seul test positif ne prouve pas que toutes les briques de la pile sont disponibles.
- Apache :
curl -I http://lamp-demo.localdoit renvoyer un statut HTTP 200. - PHP :
curl http://lamp-demo.localdoit afficher le titre généré parindex.php. - PHP-FPM :
sudo systemctl is-active php8.4-fpmdoit retourneractive. - MariaDB :
sudo mariadb -e "SELECT 1 AS test;"doit afficher une colonnetestcontenant la valeur 1. - Configuration Apache :
sudo apachectl -Sdoit lister le VirtualHostlamp-demo.local.
Pour connaître les modules PHP actifs sans publier d’informations dans une page web, utilisez la commande suivante :
php -m | grep -E 'mysqli|pdo_mysql'
Le résultat doit afficher mysqli et/ou pdo_mysql. Ces modules sont fournis par le paquet php8.4-mysql installé plus haut.
Quelles protections ajouter après l’installation du serveur LAMP ?
Une pile LAMP fraîchement installée constitue une base technique, pas une configuration de production complète. Les décisions de sécurité dépendent notamment de l’exposition publique, du nom de domaine, des applications hébergées et de la politique de sauvegarde, mais plusieurs contrôles restent nécessaires dans tous les cas.
Le premier objectif est de réduire les services accessibles et de supprimer les outils de test avant la publication du site. N’ouvrez pas MariaDB vers Internet pour une application installée sur le même serveur : l’application PHP doit en principe joindre la base localement.
- Contrôlez les ports réellement ouverts avec
sudo ss -ltnp. - Conservez MariaDB en écoute locale tant qu’un besoin documenté ne justifie pas un accès distant.
- Utilisez HTTPS lorsqu’un nom de domaine pointe vers le serveur ; Let’s Encrypt fournit des certificats TLS gratuits, sous réserve de satisfaire sa procédure de validation.
- Créez un compte MariaDB distinct pour chaque application, avec seulement les privilèges nécessaires à sa base.
- Planifiez des sauvegardes chiffrées et testez la restauration, pas seulement la création des archives.
UFW peut servir d’interface simplifiée pour un pare-feu sur les systèmes où il est installé et administré par votre politique d’exploitation. Avant toute règle, vérifiez les règles existantes et évitez de vous couper l’accès SSH sur un serveur distant.
sudo ufw status verbose
Une configuration de pare-feu doit être validée depuis une seconde session SSH ouverte, afin de conserver une possibilité de retour arrière si une règle bloque l’accès administratif.
Serveur LAMP, LEMP ou Docker Compose : quelle approche choisir ?
LAMP, LEMP et Docker Compose répondent à des usages différents. LAMP désigne ici une installation directe sur Debian avec Apache, MariaDB et PHP ; LEMP remplace Apache par Nginx ; Docker Compose lance les composants dans des conteneurs définis par un fichier de configuration.
Pour apprendre l’administration d’un serveur PHP classique sur Debian 13, LAMP installé par APT reste le choix le plus direct. Pour reproduire exactement une pile entre plusieurs postes, Docker Compose peut être pertinent ; pour une architecture Nginx déjà maîtrisée, LEMP évite d’ajouter Apache sans raison.
| Approche | Serveur HTTP | À privilégier si… | Point de vigilance |
|---|---|---|---|
| LAMP | Apache | Vous voulez une pile PHP classique directement administrée sur Debian. | Les mises à jour et réglages sont gérés sur l’hôte. |
| LEMP | Nginx | Votre infrastructure utilise déjà Nginx et PHP-FPM. | Les fichiers de configuration Nginx ne sont pas interchangeables avec ceux d’Apache. |
| Docker Compose | Variable selon l’image | Vous devez reproduire une même pile entre développement et test. | Les volumes, réseaux et mises à jour d’images ajoutent une couche d’administration. |
Erreurs fréquentes lors d’une installation LAMP
Les échecs les plus courants viennent rarement d’une commande Apache isolée. Ils résultent plutôt d’un service non démarré, d’un VirtualHost non activé, d’une extension PHP oubliée ou d’une configuration mélangée entre plusieurs méthodes d’exécution PHP.
Le bon diagnostic part du composant qui échoue, puis remonte vers sa configuration et ses journaux. Les journaux Apache et l’état systemd donnent généralement une information plus exploitable qu’un redémarrage répété sans contrôle.
| Symptôme | Cause probable | Contrôle | Correction prudente |
|---|---|---|---|
| Erreur 502 ou 503 sur un script PHP | PHP-FPM est arrêté ou Apache ne charge pas sa configuration. | systemctl status php8.4-fpm |
Activez PHP-FPM, vérifiez a2enconf php8.4-fpm, puis testez Apache. |
| Le navigateur affiche le code PHP | Apache ne transmet pas le fichier à PHP-FPM. | apachectl -M | grep proxy_fcgi |
Activez les modules et la configuration PHP-FPM indiqués dans l’étape 5. |
| Erreur « Class mysqli not found » | L’extension PHP MariaDB/MySQL manque. | php -m | grep mysqli |
Installez php8.4-mysql, puis redémarrez PHP-FPM. |
| Apache ne redémarre plus | Une erreur existe dans un VirtualHost ou un module. | sudo apachectl configtest |
Corrigez l’erreur signalée avant tout rechargement du service. |
| Le nom lamp-demo.local ne répond pas | L’entrée locale ou le VirtualHost manque. | getent hosts lamp-demo.local |
Vérifiez /etc/hosts, le fichier du site et sudo apachectl -S. |
À retenir
- 🧱 Installez Apache, MariaDB et PHP-FPM dans cet ordre pour simplifier les vérifications.
- 🔍 Contrôlez chaque service avec systemd avant de configurer le composant suivant.
- 🔒 Sécurisez MariaDB et ne stockez jamais un mot de passe dans une commande copiée.
- ⚙️ Utilisez PHP 8.4-FPM avec Apache plutôt que de mélanger plusieurs méthodes PHP.
- 🧪 Supprimez les fichiers de diagnostic avant toute mise en production publique.
Questions fréquentes sur un serveur LAMP
MariaDB est-elle obligatoire pour un serveur LAMP ?
MariaDB n’est pas la seule base possible. MySQL constitue une alternative connue, mais ce tutoriel choisit MariaDB afin de conserver une méthode unique, cohérente avec les paquets et les commandes Debian utilisés ici.
Pourquoi PHP ne fonctionne-t-il pas alors qu’Apache affiche la page HTML ?
Apache peut servir un fichier HTML sans que PHP-FPM soit actif. Vérifiez le statut de php8.4-fpm, l’activation de proxy_fcgi et la configuration php8.4-fpm dans Apache.
Faut-il créer un fichier phpinfo() pour tester PHP ?
Un fichier phpinfo() peut aider à diagnostiquer une installation de test, mais il révèle de nombreux détails de configuration. Le fichier index.php minimal proposé dans ce tutoriel vérifie déjà l’exécution PHP sans exposer ces informations.
Peut-on rendre ce serveur accessible avec un nom de domaine ?
Un nom de domaine nécessite une zone DNS pointant vers l’adresse publique du serveur et une configuration Apache avec ce nom dans ServerName. L’activation de HTTPS doit ensuite être réalisée avec un certificat valide, par exemple via Let’s Encrypt.
Cette procédure convient-elle à une mise en production ?
Cette procédure fournit une base contrôlable, mais une mise en production demande aussi des sauvegardes testées, des mises à jour planifiées, une politique de comptes, des journaux surveillés et une configuration TLS. Rejouez l’installation sur une machine vierge avant de l’appliquer à un serveur exposé.
Avertissement : ce tutoriel cible exclusivement Debian 13, Apache 2, MariaDB issue des dépôts Debian et PHP 8.4-FPM. Rejouez l’intégralité de la procédure sur une machine vierge ou une machine virtuelle de test avant toute mise en production, puis adaptez les accès réseau, le DNS, TLS et les sauvegardes à votre environnement réel.