Installer un serveur LAMP sur Ubuntu pour héberger des applications PHP

Installer un serveur LAMP sur Ubuntu pour héberger des applications PHP
Pour installer un serveur LAMP sur Ubuntu 24.04, mettez d’abord le système à jour, puis installez Apache 2, MySQL Server et PHP 8.3 avec ses extensions. Vérifiez chaque service avec systemctl, créez un utilisateur MySQL dédié à l’application et testez PHP dans le navigateur avant toute mise en ligne.
Ce tutoriel cible Ubuntu 24.04 amd64, avec Apache 2.4, PHP 8.3 et MySQL 8.0. L’objectif est d’obtenir une pile LAMP fonctionnelle pour servir une application PHP, sans ouvrir inutilement la base de données ni laisser une page de diagnostic publique.
En bref
🧩 Une pile LAMP réunit Linux, Apache, MySQL et PHP pour exécuter des sites et applications web PHP.
⚙️ Sur Ubuntu 24.04, la séquence retenue utilise Apache 2.4, PHP 8.3 et MySQL 8.0.
🔒 Le point de sécurité central consiste à créer un compte MySQL dédié, à limiter le pare-feu à HTTP/HTTPS et à supprimer immédiatement info.php après le test.
Qu’est-ce qu’une pile LAMP et à quoi sert-elle ?
Une pile LAMP est un environnement serveur qui associe le système Linux, le serveur web Apache, le moteur de base de données MySQL et le langage PHP. Apache reçoit la requête HTTP, PHP exécute le code de l’application et MySQL conserve les données quand l’application en a besoin.
Le mécanisme important est la séparation des rôles : Apache sert le web, PHP traite la logique et MySQL stocke les données. Cette distinction aide à diagnostiquer une panne : une page inaccessible relève souvent d’Apache ou du réseau, tandis qu’une erreur de connexion concerne plus souvent les identifiants ou le service MySQL.
| Composant | Rôle dans le serveur LAMP | Vérification utile |
|---|---|---|
| Linux | Système d’exploitation qui héberge les services | cat /etc/os-release |
| Apache 2.4 | Serveur web qui répond aux requêtes HTTP et HTTPS | sudo systemctl status apache2 |
| MySQL 8.0 | Serveur de base de données relationnelle | sudo systemctl status mysql |
| PHP 8.3 | Langage exécuté par Apache pour générer les pages dynamiques | php -v |
MariaDB peut remplacer MySQL dans une installation LAMP, car MariaDB est un fork libre et compatible avec de nombreux usages MySQL. Ce guide conserve toutefois MySQL 8.0 afin de suivre une seule méthode cohérente sur Ubuntu 24.04, sans mélanger paquets, services et commandes d’administration.
Quels prérequis vérifier avant d’installer serveur LAMP Ubuntu ?
Pour installer serveur LAMP Ubuntu dans de bonnes conditions, utilisez une machine Ubuntu 24.04 propre, un compte non administrateur disposant de sudo et un accès terminal local ou SSH. Prévoyez aussi l’accès au pare-feu du serveur ou du fournisseur d’hébergement, car le navigateur devra joindre les ports 80 et 443.

Le compte utilisé pour l’installation ne doit pas être le compte root permanent. Un utilisateur normal avec des droits sudo limite les manipulations irréversibles et laisse une trace plus lisible des actions d’administration.
- Vérifiez l’élévation de privilèges avec
sudo -v. - Contrôlez la version du système avec
cat /etc/os-release. - Repérez l’adresse IP du serveur depuis le tableau de bord de votre hébergeur ou avec
ip addr. - Préparez un nom de domaine si vous prévoyez d’activer HTTPS avec Let’s Encrypt.
Une distribution mise à jour réduit le risque de dépendances incohérentes. La procédure qui suit suppose Ubuntu 24.04 et ses dépôts standards : elle ne doit pas être copiée telle quelle sur Ubuntu 20.04, Debian ou une distribution différente. Pour mieux comprendre l’organisation générale d’un système GNU/Linux avant cette installation, consultez aussi les bases d’une distribution Linux.
Comment installer Apache, MySQL et PHP sur Ubuntu 24.04 ?
La procédure d’installation LAMP sur Ubuntu 24.04 suit un ordre de dépendance simple : mettre à jour le système, installer Apache, installer MySQL, ajouter PHP et ses extensions, puis vérifier le traitement des fichiers PHP. Chaque étape ci-dessous inclut une commande de contrôle et un résultat attendu avant de passer à la suivante.

Étape 1 : mettre Ubuntu à jour
Actualisez la liste des paquets, puis appliquez les mises à jour disponibles avant d’installer les composants web. Cette étape évite d’installer Apache, PHP ou MySQL sur une base système incomplète.
sudo apt update && sudo apt upgrade -y
Vérifiez ensuite les paquets encore proposés à la mise à niveau. Le résultat attendu est l’absence de paquet listé après l’en-tête de la commande.
sudo apt list --upgradable
Étape 2 : installer Apache 2 et contrôler le service web
Installez Apache depuis les dépôts Ubuntu. Apache démarre normalement après l’installation et écoute les requêtes HTTP locales ou réseau lorsque le pare-feu les autorise.
sudo apt install -y apache2
Contrôlez l’état du service. La ligne importante doit indiquer active (running), sans erreur de démarrage.
sudo systemctl status apache2
Ouvrez ensuite http://ADRESSE_IP_DU_SERVEUR dans un navigateur. La page d’accueil Apache confirme que le serveur web répond ; elle ne confirme pas encore le fonctionnement de PHP.
Étape 3 : installer MySQL Server
Installez MySQL Server pour fournir la base de données MySQL Ubuntu à l’application PHP. MySQL reste un service local dans cette procédure : une application web hébergée sur le même serveur n’a pas besoin d’exposer le port de la base de données sur Internet.
sudo apt install -y mysql-server
Vérifiez l’exécution du service après l’installation. Un service MySQL actif ne prouve pas qu’une application peut se connecter : les comptes et privilèges seront créés plus loin.
sudo systemctl status mysql
Étape 4 : installer PHP 8.3 et les extensions PHP utiles
Installez PHP 8.3, son module Apache et les extensions fréquemment attendues par les CMS et applications PHP. Le paquet php8.3-mysql permet notamment à PHP de dialoguer avec MySQL.
sudo apt install -y php8.3 libapache2-mod-php8.3 php8.3-mysql php8.3-zip php8.3-gd php8.3-mbstring php8.3-curl php8.3-xml php8.3-bcmath
Contrôlez la version réellement installée. Le résultat attendu commence par PHP 8.3..
php -v
Étape 5 : activer PHP dans Apache et redémarrer le serveur web
Activez le module PHP correspondant à PHP 8.3, puis redémarrez Apache afin qu’il charge la nouvelle configuration. Un redémarrage sans erreur est nécessaire avant le test d’une page .php.
sudo a2enmod php8.3 && sudo systemctl restart apache2
Vérifiez à nouveau Apache. Le résultat attendu est toujours active (running).
sudo systemctl status apache2
Étape 6 : lancer la sécurisation initiale de MySQL
Exécutez l’assistant de sécurisation MySQL et lisez chaque question avant de confirmer. L’assistant sert notamment à supprimer les accès anonymes et à réduire les réglages par défaut inutiles sur un serveur destiné à héberger une application.
sudo mysql_secure_installation
La méthode d’authentification du compte MySQL root peut varier selon l’installation. N’essayez pas de contourner une authentification locale avec un mot de passe faible : utilisez plutôt un compte distinct pour chaque application.
Un serveur LAMP n’a pas besoin d’un compte MySQL root utilisé par l’application : un utilisateur limité à une seule base réduit la portée d’une erreur ou d’une fuite d’identifiants.
Étape 7 : créer une base MySQL et un utilisateur dédié
Ouvrez le client MySQL avec les privilèges d’administration locaux. Les noms ci-dessous sont des exemples : remplacez application_db et application_user par des noms propres à votre projet.
sudo mysql
Dans l’invite MySQL, créez la base et l’utilisateur, puis attribuez les droits uniquement sur cette base. Remplacez MOT_DE_PASSE_LONG_ET_UNIQUE localement par un secret généré et ne le placez jamais dans un répertoire publiquement accessible.
CREATE DATABASE application_db;
CREATE USER 'application_user'@'localhost' IDENTIFIED BY 'MOT_DE_PASSE_LONG_ET_UNIQUE';
GRANT ALL PRIVILEGES ON application_db.* TO 'application_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Testez le compte créé avec une connexion locale. La commande demande le mot de passe sans l’afficher dans l’historique du terminal.
mysql -u application_user -p application_db
Étape 8 : configurer UFW pour HTTP et HTTPS
Installez UFW si nécessaire et autorisez d’abord SSH afin de ne pas interrompre votre accès distant au serveur. Ajoutez ensuite le profil Apache qui couvre HTTP et HTTPS, puis activez le pare-feu.
sudo apt install -y ufw
sudo ufw allow 'SSH'
sudo ufw allow 'WWW Full'
sudo ufw enable
Vérifiez les règles actives. La sortie doit afficher le pare-feu comme actif et la règle WWW Full comme autorisée.
sudo ufw status
Étape 9 : effectuer un test PHP Apache et supprimer le diagnostic
Créez temporairement une page qui appelle phpinfo(). Cette page permet de vérifier que le navigateur, Apache et PHP fonctionnent ensemble, ainsi que la présence de l’extension MySQL dans la configuration PHP.
echo '<?php phpinfo(); ?>' | sudo tee /var/www/html/info.php
Ouvrez http://ADRESSE_IP_DU_SERVEUR/info.php. La page doit afficher les informations PHP ; recherchez la section relative à MySQL pour confirmer que php8.3-mysql est chargé.
Supprimez le fichier de diagnostic dès la vérification terminée, car phpinfo() expose des informations techniques utiles à un attaquant.
sudo rm /var/www/html/info.php
Vérifiez que l’URL renvoie désormais une erreur 404, puis gardez cette page supprimée.
Étape 10 : vérifier le démarrage automatique des services
Apache et MySQL doivent être démarrés et activés pour redémarrer avec Ubuntu. Ces commandes ne remplacent pas une sauvegarde ou une supervision, mais elles confirment le comportement attendu après un redémarrage normal du système.
sudo systemctl enable apache2
sudo systemctl enable mysql
sudo systemctl status apache2
sudo systemctl status mysql
Le résultat attendu indique des services actifs et activés. Une application PHP peut maintenant être déployée, à condition de créer son répertoire et sa configuration Apache de manière contrôlée.
Comment vérifier que PHP communique bien avec MySQL ?
Le test PHP via phpinfo() confirme que PHP est interprété, mais il ne teste pas les identifiants de votre application. Une vérification complète consiste à confirmer séparément l’extension PHP MySQL, le service MySQL et la connexion du compte dédié à la base créée à l’étape 7.
Commencez par contrôler que PHP charge bien l’extension prévue. La commande ci-dessous doit retourner au moins une ligne liée à mysqli, mysqlnd ou pdo_mysql, selon les modules actifs.
php -m | grep -E 'mysqli|mysqlnd|pdo_mysql'
Le test de connexion MySQL réalisé avec mysql -u application_user -p application_db est le contrôle le plus direct pour la base. Un échec d’authentification signale un problème de nom d’utilisateur, de mot de passe, d’hôte autorisé ou de privilèges, non un problème Apache.
- Apache répond, PHP ne s’exécute pas : contrôlez le module PHP et l’état d’Apache.
- PHP s’exécute, MySQL refuse le compte : revoyez la création de l’utilisateur et les privilèges de la base.
- Le navigateur ne joint pas le serveur : contrôlez UFW, l’adresse IP et les règles réseau de l’hébergeur.
Comment héberger une application PHP avec un hôte virtuel Apache ?
Un hôte virtuel Apache associe un nom de domaine à un répertoire de site et à des directives Apache distinctes. Cette séparation évite de déposer tous les projets dans /var/www/html, qui correspond au site par défaut et devient difficile à administrer dès qu’un second site est ajouté.
La création d’un hôte virtuel implique un fichier dans /etc/apache2/sites-available/, son activation avec a2ensite, puis un contrôle de syntaxe avant le redémarrage d’Apache. La documentation Ubuntu et Apache doit être consultée pour adapter précisément les directives ServerName, DocumentRoot et <Directory> à votre domaine et au framework utilisé.
⚠️ À valider avant exécution : la séquence technique fournie pour Ubuntu 24.04 confirme le principe des hôtes virtuels, mais ne fournit pas un fichier complet adapté à votre nom de domaine ni au répertoire public de votre application. Ne copiez pas un VirtualHost générique avec un domaine fictif dans un environnement de production.
Après toute modification Apache, contrôlez la syntaxe avant un redémarrage. Cette vérification évite de rendre l’ensemble des sites indisponibles à cause d’une directive invalide.
sudo apache2ctl configtest
Le résultat attendu est Syntax OK. Activez ensuite uniquement le site dont vous avez vérifié le fichier, puis redémarrez Apache selon la configuration validée.
Un hôte virtuel propre vaut mieux qu’un répertoire ajouté à la hâte : le nom de domaine, le répertoire public et les journaux restent alors identifiables site par site.
Les fichiers .htaccess nécessitent une configuration Apache qui autorise leur lecture, souvent via AllowOverride. Cette option est utile à certains CMS, mais elle ajoute une lecture de configuration par répertoire ; activez-la seulement lorsque l’application la demande réellement.
Comment sécuriser un serveur Ubuntu avant la mise en ligne ?
La sécurisation minimale d’un serveur LAMP Ubuntu consiste à limiter les services exposés, à protéger les identifiants, à chiffrer le trafic HTTPS et à conserver des sauvegardes restaurables. MySQL doit rester accessible localement pour l’application, tandis qu’Apache expose uniquement les services web nécessaires au public.
Le pare-feu UFW couvre le filtrage local, mais un hébergeur peut aussi appliquer ses propres règles réseau. Ouvrir HTTP et HTTPS ne rend pas une application sûre : le code PHP, les dépendances et les comptes d’accès doivent aussi être maintenus.
- Conservez la règle SSH avant d’activer UFW lorsque le serveur est administré à distance.
- Gardez MySQL sur son accès local par défaut plutôt que d’ouvrir son port au public.
- Stockez le mot de passe de base de données hors du répertoire web public et avec des permissions adaptées au compte de l’application.
- Installez HTTPS uniquement lorsque le domaine pointe vers le serveur et que l’accès HTTP est fonctionnel.
- Testez une restauration de sauvegarde sur une machine distincte avant de considérer une sauvegarde comme exploitable.
Pour demander un certificat HTTPS avec Certbot et son module Apache, installez les paquets correspondants, puis lancez l’outil interactif. Certbot doit être exécuté seulement après la résolution DNS du domaine vers le serveur.
sudo apt install -y certbot python3-certbot-apache
sudo certbot --apache
Le résultat attendu est un accès HTTPS avec un certificat valide pour le domaine configuré. Vérifiez ensuite le renouvellement automatique dans la documentation officielle de Certbot et surveillez l’expiration du certificat.
MySQL, MariaDB ou PHP-FPM : quelles alternatives à cette installation LAMP ?
MySQL 8.0, MariaDB et PHP-FPM répondent à des besoins différents autour d’un serveur PHP. MySQL est la solution suivie dans ce guide Ubuntu 24.04 ; MariaDB est une alternative compatible dans de nombreux projets ; PHP-FPM est une autre méthode d’exécution PHP avec Apache, plus distincte du module mod_php.
| Option | Cas d’usage | Limite à anticiper |
|---|---|---|
| MySQL 8.0 | Suivre la procédure Ubuntu 24.04 décrite ici | Ne pas le confondre avec les commandes d’administration MariaDB |
| MariaDB | Projet qui le demande explicitement ou environnement déjà standardisé dessus | Éviter de mélanger paquets MySQL et MariaDB sur la même installation |
| PHP avec mod_php | Configuration simple avec Apache pour un premier serveur | Moins de séparation entre Apache et l’exécution PHP |
| PHP-FPM avec Apache | Architecture PHP distincte via FastCGI | Configuration supplémentaire à valider selon l’application |
Le choix doit rester cohérent du début à la fin. Installer MySQL puis suivre une documentation MariaDB, ou activer PHP-FPM tout en conservant une configuration prévue pour mod_php, produit des erreurs difficiles à interpréter. Pour ce premier déploiement, gardez la pile définie au départ et documentez toute variante.
Erreurs fréquentes lors de l’installation d’un serveur LAMP
Les erreurs LAMP les plus courantes ne viennent pas d’une commande isolée, mais d’un contrôle oublié entre deux phases. Le symptôme doit guider le diagnostic : Apache, PHP, MySQL, le pare-feu et les permissions ne se vérifient pas avec le même outil.
- Apache refuse de démarrer après une modification : lancez
sudo apache2ctl configtest, corrigez la directive signalée, puis redémarrez Apache. Un redémarrage répété sans test masque l’erreur au lieu de la résoudre. - Le navigateur affiche le code PHP : vérifiez l’installation de
libapache2-mod-php8.3, activezphp8.3aveca2enmod, puis contrôlez le statut d’Apache. - L’application ne se connecte pas à MySQL : testez d’abord le compte avec le client
mysql. Vérifiez ensuite le nom de base, l’utilisateur, le mot de passe et l’hôtelocalhostutilisés par l’application. - Le site reste inaccessible depuis Internet : vérifiez la règle
WWW Fulldans UFW, puis les règles de pare-feu ou groupes de sécurité du fournisseur. - Une erreur 403 apparaît sur le répertoire du site : vérifiez la configuration Apache, le répertoire réellement défini comme racine web et les droits du système de fichiers ; ne corrigez jamais ce problème avec
chmod 777.
Les journaux Apache apportent souvent la preuve utile lorsqu’une page retourne une erreur 500 ou un refus d’accès. Consultez les journaux au moment précis où vous reproduisez le problème, afin de relier un message à une action identifiable.
sudo journalctl -u apache2 --since "10 minutes ago"
sudo journalctl -u mysql --since "10 minutes ago"
Sources utiles à consulter
La documentation Ubuntu sur les applications LAMP sert de repère principal pour vérifier la procédure sur votre version du système. Consultez-la avant d’adapter la pile à une version d’Ubuntu différente.
La documentation communautaire Ubuntu-fr consacrée à LAMP apporte des compléments de contexte en français. Pour les erreurs de configuration Apache, la référence est la commande apache2ctl et son contrôle de syntaxe.
Un serveur web peut aussi servir des interfaces d’administration ou de messagerie. Si votre environnement utilise Roundcube, retrouvez les points de connexion et de configuration dans ce guide consacré au webmail Roundcube.
Avertissement : cette procédure cible exclusivement Ubuntu 24.04 amd64 avec Apache 2.4, PHP 8.3 et MySQL 8.0. Rejouez toutes les étapes sur une machine vierge ou un environnement de test avant une mise en production, puis adaptez les hôtes virtuels, secrets, sauvegardes et règles réseau à votre application réelle.
À retenir
- 🧩 Installez Apache, MySQL et PHP dans cet ordre pour isoler les vérifications.
- 🔒 Créez un utilisateur MySQL limité à la base de chaque application.
- 🧪 Supprimez immédiatement la page
info.phpaprès le test PHP. - 🛡️ Autorisez SSH avant d’activer UFW sur un serveur administré à distance.
- 📌 Testez Apache avec
apache2ctl configtestavant chaque redémarrage après configuration.
Questions fréquentes
Peut-on remplacer MySQL par MariaDB dans une pile LAMP ?
Oui, MariaDB peut remplacer MySQL dans de nombreux projets PHP. Il faut toutefois choisir l’un des deux serveurs de base de données dès le départ et suivre une documentation cohérente avec les paquets et commandes installés.
Où placer les fichiers d’une application PHP sur Ubuntu ?
Le répertoire par défaut Apache est /var/www/html, mais un projet distinct gagne à disposer de son propre répertoire et de son hôte virtuel Apache. Le répertoire réellement exposé dépend ensuite du DocumentRoot validé dans la configuration du site.
Pourquoi PHP affiche-t-il son code au lieu d’exécuter la page ?
Ce symptôme indique généralement que le module PHP Apache n’est pas installé ou n’est pas activé. Vérifiez libapache2-mod-php8.3, exécutez sudo a2enmod php8.3, puis redémarrez Apache après un contrôle de configuration.
Faut-il ouvrir le port MySQL dans UFW ?
Non pour une application PHP et MySQL installés sur le même serveur. L’application peut joindre MySQL via localhost, sans exposer le service de base de données au réseau public.
Le serveur LAMP convient-il à un site en production ?
Une pile LAMP peut servir une application en production, mais l’installation de base ne suffit pas. Ajoutez au minimum HTTPS, des sauvegardes testées, des mises à jour régulières, une configuration Apache validée et une gestion prudente des secrets.