Tu choisis les services que nous pouvons activer pour l’analyse, la personnalisation et les contenus externes.
Nous utilisons des cookies et des technologies similaires sur notre site pour personnaliser les contenus, intégrer des médias externes et mieux comprendre l’utilisation de certaines sections.
Cookies nécessaires
Ces entrées assurent des fonctions essentielles comme la sécurité, la stabilité et le traitement des formulaires.
Tes données peuvent être traitées avec ton consentement ou sur la base d’intérêts légitimes. Dans les paramètres des cookies, tu peux refuser chaque catégorie facultative ou l’autoriser individuellement.
Certains services traitent des données personnelles dans des pays tiers. En donnant ton consentement, tu acceptes également ce transfert. Pour en savoir plus, consulte notre politique de confidentialité.
Tu pourras rouvrir et modifier ta sélection à tout moment. · 1.0.2
Configurer une pile LEMP sur un serveur Linux – Déployer des applications web hautes performances
Découvre comment configurer une pile LEMP pour héberger des sites PHP dynamiques sur un Serveur VPS Linux → En savoir plus
10 novembre 20269 min de lecture1 Vues0 utile
Introduction
La pile LEMP est un ensemble populaire de logiciels open source installés ensemble pour héberger facilement des sites web dynamiques, en particulier des sites et des applications PHP. L’acronyme désigne : Linux comme système d’exploitation, "Engine x" (nginx) comme serveur web, MySQL comme base de données et enfin PHP pour le traitement. Dans ce guide, nous te montrons comment configurer une pile LEMP sur un Serveur VPS Linux, avec des explications détaillées étape par étape et un exemple de site web de liste de tâches.
FAQ
Questions fréquentes
Linux comme système d’exploitation, Engine x (nginx) comme serveur web, MySQL comme base de données et PHP pour le traitement : un ensemble de logiciels populaire pour héberger des sites PHP dynamiques.
Ubuntu. Les commandes sont identiques pour Debian et devraient être similaires pour les autres distributions, même si leur syntaxe peut légèrement varier.
Connecte-toi à ton serveur via SSH et mets tous les paquets à jour avec la commande adaptée (par exemple, sudo apt update sur Ubuntu ou Debian).
Exécute sudo apt install nginx. Vérifie ensuite que les règles de pare-feu appropriées sont configurées pour rendre le serveur web accessible depuis Internet.
Avis
Cet article t’a-t-il été utile ?
Ton avis nous aide à mieux définir les priorités et à améliorer les contenus.
0 de 0 Les personnes ayant donné leur avis ont trouvé cet article utile.
Aide personnalisée
Le guide ne suffit pas ?
Notre équipe d’assistance ZAP connaît ton produit : décris brièvement ta demande et nous t’aiderons personnellement.
Zappy connaît ce guide et te répond directement dans le chat.
Navigation
VPS
Préparation
Commence par te connecter à ton serveur via SSH. Si tu ne sais pas comment faire, consulte notre guide Première connexion (SSH).
Dans ce guide, nous utilisons Ubuntu comme distribution Linux. Les commandes sont identiques pour Debian et devraient être similaires pour les autres distributions, même si leur syntaxe peut légèrement varier. Assure-toi qu’un système d’exploitation est installé et que tu es connecté via SSH.
Comme toujours, avant l’installation, mets tous les paquets à jour avec la commande suivante :
Félicitations, tu as installé et configuré la pile LEMP avec succès ! Pour la suite, nous te recommandons vivement de configurer un domaine et un certificat SSL afin de sécuriser la transmission de tes données. Consulte notre guide Certbot, consacré au plugin Nginx, et suis la configuration interactive pour obtenir rapidement et facilement un certificat pour ton domaine.
Si tu as des questions ou rencontres des problèmes, notre équipe d’assistance est à ta disposition tous les jours : n’hésite pas à nous contacter ! 🙂
Hébergement de serveurs dès 2,49 € / mois, mise en ligne immédiate, protection DDoS incluse.
L’installation peut être divisée en plusieurs composants essentiels de la pile LEMP : d’abord le serveur web Nginx, puis la base de données MySQL et enfin PHP. Pendant l’installation, nous allons créer un site web de test écrit en PHP, qui accède à la base de données MySQL. Chaque requête web sera ensuite traitée et servie par le serveur web Nginx.
Configurer Nginx
Nginx est le serveur web qui traite les requêtes entrantes et renvoie les réponses. Installe-le avec la commande suivante :
Code
sudo apt install nginx
Après l’installation, assure-toi de créer les règles de pare-feu appropriées afin que le serveur web soit accessible depuis Internet. Dans cet exemple, nous utilisons le pare-feu UFW, car Nginx y est enregistré comme application.
Si tu utilises un autre pare-feu, vérifie que le port 80 (HTTP) est ouvert. Pour en savoir plus sur les pare-feu sous Linux, consulte notre guide Gérer le pare-feu.
Active le pare-feu UFW et crée une règle pour SSH :
Code
# Regel für SSH erstellen
sudo ufw allow OpenSSH
# UFW Firewall aktivieren
sudo ufw enable
Attention
Si tu utilises UFW, veille à avoir configuré une règle pour SSH ! Sans cette règle, tu ne pourras plus te connecter à ton serveur via SSH si ta session actuelle est interrompue !
Crée ensuite la règle pour Nginx, puis vérifie que les règles sont bien présentes :
Code
# Regel für Nginx erstellen
sudo ufw allow in "Nginx Full"
# UFW Firewall Regeln anzeigen
sudo ufw status
Conseil
La commande ufw app list te permet d’afficher les profils disponibles. Dans l’exemple ci-dessus, Nginx Full ouvre à la fois HTTP (port 80) et HTTPS (port 443).
Tu devrais voir les règles Nginx et Nginx (v6) avec le statut ALLOW, ce qui confirme que le pare-feu est correctement configuré. Tu verras également les autres règles que tu as peut-être déjà configurées, y compris celle pour SSH.
Une fois le pare-feu configuré pour Nginx, vérifie que Nginx fonctionne. Pour cela, ouvre ton navigateur et saisis ton adresse IP, par exemple : http://[deine_ipadresse]
Si tout fonctionne, tu devrais voir une page d’accueil par défaut. Sinon, vérifie l’état du service avec : systemctl status nginx
Configurer MySQL
Installe et configure maintenant un serveur MySQL, qui servira de base de données relationnelle pour stocker les données de façon permanente. Installe-le avec :
Code
sudo apt install mysql-server
Après l’installation, nous te recommandons d’exécuter le script de sécurité pour renforcer la protection de ton serveur MySQL. Cette étape est facultative, mais vivement conseillée. Lance le script avec :
Code
sudo mysql_secure_installation
Le script te guidera de manière interactive dans la configuration. Il te demandera d’abord si tu souhaites activer la validation des mots de passe. Nous te recommandons de choisir Y afin que seuls des mots de passe sécurisés soient acceptés, puis de sélectionner MEDIUM avec 1 ou STRONG avec 2.
Tu devras ensuite indiquer si tu souhaites supprimer l’utilisateur anonymous et désactiver la connexion root à distance. Pour des raisons de sécurité, nous te recommandons de répondre Y aux deux questions. L’utilisateur de test sera ainsi supprimé et l’accès root sera possible uniquement en local via SSH, ce qui réduit les risques.
Enfin, le script te demandera si tu souhaites supprimer la base de données test et recharger les tables des privilèges. Là encore, nous te recommandons de répondre Y, car la base de données de test n’est pas nécessaire et les tables de privilèges doivent être rechargées pour que les modifications soient prises en compte.
Vérifie maintenant que la base de données MySQL fonctionne en te connectant avec la commande suivante : sudo mysql -u root. Si tout se passe bien, un message de bienvenue s’affichera. Tu peux quitter le shell MySQL avec quit.
Configurer PHP
PHP est le dernier composant de la pile LEMP. Avec Nginx, le programme externe php-fpm (PHP FastCGI Process Manager) est utilisé. Nginx sera configuré pour transmettre les requêtes à php-fpm avant qu’elles soient traitées et servies.
Installe la dernière version de php-fpm et le module PHP-MySQL avec :
Code
sudo apt install php-fpm php-mysql
Vérifie que l’installation a réussi en affichant la version de PHP. Si une version s’affiche, PHP fonctionne correctement :
Code
php -v
Conseil
Extensions PHP
Pour les cas d’utilisation avancés, tu auras peut-être besoin d’extensions PHP supplémentaires. Tu peux en afficher la liste avec apt search php- | less.
Utilise les touches fléchées pour faire défiler la liste et appuie sur Q pour quitter. Pour installer une extension, utilise simplement :
Code
sudo apt install [php_erweiterung] [...]
Tu peux installer plusieurs extensions à la fois en les séparant par des espaces.
Créer un site web de test
Une fois tous les composants de la pile LEMP installés, créons un site web de test pour montrer comment ils fonctionnent ensemble et permettent de créer un site dynamique. Cette étape est facultative, mais elle t’aidera à comprendre comment configurer tes propres sites web.
Dans cet exemple, nous créons une petite liste de tâches en PHP qui récupère et affiche des entrées issues d’une base de données MySQL. Le site web sera servi par Nginx.
Nous utilisons le domaine d’exemple zapdocs.example.com, car tu utiliseras probablement un domaine en pratique. Tu dois créer un enregistrement DNS A pour ce domaine, qui pointe vers l’adresse IP de ton serveur. Pour en savoir plus, consulte notre guide Enregistrements de domaine.
Infos
Tu peux aussi te passer de domaine et remplacer [your_domain] par un nom de ton choix. Tu pourras alors accéder au site web via l’adresse IP. Note toutefois que tu devras supprimer la ligne server_name du fichier de bloc serveur plus tard.
Configurer Nginx
Les serveurs web stockent généralement les fichiers des sites web dans le répertoire /var/www. Par défaut, Nginx y crée un dossier html contenant une page par défaut. Pour garder tes fichiers organisés, surtout si tu héberges plusieurs sites web, nous te recommandons de créer un dossier distinct pour chacun d’eux.
Crée donc un nouveau dossier dans /var/www/[your_domain]. Dans notre exemple, il s’agit de /var/www/zapdocs.example.com.
Code
sudo mkdir /var/www/[your_domain]
Crée maintenant un nouveau fichier de configuration de bloc serveur Nginx pour ce domaine dans le répertoire sites-available :
Version de PHP
Important : remplace [your_phpversion] par la version de PHP actuellement installée. Vérifie-la avec php -v, par exemple : PHP 8.3.6 (cli) (built: Mar 19 2025 10:08:38) (NTS).
Dans cet exemple, il s’agit de 8.3. La ligne sera donc : fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
Ce fichier de bloc serveur traite les requêtes sur le port 80 (HTTP) et vérifie si elles correspondent à la valeur server_name, c’est-à-dire à ton domaine. Il pointe également vers le dossier /var/www/[your_domain] que tu as créé précédemment, où seront stockés les fichiers à servir.
Enregistre le fichier et quitte Nano avec CTRL + X, puis appuie sur Y pour confirmer et sur ENTER.
Active la configuration en créant un lien symbolique dans le répertoire sites-enabled :
Tu n’utilises pas de domaine
Si tu n’utilises pas de domaine, supprime ou commente la ligne server_name (en ajoutant # devant). Tu devrais également désactiver le bloc serveur par défaut avec :
Code
sudo unlink /etc/nginx/sites-enabled/default
Nous te recommandons de vérifier la syntaxe avec la commande suivante :
Code
sudo nginx -t
Redémarre Nginx pour appliquer les modifications :
Code
sudo systemctl reload nginx
Créer le site web
Maintenant que Nginx est configuré, créons le site web qui sera servi. Le dossier est actuellement vide, donc rien ne s’affiche encore. Nous allons créer une petite liste de tâches, comme indiqué plus haut.
Préparer la base de données
Connecte-toi à ton serveur MySQL :
Code
sudo mysql -u root
Crée une nouvelle base de données todowebsite et une table todoitems :
Code
# Datenbank erstellen
CREATE DATABASE todowebsite;
# Datenbank auswählen
USE todowebsite;
# Tabelle erstellen
CREATE TABLE todoitems (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
is_completed BOOLEAN DEFAULT FALSE,
creation_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Ajoute quelques entrées d’exemple :
Code
INSERT INTO todoitems (name, is_completed) VALUES ('Create ZAP-Docs Guide', 0);
INSERT INTO todoitems (name, is_completed) VALUES ('Buy a ZAP-Hosting Server', 1);
INSERT INTO todoitems (name, is_completed) VALUES ('Join ZAP-Hosting Discord', 0);
INSERT INTO todoitems (name, is_completed) VALUES ('Have a great day!', 0);
Crée un utilisateur dédié nommé todo pour le site web :
Code
# Benutzer erstellen
# Ersetze [your_password] durch dein eigenes Passwort
CREATE USER todo@localhost IDENTIFIED BY '[your_password]';
# Rechte vergeben (alles in einer Zeile kopieren)
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER
ON todowebsite.*
TO todo@localhost;
# Rechte neu laden
FLUSH PRIVILEGES;
Quitte le shell MySQL avec quit.
Fichiers PHP du site web
Créons maintenant le fichier PHP du site de liste de tâches. Ouvre l’éditeur Nano :
Code
sudo nano /var/www/[your_domain]/index.php
Insère le code suivant. Le premier bloc PHP établit la connexion à MySQL.
Important
Remplace [your_password] par le mot de passe que tu as défini pour l’utilisateur todo.
La partie HTML affiche la liste de tâches en récupérant les données de la base de données.
Code
<?php
// MySQL-Verbindung vorbereiten
$servername = "localhost";
$username = "todo";
$password = "[your_password]";
$dbname = "todowebsite";
// Verbindung erstellen
$conn = new mysqli($servername, $username, $password, $dbname);
// Verbindung prüfen, bei Fehler abbrechen
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// SQL-Abfrage ausführen und Ergebnis speichern
$sql = "SELECT id, name, is_completed, creation_date FROM todoitems ORDER BY creation_date DESC";
$result = $conn->query($sql);
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>To-Do Liste</title>
</head>
<body>
<h1>Coole To-Do Liste :D</h1>
<p>Für unseren tollen ZAP-Hosting Guide: <a href="https://zap-hosting.com/guides/docs/vserver-linux-lemp-stack">https://zap-hosting.com/guides/docs/vserver-linux-lemp-stack</a></p>
<ul>
<?php
// Prüfen, ob Ergebnisse vorhanden sind
if ($result->num_rows > 0) {
// Durch alle Einträge iterieren
foreach ($result as $entry) {
echo "<li>";
// Name anzeigen, htmlspecialchars schützt vor XSS
echo htmlspecialchars($entry["name"]);
// Status anzeigen
if ($entry["is_completed"]) {
echo " <strong>(Abgeschlossen)</strong>";
} else {
echo " <strong>(Offen)</strong>";
}
// Erstellungsdatum anzeigen
echo " - Erstellungsdatum: " . htmlspecialchars($entry['creation_date']);
echo "</li>";
}
} else {
// Falls keine Einträge vorhanden sind
echo "<li>Keine To-Do Einträge gefunden.</li>";
}
?>
</ul>
</body>
</html>
<?php
// Verbindung schließen
$conn->close();
?>
Enregistre le fichier et quitte Nano avec CTRL + X, puis appuie sur Y et sur ENTER.
Tester le site web
Tu as créé avec succès un site de test de liste de tâches qui utilise tous les composants de la pile LEMP !
Tu devrais maintenant pouvoir accéder au site web via le domaine (port 80 / HTTP) défini dans le bloc serveur, dans notre exemple zapdocs.example.com. Le résultat devrait ressembler à ceci :