Recherche de site Web

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-fpm dans 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.sock pour Ubuntu 24.04).

Comment installer Linux, Nginx, MySQL, PHP (pile LEMP) sur Ubuntu

  1. Installation du serveur Web Nginx
  2. Installation de MySQL
  3. Installer PHP
  4. Configurer Nginx pour utiliser le processeur PHP
  5. Tester PHP avec Nginx
  6. 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 update

Ensuite, exécutez apt install pour installer Nginx :

sudo apt install nginx

Lorsque 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 nginx

Vous 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 list
Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

Activez 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 status

Cette 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 show
hostname -I

Cela 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.com

Tapez 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-server

Lorsque 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_installation

Vous 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: 1

Que 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) : y

Pour 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 mysql

Cela 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 :

exit

Remarquez 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-mysql

Lorsque 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-fpm

Vous 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 -v
PHP 8.1.x (cli) (built: ...)
Copyright (c) The PHP Group
Zend Engine v4.1.x

Configurez 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_domain

Ensuite, 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_domain

Ensuite, 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_domain

Cela 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 port 80, 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 fichiers index.html avec une priorité plus élevée que les fichiers index.php afin 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 directive try_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 configuration fastcgi-php.conf et le fichier php8.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 directive deny all, si des fichiers .htaccess venaient à 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/default

Remarque : 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 -t

Si 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 nginx

Votre 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.html

Incluez 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_IP

Vous 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.php

Ajoutez 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.php

Vous 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.php

Vous 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 mysql

Pour 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 :

exit

Vous 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 -p

Aprè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 :

exit

Vous 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.php

Le 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.php

Vous 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 :

  1. Installer Nginx : sudo apt install nginx
  2. Installer MySQL : sudo apt install mysql-server
  3. Exécutez le script de sécurité MySQL : sudo mysql_secure_installation
  4. Installer PHP-FPM : sudo apt install php-fpm php-mysql
  5. Configurer un bloc de serveur Nginx avec intégration PHP-FPM
  6. Test avec info.php et 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-fpm pour 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 :

  1. PHP-FPM ne fonctionne pas : Vérifiez avec sudo systemctl status php8.1-fpm et démarrez-le si nécessaire
  2. Chemin de socket incorrect : Vérifiez que /run/php/php8.1-fpm.sock existe et correspond à votre configuration Nginx
  3. Problème d'autorisations : Assurez-vous que l'utilisateur Nginx (www-data) peut accéder à la socket
  4. 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 nginx

Comment sécuriser MySQL après son installation ?

Exécutez le script de sécurité intégré :

sudo mysql_secure_installation

Suivez 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 :

  1. Créer le répertoire : sudo mkdir -p /var/www/second_domain
  2. Créer un bloc serveur : sudo nano /etc/nginx/sites-available/second_domain
  3. Configurez avec des directives server_name et root uniques
  4. Activer : sudo ln -s /etc/nginx/sites-available/second_domain /etc/nginx/sites-enabled/
  5. 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 :

  1. Ajoutez le PHP PPA d'Ondřej (référentiel tiers de confiance) :

    sudo add-apt-repository ppa:ondrej/php
    sudo apt update
  2. Installer une nouvelle version de PHP-FPM :

    sudo apt install php8.3-fpm php8.3-mysql -y
  3. Mettre à jour le chemin du socket dans la configuration Nginx vers /run/php/php8.3-fpm.sock

  4. Tester et recharger Nginx

  5. 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-fpm

Vérifier le chemin du socket :

ls -la /run/php/

La sortie attendue devrait afficher le fichier php8.1-fpm.sock.

Corrections courantes :

  1. Redémarrer PHP-FPM : sudo systemctl restart php8.1-fpm
  2. Vérifiez que le chemin du socket du bloc serveur Nginx correspond au socket réel de PHP-FPM
  3. 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_domain

Problè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 mysql

PHP 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 -t

Déboguer les erreurs 404 :

  • Vérifiez que index.php est répertorié dans la directive index de 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.