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 backend sont stockées dans la base de données MySQL et le traitement dynamique est assuré 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 cible principalement 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. Assurez-vous également 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
- Installation de 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 : Installer le 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 à travers 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 permet le trafic requis. Comme SSL n’est pas encore configuré, autorisez uniquement le trafic HTTP sur le port 80 :
Activez cela en exécutant ce qui suit :
sudo ufw allow 'Nginx HTTP'
Vérifiez le changement de pare-feu :
sudo ufw statusCette sortie indique 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://your_domain 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 à votre tour dans votre navigateur web.
Comme alternative, vous pouvez vérifier quelle adresse IP est accessible, vue depuis d'autres endroits sur Internet :
curl -4 icanhazip.comÉcrivez 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 obtenir 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 VALIDATE PASSWORD PLUGIN.
Remarque : Activer cette fonctionnalité est en quelque sorte une question de jugement. Si elle est activée, les mots de passe qui ne respectent pas les 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 entrez 2 pour le niveau le plus élevé, vous recevrez des erreurs lorsque 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: 1Peu importe si vous avez choisi de configurer 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 système. L'utilisateur root de la base de données est un utilisateur administratif avec 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 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 solide 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 force du mot de passe que vous avez saisi pour le compte root sera affichée et votre serveur vous demandera si vous voulez 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 respecte immédiatement les modifications que vous avez effectuées.
Lorsque vous avez terminé, testez si vous pouvez vous connecter à la console MySQL :
sudo mysqlCela se connectera au serveur MySQL en tant qu'utilisateur de base de données administrateur root, ce qui est implicite avec 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 besoin de fournir un 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. Cela s'explique par le fait que, lorsqu'il est installé sur Ubuntu, la méthode d'authentification par défaut pour l'utilisateur administratif MySQL 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écurisé 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 de la base de données root pour vous connecter depuis votre application PHP.
Pour une sécurité accrue, il est préférable de créer des comptes utilisateur 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 allons montrer 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 – Installer PHP
Installez PHP pour traiter le code et générer du contenu dynamique. Nginx nécessite un programme externe pour le traitement de 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 diriger 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 et 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 même serveur. Ce guide utilise votre_domaine comme nom de domaine exemple.
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 de serveur par défaut qui sert les documents à partir de /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 créera 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 fait chacune de ces directives et sections de localisation :
listen— Définit le port sur lequel Nginx écoutera. Dans ce cas, il écoutera sur le port80, le port par défaut pour HTTP.root— Définit la racine du document où les fichiers servis par ce site web sont stockés.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 la mise en place rapide d'une page de maintenance pour 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 adresses IP auxquels ce bloc de serveur doit répondre. Pointez cette directive vers le nom de domaine ou l’adresse IP publique de votre serveur.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 peut pas trouver la ressource appropriée, il renverra une erreur 404.location ~ \.php$— Ce bloc de localisation gère le traitement réel de 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 location s'occupe des fichiers.htaccess, que Nginx ne traite pas. En ajoutant la directivedeny all, si des fichiers.htaccessse retrouvent dans le répertoire racine du site, ils ne seront pas accessibles aux visiteurs.
Lorsque vous avez terminé la modification, 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éconnectez le fichier de configuration par défaut du répertoire /sites-enabled/ :
sudo unlink /etc/nginx/sites-enabled/defaultRemarque : Si vous devez un jour 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 la configuration lors du prochain rechargement. Vous pouvez tester votre configuration pour des erreurs de syntaxe en exécutant ce qui suit :
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 encore 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.htmlInclure 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, tel qu'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 voyez cette page, cela signifie que le bloc 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.
Avertissement : 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 index.html par défaut, et votre page PHP ne s'affichera pas — c'est une source fréquente de confusion pour les nouveaux utilisateurs.
Votre pile LEMP est maintenant entièrement configurée. Dans l'étape suivante, vous allez créer un script PHP pour vérifier que Nginx est bien capable de gérer les fichiers .php sur 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 transmettre les fichiers .php à votre processeur PHP.
Vous pouvez le faire 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 peut se connecter à MySQL et exécuter des requêtes sur la base de données, vous pouvez créer une table de test avec des données factices et interroger son contenu depuis un script PHP. Avant de le faire, 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 l'autorisation sur la base de données example_database :
GRANT ALL ON example_database.* TO 'example_user'@'%';Cela donnera à l'utilisateur example_user des privilèges complets 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.
Quittez maintenant le shell MySQL avec la commande suivante :
exitVous pouvez tester si le nouvel utilisateur dispose des autorisations appropriées en vous reconnectant à la console MySQL, cette fois en utilisant les informations d'identification de l'utilisateur personnalisé. 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 voudrez peut-être 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é enregistrées avec succès dans votre table, 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 effectuera des requêtes pour 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 sous forme de liste. S'il y a un problème avec la connexion à la base de données, une exception sera levée.
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 maintenant accéder à cette page dans votre navigateur Web en visitant le nom de domaine ou l'adresse IP publique configurée pour votre site Web, suivi de /todo_list.php :
http://server_domain_or_IP/todo_list.phpVous devriez recevoir une page semblable à la suivante, montrant le contenu que vous avez inséré dans votre table 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 piles LEMP et LAMP ?
LEMP utilise Nginx, qui gère les connexions de manière asynchrone avec une architecture basée sur les événements—efficace pour les utilisateurs simultanés. LAMP utilise Apache, qui crée traditionnellement un thread par requête (bien qu'Apache moderne supporte les modes basés sur les événements). LEMP offre généralement de meilleures performances pour le contenu statique et les scénarios de forte concurrence, tandis que LAMP permet une configuration .htaccess plus facile et un support plus large des modules.
Quelle version d'Ubuntu devrais-je utiliser pour LEMP ?
Ubuntu 22.04 LTS est la principale cible de ce guide, avec 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 sockets PHP-FPM et les numéros de version en conséquence.
Comment 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 la marche à suivre complète dans les étapes 1 à 6 ci-dessus.
Quelle version de PHP devrais-je installer avec Nginx et MySQL ?
Utilisez la version de PHP par défaut de votre version d’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 de permissions : Assurez-vous que l'utilisateur Nginx (www-data) peut accéder à la socket
- Erreur de configuration PHP-FPM : Vérifiez les journaux à
/var/log/php8.1-fpm.log
Solution : Redémarrez les deux services :
sudo systemctl restart php8.1-fpm nginxComment sécuriser MySQL après l'installation ?
Exécutez le script de sécurité intégré :
sudo mysql_secure_installationSuivez les invites pour :
- Activer le module de validation de mot 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'applications, 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 de serveur Nginx séparés pour chaque domaine :
- Créer le répertoire :
sudo mkdir -p /var/www/second_domain - Créer un bloc de 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 à jour PHP vers une version plus récente ?
Les mises à jour des paquets Ubuntu gèrent automatiquement les versions mineures. Pour les mises à niveau de versions majeures :
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
Supprimer éventuellement l'ancienne version :
sudo apt purge php8.1-fpm
Testez toujours dans l'environnement de préproduction avant de mettre à niveau les systèmes de production.
Dépannage des problèmes courants
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.
Solutions Courantes :
- Redémarrer PHP-FPM :
sudo systemctl restart php8.1-fpm - Vérifiez que le chemin du socket du bloc de serveur Nginx correspond au socket réel de PHP-FPM
- Vérifiez les permissions du fichier :
sudo chown www-data:www-data /run/php/php8.1-fpm.sock
Erreurs de permission refusée
Corriger les autorisations 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 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 fonctionne 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érifier si le fichier existe :
ls -la /var/www/your_domain/ - 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 servir des sites Web et des applications PHP à vos visiteurs, en utilisant Nginx comme serveur Web et MySQL comme système de base de données. Vous pouvez également le faire 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 comment faire cela avec notre guide sur Let's Encrypt pour Apache.
Merci de apprendre avec la communauté Linux-Console.net.



