Comment installer Linux, Nginx, MySQL, PHP (pile LEMP) sur Ubuntu
Introduction
La pile logicielle LEMP sert à fournir des pages web dynamiques et des applications web écrites en PHP. Il s'agit d'un acronyme qui décrit un système d'exploitation Linux, avec un serveur web Nginx (prononcé comme « Engine-X »). Les données en arrière-plan sont stockées dans la base de données MySQL et le traitement dynamique est géré par PHP.
Ce guide montre comment installer une pile LEMP sur un serveur Ubuntu. Le système d'exploitation Ubuntu prend en charge la partie Linux de la pile. Nous expliquerons comment mettre en place et faire fonctionner le reste des composants.
Remarque : Ce tutoriel est principalement destiné à Ubuntu 22.04 LTS avec PHP 8.1. Pour les utilisateurs d'Ubuntu 24.04 LTS, ajustez les références de version de PHP de
php8.1-fpmàphp8.3-fpmdans toutes les commandes. De plus, assurez-vous de mettre à jour les chemins des sockets PHP-FPM dans votre configuration Nginx (par exemple, utilisez/run/php/php8.3-fpm.sockpour Ubuntu 24.04).
Comment installer Linux, Nginx, MySQL, PHP (pile LEMP) sur Ubuntu
- Installation du serveur Web Nginx
- Installation de MySQL
- Installer PHP
- Configurer Nginx pour utiliser le processeur PHP
- Tester PHP avec Nginx
- Tester la connexion à la base de données depuis PHP
Prérequis
Utilisez un utilisateur sudo non-root sur Ubuntu avec le pare-feu UFW activé. Suivez notre guide de configuration initiale du serveur pour Ubuntu afin de le configurer.
Étape 1 – Installation du serveur web Nginx
Pour afficher des pages web aux visiteurs du site, vous allez utiliser Nginx, un serveur web haute performance. Vous utiliserez le gestionnaire de paquets APT pour obtenir ce logiciel.
Mettez à jour l’index des paquets de votre serveur, puis installez Nginx :
sudo apt updateEnsuite, exécutez apt install pour installer Nginx :
sudo apt install nginxLorsque vous y êtes invité, appuyez sur Y puis sur ENTRÉE pour confirmer que vous souhaitez installer Nginx. Une fois l'installation terminée, le serveur web Nginx sera actif et en fonctionnement sur votre serveur Ubuntu.
Vérifiez que Nginx est en cours d'exécution :
sudo systemctl status nginxVous devriez voir une sortie indiquant que Nginx est actif :
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since...Sur Ubuntu, Nginx est configuré pour démarrer automatiquement dès son installation.
Autoriser le trafic HTTP via le pare-feu ufw. Nginx enregistre plusieurs profils d'application UFW lors de l'installation. Vérifiez les profils disponibles :
sudo ufw app listAvailable applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSHActivez le profil le plus restrictif qui autorise le trafic requis. Comme SSL n'est pas encore configuré, autorisez uniquement le trafic HTTP sur le port 80 :
Activez ceci en exécutant ce qui suit :
sudo ufw allow 'Nginx HTTP'
Vérifiez la modification du pare-feu :
sudo ufw statusCette sortie montre que le trafic HTTP est maintenant autorisé :
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)Pour tester la fonctionnalité de domaine du serveur Nginx, accédez à http://votre_domaine en utilisant votre navigateur Web préféré.
Si vous n'avez pas de nom de domaine pointé vers votre serveur et que vous ne connaissez pas l'adresse IP publique de votre serveur, vous pouvez la trouver en exécutant l'une des commandes suivantes :
ip addr showhostname -ICela affichera quelques adresses IP. Vous pouvez en essayer chacune à tour de rôle dans votre navigateur web.
Comme alternative, vous pouvez vérifier quelle adresse IP est accessible, vue depuis d'autres emplacements sur Internet :
curl -4 icanhazip.comTapez l'adresse que vous recevez dans votre navigateur web et elle vous mènera à la page d'accueil par défaut de Nginx :
http://<server_domain_or_IP>Si vous voyez cette page, cela signifie que vous avez installé Nginx avec succès et activé le trafic HTTP pour votre serveur web.
Étape 2 — Installation de MySQL
Installez MySQL pour stocker et gérer les données du site. MySQL est le système de gestion de base de données standard pour les environnements PHP.
Encore une fois, utilisez apt pour acquérir et installer ce logiciel :
sudo apt install mysql-serverLorsque vous y êtes invité, confirmez l'installation en appuyant sur Y, puis sur ENTRÉE.
Après l'installation, exécutez le script de sécurité pour supprimer les paramètres par défaut non sécurisés et verrouiller l'accès à la base de données :
sudo mysql_secure_installationVous serez invité à répondre à une question vous demandant si vous souhaitez configurer le PLUGIN DE VALIDATION DE MOT DE PASSE.
Remarque : Activer cette fonctionnalité relève en partie d’un jugement. Si elle est activée, les mots de passe qui ne répondent pas aux critères spécifiés seront rejetés par MySQL avec une erreur. Il est sûr de laisser la validation désactivée, mais vous devriez toujours utiliser des mots de passe forts et uniques pour les identifiants de la base de données.
Répondez Y pour oui, ou autre chose pour continuer sans activer :
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No: Si vous répondez « oui », il vous sera demandé de sélectionner un niveau de validation du mot de passe. Gardez à l'esprit que si vous saisissez 2 pour le niveau le plus élevé, vous recevrez des erreurs chaque fois que vous tenterez de définir un mot de passe qui ne contient pas de chiffres, de lettres majuscules et minuscules, et de caractères spéciaux :
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1Que vous choisissiez ou non d’installer le PLUGIN DE VALIDATION DE MOT DE PASSE, votre serveur vous demandera de sélectionner et de confirmer un mot de passe pour l’utilisateur MySQL root. Il ne faut pas confondre cela avec le root du système. L’utilisateur root de la base de données est un utilisateur administratif ayant tous les privilèges sur le système de base de données. Même si la méthode d’authentification par défaut pour l’utilisateur root de MySQL dispense de l’utilisation d’un mot de passe, même lorsqu’un mot de passe est défini, vous devriez définir un mot de passe fort ici comme mesure de sécurité supplémentaire. Nous en parlerons dans un instant.
Si vous avez activé la validation du mot de passe, la solidité du mot de passe root que vous avez saisi sera affichée et votre serveur vous demandera si vous souhaitez continuer avec ce mot de passe. Si vous êtes satisfait de votre mot de passe actuel, appuyez sur Y pour « oui » à l’invite :
Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : yPour le reste des questions, appuyez sur Y et appuyez sur la touche ENTRÉE à chaque invite. Cela supprimera certains utilisateurs anonymes et la base de données de test, désactivera les connexions root à distance et chargera ces nouvelles règles afin que MySQL prenne immédiatement en compte les modifications que vous avez effectuées.
Lorsque vous avez terminé, testez si vous pouvez vous connecter à la console MySQL :
sudo mysqlCela va se connecter au serveur MySQL en tant qu'utilisateur administrateur de la base de données root, ce qui est déduit de l'utilisation de sudo lors de l'exécution de cette commande. Vous devriez recevoir la sortie suivante :
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.28-0ubuntu4 (Ubuntu)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>Pour quitter la console MySQL, écrivez ce qui suit :
exitRemarquez que vous n'avez pas eu besoin de fournir de mot de passe pour vous connecter en tant qu'utilisateur root, même si vous en avez défini un lors de l'exécution du script mysql_secure_installation. En effet, lorsqu'il est installé sur Ubuntu, la méthode d'authentification par défaut pour l'utilisateur MySQL administratif est auth_socket, plutôt qu'une méthode utilisant un mot de passe. Cela peut sembler être un problème de sécurité au premier abord, mais cela rend le serveur de base de données plus sûr puisque les seuls utilisateurs autorisés à se connecter en tant qu'utilisateur MySQL root sont les utilisateurs système disposant des privilèges sudo, se connectant depuis la console ou via une application exécutée avec les mêmes privilèges. En termes pratiques, cela signifie que vous ne pourrez pas utiliser l'utilisateur administratif root de la base de données pour vous connecter depuis votre application PHP.
Pour une sécurité renforcée, il est préférable de créer des comptes utilisateurs dédiés avec des privilèges moins étendus pour chaque base de données, surtout si vous prévoyez d’héberger plusieurs bases de données sur votre serveur.
Remarque : Certaines anciennes versions de la bibliothèque PHP native MySQL mysqlnd ne prennent pas en charge caching_sha2_authentication, la méthode d’authentification par défaut pour les utilisateurs créés sur MySQL 8. Pour cette raison, lors de la création d’utilisateurs de base de données pour des applications PHP sur MySQL 8, vous devrez peut-être vous assurer qu’ils sont configurés pour utiliser mysql_native_password à la place. Nous montrerons comment faire cela à l’étape 6.
Votre serveur MySQL est maintenant installé et sécurisé. Ensuite, vous allez installer PHP, le dernier composant de la pile LEMP.
Étape 3 – Installation de PHP
Installez PHP pour traiter le code et générer du contenu dynamique. Nginx nécessite un programme externe pour le traitement PHP.
PHP-FPM (« gestionnaire de processus fastCGI ») gère le traitement PHP de manière efficace avec des fonctionnalités de sécurité supplémentaires, offrant de meilleures performances pour les sites web basés sur PHP. Installez php-fpm pour acheminer les requêtes PHP depuis Nginx, et php-mysql pour activer la communication PHP-MySQL. Les packages PHP de base s'installent automatiquement en tant que dépendances.
Pour installer les paquets php8.1-fpm et php-mysql, exécutez :
sudo apt install php8.1-fpm php-mysqlLorsque vous y êtes invité, appuyez sur Y puis sur ENTRÉE pour confirmer l'installation.
Vérifiez que PHP-FPM est en cours d'exécution :
sudo systemctl status php8.1-fpmVous devriez voir une sortie indiquant que PHP-FPM est actif :
● php8.1-fpm.service - The PHP 8.1 FastCGI Process Manager
Loaded: loaded
Active: active (running)Vous pouvez également vérifier la version de PHP :
php -vPHP 8.1.x (cli) (built: ...)
Copyright (c) The PHP Group
Zend Engine v4.1.xConfigurez Nginx pour utiliser ces composants PHP.
Étape 4 — Configurer Nginx pour utiliser le processeur PHP
Créez des blocs de serveur Nginx (similaires aux hôtes virtuels Apache) pour encapsuler la configuration et héberger plusieurs domaines sur un seul serveur. Ce guide utilise votre_domaine comme exemple de nom de domaine.
Info : Pour en savoir plus sur la configuration d'un nom de domaine avec Linux-Console.net, lisez notre introduction au DNS de Linux-Console.net.
Sur Ubuntu 22.04, Nginx active un bloc serveur par défaut qui sert les documents depuis /var/www/html. Pour plusieurs sites, créez une structure de répertoires dans /var/www pour votre_domaine, en laissant /var/www/html comme répertoire de secours par défaut.
Créez le répertoire web racine pour votre_domaine comme suit :
sudo mkdir /var/www/your_domainEnsuite, attribuez la propriété du répertoire avec la variable d'environnement $USER, qui fera référence à votre utilisateur système actuel :
sudo chown -R $USER:$USER /var/www/your_domainEnsuite, ouvrez un nouveau fichier de configuration dans le répertoire sites-available de Nginx en utilisant votre éditeur en ligne de commande préféré. Ici, nous allons utiliser nano :
sudo nano /etc/nginx/sites-available/your_domainCela va créer un nouveau fichier vierge. Insérez la configuration minimale suivante :
server {
listen 80;
server_name your_domain www.your_domain;
root /var/www/your_domain;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}Voici ce que font chacune de ces directives et blocs de localisation :
listen— Définit sur quel port Nginx va écouter. Dans ce cas, il écoutera sur le port80, le port par défaut pour HTTP.root— Définit la racine du document où sont stockés les fichiers servis par ce site web.index— Définit dans quel ordre Nginx priorisera les fichiers index pour ce site web. Il est courant de lister les fichiersindex.htmlavec une priorité plus élevée que les fichiersindex.phpafin de permettre de mettre rapidement en place une page de maintenance dans les applications PHP. Vous pouvez ajuster ces paramètres pour mieux répondre aux besoins de votre application.server_name— Définit les noms de domaine et/ou les adresses IP auxquels ce bloc serveur doit répondre. Pointez cette directive vers le nom de domaine de votre serveur ou son adresse IP publique.location /— Le premier bloc de localisation inclut une directivetry_files, qui vérifie l'existence de fichiers ou de répertoires correspondant à une requête URL. Si Nginx ne trouve pas la ressource appropriée, il renverra une erreur 404.location ~ \.php$— Ce bloc de localisation gère le traitement réel des fichiers PHP en indiquant à Nginx le fichier de configurationfastcgi-php.confet le fichierphp8.1-fpm.sock, qui déclare quel socket est associé àphp8.1-fpm.location ~ /\.ht— Le dernier bloc de localisation traite des fichiers.htaccess, que Nginx ne traite pas. En ajoutant la directivedeny all, si des fichiers.htaccessvenaient à se retrouver dans le répertoire racine, ils ne seraient pas servis aux visiteurs.
Lorsque vous avez terminé de modifier, enregistrez et fermez le fichier. Si vous utilisez nano, vous pouvez le faire en appuyant sur CTRL+X, puis sur Y et ENTRÉE pour confirmer.
Activez votre configuration en la liant au fichier de configuration depuis le répertoire sites-enabled de Nginx :
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/Ensuite, déliez le fichier de configuration par défaut du répertoire /sites-enabled/ :
sudo unlink /etc/nginx/sites-enabled/defaultRemarque : Si vous avez besoin de restaurer la configuration par défaut, vous pouvez le faire en recréant le lien symbolique, comme suit :
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/Cela indiquera à Nginx d’utiliser cette configuration la prochaine fois qu’il sera rechargé. Vous pouvez tester votre configuration pour détecter des erreurs de syntaxe en exécutant la commande suivante :
sudo nginx -tSi des erreurs sont signalées, retournez à votre fichier de configuration pour en vérifier le contenu avant de continuer.
Lorsque vous êtes prêt, rechargez Nginx pour appliquer les modifications :
sudo systemctl reload nginxVotre nouveau site web est maintenant actif, mais la racine web /var/www/votre_domaine est toujours vide. Créez un fichier index.html à cet emplacement afin de pouvoir tester que votre nouveau bloc serveur fonctionne comme prévu :
nano /var/www/your_domain/index.htmlIncluez le contenu suivant dans ce fichier :
<html>
<head>
<title>your_domain website</title>
</head>
<body>
<h1>Hello World!</h1>
<p>This is the landing page of <strong>your_domain</strong>.</p>
</body>
</html>Allez maintenant dans votre navigateur et accédez au nom de domaine ou à l'adresse IP de votre serveur, comme indiqué dans la directive server_name de votre fichier de configuration du bloc serveur :
http://server_domain_or_IPVous recevrez une page comme celle-ci :
Si vous recevez cette page, cela signifie que votre bloc de serveur Nginx fonctionne comme prévu.
Vous pouvez laisser ce fichier en place comme page d'accueil temporaire pour votre application jusqu'à ce que vous configuriez un fichier index.php pour le remplacer.
Attention : Après avoir ajouté votre fichier index.php, assurez-vous de supprimer ou de renommer le fichier index.html de votre répertoire racine. Si les deux fichiers existent, Nginx servira par défaut index.html, et votre page PHP ne sera pas affichée — c'est une source fréquente de confusion pour les nouveaux utilisateurs.
Votre pile LEMP est désormais entièrement configurée. À l'étape suivante, vous allez créer un script PHP pour vérifier que Nginx peut effectivement gérer les fichiers .php dans votre site web nouvellement configuré.
Étape 5 – Tester PHP avec Nginx
Votre pile LEMP devrait maintenant être complètement configurée. Vous pouvez la tester pour vérifier que Nginx peut correctement transférer les fichiers .php à votre processeur PHP.
Vous pouvez faire cela en créant un fichier PHP de test dans votre répertoire racine. Ouvrez un nouveau fichier appelé info.php dans votre répertoire racine avec votre éditeur de texte préféré :
nano /var/www/your_domain/info.phpAjoutez les lignes suivantes dans le nouveau fichier. Il s'agit d'un code PHP valide qui renverra des informations sur votre serveur :
<?php
phpinfo();Lorsque vous avez terminé, enregistrez et fermez le fichier.
Vous pouvez maintenant accéder à cette page dans votre navigateur web en visitant le nom de domaine ou l'adresse IP publique que vous avez configuré dans votre fichier de configuration Nginx, suivi de /info.php :
http://server_domain_or_IP/info.phpVous recevrez une page web contenant des informations détaillées sur votre serveur :
Après avoir vérifié les informations pertinentes sur votre serveur PHP via cette page, il est préférable de supprimer le fichier que vous avez créé car il contient des informations sensibles sur votre environnement PHP et votre serveur Ubuntu. Vous pouvez utiliser rm pour supprimer ce fichier :
sudo rm /var/www/your_domain/info.phpVous pouvez toujours régénérer ce fichier si vous en avez besoin plus tard.
Étape 6 — Tester la connexion à la base de données depuis PHP (Optionnel)
Si vous voulez tester si PHP est capable de se connecter à MySQL et d'exécuter des requêtes sur la base de données, vous pouvez créer une table de test avec des données fictives et interroger son contenu depuis un script PHP. Avant cela, vous devez créer une base de données de test et un nouvel utilisateur MySQL correctement configuré pour y accéder.
Remarque : Certaines anciennes versions de la bibliothèque PHP native MySQL mysqlnd ne prennent pas en charge caching_sha2_authentication, la méthode d'authentification par défaut pour MySQL 8. Vous devrez peut-être vous assurer qu'elles sont configurées pour utiliser mysql_native_password à la place.
Nous allons créer une base de données nommée example_database et un utilisateur nommé example_user, mais vous pouvez remplacer ces noms par d'autres valeurs.
Tout d'abord, connectez-vous à la console MySQL en utilisant le compte root :
sudo mysqlPour créer une nouvelle base de données, exécutez la commande suivante depuis votre console MySQL :
CREATE DATABASE example_database;Vous pouvez maintenant créer un nouvel utilisateur et lui accorder tous les privilèges sur la base de données personnalisée que vous avez créée.
La commande suivante crée un nouvel utilisateur nommé example_user, en utilisant mysql_native_password comme méthode d'authentification par défaut. Nous définissons le mot de passe de cet utilisateur comme password, mais vous devriez remplacer cette valeur par un mot de passe sécurisé de votre choix.
CREATE USER 'example_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';Nous devons maintenant donner à cet utilisateur la permission sur la base de données example_database :
GRANT ALL ON example_database.* TO 'example_user'@'%';Cela donnera à l'utilisateur example_user tous les privilèges sur la base de données example_database, tout en l'empêchant de créer ou de modifier d'autres bases de données sur votre serveur.
Maintenant, quittez le shell MySQL avec la commande suivante :
exitVous pouvez vérifier si le nouvel utilisateur dispose des autorisations appropriées en vous reconnectant à la console MySQL, cette fois en utilisant les identifiants personnalisés de l'utilisateur. Remarquez le paramètre -p dans cette commande, qui vous demandera le mot de passe utilisé lors de la création de l'utilisateur example_user :
mysql -u example_user -pAprès vous être connecté à la console MySQL, confirmez que vous avez accès à la base de données example_database :
SHOW DATABASES;Cela renverra la sortie suivante :
+--------------------+
| Database |
+--------------------+
| example_database |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)Ensuite, nous allons créer une table de test nommée todo_list. Depuis la console MySQL, exécutez la commande suivante :
CREATE TABLE example_database.todo_list (
item_id INT AUTO_INCREMENT,
content VARCHAR(255),
PRIMARY KEY(item_id)
);Insérez quelques lignes de contenu dans la table de test. Vous pourriez vouloir répéter la commande suivante plusieurs fois, en utilisant des valeurs différentes :
INSERT INTO example_database.todo_list (content) VALUES ("My first important item");Pour confirmer que les données ont été correctement sauvegardées dans votre tableau, exécutez :
SELECT * FROM example_database.todo_list;Votre sortie devrait s'afficher comme suit :
+---------+--------------------------+
| item_id | content |
+---------+--------------------------+
| 1 | My first important item |
| 2 | My second important item |
| 3 | My third important item |
| 4 | and this one more thing |
+---------+--------------------------+
4 rows in set (0.000 sec)Après avoir confirmé que vous avez des données valides dans votre table de test, vous pouvez quitter la console MySQL :
exitVous pouvez maintenant créer le script PHP qui se connectera à MySQL et interrogera votre contenu. Créez un nouveau fichier PHP dans votre répertoire racine web personnalisé en utilisant votre éditeur préféré. Nous utiliserons nano pour cela :
nano /var/www/your_domain/todo_list.phpLe script PHP suivant se connecte à la base de données MySQL et interroge le contenu de la table todo_list, en affichant les résultats dans une liste. S'il y a un problème avec la connexion à la base de données, il générera une exception.
Ajoutez le contenu suivant à votre script todo_list.php :
<?php
$user = "example_user";
$password = "password";
$database = "example_database";
$table = "todo_list";
try {
$db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
echo "<h2>TODO</h2><ol>";
foreach($db->query("SELECT content FROM $table") as $row) {
echo "<li>" . $row['content'] . "</li>";
}
echo "</ol>";
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
Enregistrez et fermez le fichier lorsque vous avez terminé de le modifier.
Vous pouvez désormais accéder à cette page dans votre navigateur web en visitant le nom de domaine ou l'adresse IP publique configurée pour votre site, suivi de /todo_list.php :
http://server_domain_or_IP/todo_list.phpVous devriez recevoir une page comme la suivante, affichant le contenu que vous avez inséré dans votre tableau de test :
Cela signifie que votre environnement PHP est prêt à se connecter et à interagir avec votre serveur MySQL.
Questions Fréquemment Posées
À quoi sert la pile LEMP ?
La pile LEMP héberge des sites web et des applications dynamiques basés sur PHP, y compris WordPress, Laravel, Magento, Drupal et des projets PHP personnalisés. Elle est particulièrement efficace pour les sites à fort trafic nécessitant une gestion efficace des connexions simultanées.
Quelle est la différence entre les stacks LEMP et LAMP ?
LEMP utilise Nginx, qui gère les connexions de manière asynchrone avec une architecture orientée événements—efficace pour les utilisateurs simultanés. LAMP utilise Apache, qui crée traditionnellement un thread par requête (bien que les versions récentes d'Apache prennent en charge des modes orientés événements). LEMP offre généralement de meilleures performances pour le contenu statique et les scénarios à forte concurrence, tandis que LAMP permet une configuration plus simple des .htaccess et bénéficie d’un support de modules plus étendu.
Quelle version d'Ubuntu devrais-je utiliser pour LEMP ?
Ubuntu 22.04 LTS est la cible principale de ce guide, offrant PHP 8.1, MySQL 8.0 et Nginx avec support à long terme. Ubuntu 24.04 LTS (dernière version) inclut PHP 8.3 par défaut et fonctionne avec ce guide en ajustant les chemins de socket PHP-FPM et les numéros de version en conséquence.
Comment puis-je installer la pile LEMP sur Ubuntu 24.04 ?
Suivez ces étapes principales :
- Installer Nginx :
sudo apt install nginx - Installer MySQL :
sudo apt install mysql-server - Exécutez le script de sécurité MySQL :
sudo mysql_secure_installation - Installer PHP-FPM :
sudo apt install php-fpm php-mysql - Configurer un bloc de serveur Nginx avec intégration PHP-FPM
- Test avec
info.phpet connexion à la base de données
Voir le guide complet dans les étapes 1 à 6 ci-dessus.
Quelle version de PHP devrais-je installer avec Nginx et MySQL ?
Utilisez la version par défaut de PHP de votre Ubuntu pour une compatibilité optimale :
- Ubuntu 22.04 : PHP 8.1 (installé via
php8.1-fpm) - Ubuntu 24.04 : PHP 8.3 (ajustez les commandes à
php8.3-fpmpour cette version)
Les deux versions fonctionnent parfaitement avec Nginx et MySQL 8.0, prennent en charge les frameworks modernes et reçoivent des mises à jour de sécurité actives.
Comment configurer Nginx pour traiter les fichiers PHP ?
Ajoutez un bloc location ~ \.php$ à la configuration de votre serveur Nginx qui redirige les requêtes PHP vers PHP-FPM via un socket Unix :
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}Ajustez le chemin de la socket en fonction de votre version de PHP, testez avec sudo nginx -t, et rechargez avec sudo systemctl reload nginx.
Pourquoi est-ce que je reçois une erreur « 502 Bad Gateway » après avoir installé PHP-FPM ?
Les erreurs 502 indiquent que Nginx ne peut pas communiquer avec PHP-FPM. Causes courantes :
- PHP-FPM ne fonctionne pas : Vérifiez avec
sudo systemctl status php8.1-fpmet démarrez-le si nécessaire - Chemin de socket incorrect : Vérifiez que
/run/php/php8.1-fpm.sockexiste et correspond à votre configuration Nginx - Problème d'autorisations : Assurez-vous que l'utilisateur Nginx (www-data) peut accéder à la socket
- Erreur de configuration PHP-FPM : Vérifiez les journaux dans
/var/log/php8.1-fpm.log
Solution : Redémarrez les deux services :
sudo systemctl restart php8.1-fpm nginxComment sécuriser MySQL après son installation ?
Exécutez le script de sécurité intégré :
sudo mysql_secure_installationSuivez les instructions pour :
- Activer le plugin de validation des mots de passe
- Définir un mot de passe root fort
- Supprimer les utilisateurs anonymes
- Désactiver la connexion root à distance
- Supprimer la base de données de test
- Recharger les privilèges
Pour les bases de données d'application, créez des utilisateurs dédiés avec des privilèges limités au lieu d'utiliser le compte root.
Puis-je héberger plusieurs sites web sur un seul serveur LEMP ?
Oui, créez des blocs serveur Nginx séparés pour chaque domaine :
- Créer le répertoire :
sudo mkdir -p /var/www/second_domain - Créer un bloc serveur :
sudo nano /etc/nginx/sites-available/second_domain - Configurez avec des directives
server_nameetrootuniques - Activer :
sudo ln -s /etc/nginx/sites-available/second_domain /etc/nginx/sites-enabled/ - Tester et recharger :
sudo nginx -t && sudo systemctl reload nginx
Chaque site peut avoir des paramètres PHP et des utilisateurs de base de données distincts.
Comment puis-je mettre à niveau PHP vers une version plus récente ?
Les mises à jour des paquets Ubuntu gèrent automatiquement les versions mineures. Pour les mises à niveau de version majeure :
Ajoutez le PHP PPA d'Ondřej (référentiel tiers de confiance) :
sudo add-apt-repository ppa:ondrej/php sudo apt updateInstaller une nouvelle version de PHP-FPM :
sudo apt install php8.3-fpm php8.3-mysql -yMettre à jour le chemin du socket dans la configuration Nginx vers
/run/php/php8.3-fpm.sockTester et recharger Nginx
Supprimez éventuellement l’ancienne version :
sudo apt purge php8.1-fpm
Testez toujours sur l'environnement de staging avant de mettre à jour les systèmes de production.
Dépannage des problèmes fréquents
Erreur 502 Passerelle Incorrecte
Le problème le plus courant avec la pile LEMP se produit lorsque Nginx ne peut pas communiquer avec PHP-FPM :
Vérifier le statut de PHP-FPM :
sudo systemctl status php8.1-fpmVérifier le chemin du socket :
ls -la /run/php/La sortie attendue devrait afficher le fichier php8.1-fpm.sock.
Corrections courantes :
- Redémarrer PHP-FPM :
sudo systemctl restart php8.1-fpm - Vérifiez que le chemin du socket du bloc serveur Nginx correspond au socket réel de PHP-FPM
- Vérifiez les autorisations du fichier :
sudo chown www-data:www-data /run/php/php8.1-fpm.sock
Erreurs de permission refusée
Corriger les permissions du répertoire web :
sudo chown -R www-data:www-data /var/www/your_domain
sudo chmod -R 755 /var/www/your_domainProblèmes de connexion MySQL
Réinitialiser le mot de passe root de MySQL :
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';
FLUSH PRIVILEGES;
EXIT;Vérifier le service MySQL :
sudo systemctl status mysqlPHP ne traite pas
Vérifier les modules PHP :
php -m | grep -E 'mysql|fpm'Vérifier la configuration de PHP-FPM :
sudo nginx -t
sudo php-fpm8.1 -tDéboguer les erreurs 404 :
- Vérifiez que
index.phpest répertorié dans la directiveindexde Nginx - Vérifiez si le fichier existe :
ls -la /var/www/votre_domaine/ - Vérifiez les journaux d'erreurs Nginx :
sudo tail -f /var/log/nginx/error.log
Conclusion
Dans ce guide, vous avez construit une base flexible pour héberger des sites et applications PHP pour vos visiteurs, en utilisant Nginx comme serveur web et MySQL comme système de base de données. Vous pouvez faire la même chose avec un serveur web Apache, consultez notre tutoriel sur Comment Installer la pile Linux, Apache, MySQL, PHP (LAMP) sur Ubuntu. Vous pouvez également sécuriser votre site avec Let’s Encrypt, qui fournit des certificats gratuits et fiables. Apprenez à le faire avec notre guide sur Let’s Encrypt pour Apache.
Merci d'apprendre avec la communauté Linux-Console.net.



