Comment installer Linux, Nginx, MySQL, PHP (pile LEMP) sur Ubuntu : Guide complet
La pile LEMP — un acronyme pour Linux, Nginx, MySQL et PHP — est l’une des configurations de serveur web les plus largement adoptées pour alimenter les sites web dynamiques et les applications web haute performance. En combinant la stabilité inébranlable de Linux, la vitesse foudroyante de Nginx, les capacités robustes de gestion des données de MySQL et la polyvalence de PHP, la pile LEMP offre un environnement d’hébergement puissant, évolutif et efficace en ressources.
Que vous déployiez un blog personnel, un site web professionnel ou une application d’entreprise complexe, une pile LEMP correctement configurée vous offre une meilleure scalabilité, des temps de chargement de page plus rapides et une gestion efficace de la mémoire — en particulier dans des conditions de trafic élevé.
Si vous avez besoin d’une base fiable pour exécuter cette pile, l’hébergement VPS d’AlexHost fournit des serveurs virtuels haute performance basés sur Linux avec accès root complet, vous donnant un contrôle total sur chaque composant de votre environnement LEMP. Associez cela à un certificat SSL pour sécuriser votre application dès le départ.
Dans ce guide complet, nous vous guiderons à travers chaque étape de l’installation et de la configuration de la pile LEMP complète sur un serveur Ubuntu — de la préparation initiale du système au test de votre environnement PHP en direct.
1. Prérequis
Avant de commencer, assurez-vous d’avoir les éléments suivants en place :
- Un serveur exécutant Ubuntu 18.04, 20.04 ou 22.04 LTS
- Un compte utilisateur avec privilèges sudo
- Un accès SSH ou un accès direct au terminal de votre serveur
- Un nom de domaine enregistré (facultatif mais recommandé pour les déploiements en production — vous pouvez en enregistrer un via l’enregistrement de domaine AlexHost)
> Conseil professionnel : Pour un environnement propre et isolé avec des ressources garanties, un plan d’hébergement VPS est le point de départ idéal pour tout déploiement LEMP.
2. Mettre à jour votre système
Avant d’installer des packages, il est essentiel d’actualiser votre index de packages et d’appliquer toutes les mises à jour en attente. Cela garantit que vous travaillez avec les versions les plus récentes et les plus sécurisées de tous les logiciels.
Ouvrez votre terminal et exécutez :
sudo apt update && sudo apt upgrade -yCette commande met à jour la base de données locale des packages et met à niveau tous les packages installés vers leurs dernières versions disponibles.
3. Installer Nginx
Nginx (prononcé « engine-x ») est un serveur web haute performance, piloté par événements et un proxy inverse. Contrairement à Apache, Nginx gère les connexions simultanées avec une consommation minimale de mémoire, ce qui en fait le choix préféré pour les environnements à trafic élevé.
Étape 1 : Installer Nginx
sudo apt install nginx -yÉtape 2 : Démarrer et activer Nginx
Après l’installation, démarrez le service Nginx et configurez-le pour qu’il se lance automatiquement au démarrage du système :
sudo systemctl start nginx
sudo systemctl enable nginxÉtape 3 : Vérifier que Nginx est en cours d’exécution
Vérifiez l’état du service pour confirmer que Nginx est actif :
sudo systemctl status nginxVous devriez voir une sortie indiquant que le service est actif (en cours d’exécution). Vous pouvez également ouvrir un navigateur web et accéder à l’adresse IP de votre serveur :
http://your_server_ipSi Nginx s’exécute correctement, vous serez accueilli par la page par défaut « Bienvenue sur nginx ! ».
Étape 4 : Configurer le pare-feu (le cas échéant)
Si vous avez UFW (Uncomplicated Firewall) activé, autorisez le trafic HTTP et HTTPS :
sudo ufw allow 'Nginx Full'
sudo ufw status4. Installer MySQL
MySQL est un système de gestion de base de données relationnelle (SGBDR) puissant et open-source qui sert de colonne vertébrale des données pour la plupart des applications web dynamiques, y compris WordPress, Joomla et les applications PHP personnalisées.
Étape 1 : Installer le serveur MySQL
sudo apt install mysql-server -yÉtape 2 : Sécuriser l’installation MySQL
Une fois installé, exécutez le script de renforcement de la sécurité intégré. Ce script vous aide à définir un mot de passe root fort, à supprimer les utilisateurs anonymes, à désactiver la connexion root à distance et à supprimer la base de données de test :
sudo mysql_secure_installationVous serez invité avec une série de questions. Les réponses recommandées pour un serveur de production sont :
| Invite | Réponse recommandée |
|---|---|
| Configurer le composant VALIDATE PASSWORD ? | Oui |
| Niveau de politique de validation de mot de passe | 2 (FORT) |
| Supprimer les utilisateurs anonymes ? | Oui |
| Interdire la connexion root à distance ? | Oui |
| Supprimer la base de données de test ? | Oui |
| Recharger les tables de privilèges ? | Oui |
Étape 3 : Vérifier que MySQL est en cours d’exécution
sudo systemctl status mysqlÉtape 4 : Se connecter à MySQL (vérification facultative)
sudo mysql -u root -pEntrez votre mot de passe root lorsque vous y êtes invité. Tapez exit pour quitter le shell MySQL.
5. Installer PHP
PHP (Hypertext Preprocessor) est le langage de script côté serveur qui traite le contenu dynamique et communique avec MySQL pour servir des pages web pilotées par les données. Lors de l’utilisation de Nginx, PHP est géré via PHP-FPM (FastCGI Process Manager), qui traite les demandes PHP indépendamment du serveur web pour améliorer les performances.
Étape 1 : Installer PHP-FPM et l’extension MySQL
sudo apt install php-fpm php-mysql -yVous pouvez également installer les extensions PHP couramment utilisées pour une compatibilité plus large des applications :
sudo apt install php-curl php-gd php-mbstring php-xml php-xmlrpc php-zip -yÉtape 2 : Configurer PHP-FPM pour la sécurité
Ouvrez le fichier de configuration PHP-FPM. Remplacez 8.1 par votre version PHP installée (vérifiez avec php -v) :
sudo nano /etc/php/8.1/fpm/php.iniLocalisez la directive cgi.fix_pathinfo et définissez-la sur 0 pour éviter une vulnérabilité de sécurité critique :
cgi.fix_pathinfo=0> Pourquoi c’est important : Si cgi.fix_pathinfo est défini sur 1, PHP tentera d’exécuter le fichier le plus proche qu’il peut trouver si le fichier PHP demandé n’existe pas. Ce comportement peut être exploité par les attaquants pour exécuter du code arbitraire.
Enregistrez et fermez le fichier (Ctrl+X, puis Y, puis Enter).
Étape 3 : Redémarrer PHP-FPM
Appliquez les modifications de configuration en redémarrant le service PHP-FPM :
sudo systemctl restart php8.1-fpm6. Configurer Nginx pour traiter PHP
Par défaut, Nginx ne sait pas comment gérer les fichiers PHP. Vous devez créer un bloc serveur (l’équivalent Nginx d’un hôte virtuel Apache) qui indique à Nginx de transmettre les demandes PHP à PHP-FPM pour traitement.
Étape 1 : Créer le répertoire racine web
Créez le répertoire où vos fichiers de site web seront stockés :
sudo mkdir -p /var/www/your_domain
sudo chown -R www-data:www-data /var/www/your_domain
sudo chmod -R 755 /var/www/your_domainRemplacez your_domain par votre nom de domaine réel ou un nom de projet descriptif.
Étape 2 : Créer un nouveau bloc serveur Nginx
Créez un nouveau fichier de configuration Nginx pour votre site :
sudo nano /etc/nginx/sites-available/your_domainAjoutez le bloc de configuration suivant. Lisez attentivement les commentaires en ligne — ils expliquent ce que chaque directive fait :
server {
listen 80;
listen [::]:80;
server_name your_domain www.your_domain; # Replace with your domain or server IP
root /var/www/your_domain; # Document root — where your files live
index index.php index.html index.htm; # Default files to serve
# Handle all requests; return 404 if file not found
location / {
try_files $uri $uri/ =404;
}
# Pass PHP scripts to PHP-FPM for processing
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # Adjust PHP version as needed
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# Deny access to hidden files (e.g., .htaccess)
location ~ /.ht {
deny all;
}
}> Important : Remplacez your_domain par votre nom de domaine réel et ajustez php8.1-fpm.sock pour correspondre à votre version PHP installée.
Étape 3 : Activer le bloc serveur
Créez un lien symbolique de sites-available vers sites-enabled pour activer la configuration :
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/Pour éviter un problème potentiel de mémoire du bucket de hachage, il est également judicieux d’ouvrir la configuration Nginx principale et de s’assurer que la directive server_names_hash_bucket_size est décommentée :
sudo nano /etc/nginx/nginx.confTrouvez et décommentez :
server_names_hash_bucket_size 64;Étape 4 : Tester la configuration Nginx
Avant de redémarrer Nginx, testez toujours la configuration pour les erreurs de syntaxe :
sudo nginx -tSi la sortie affiche :
nginx: configuration file /etc/nginx/nginx.conf test is successfulVous êtes prêt à continuer.
Étape 5 : Redémarrer Nginx
Appliquez toutes les modifications en redémarrant le service Nginx :
sudo systemctl restart nginx7. Créer et tester un fichier PHP Info
Pour confirmer que Nginx transmet correctement les demandes PHP à PHP-FPM, créez un simple fichier de test PHP dans votre racine de document.
Étape 1 : Créer le fichier PHP Info
sudo nano /var/www/your_domain/info.phpAjoutez le contenu suivant :
<?php
phpinfo();
?>Enregistrez et fermez le fichier.
Étape 2 : Accéder à la page PHP Info
Ouvrez votre navigateur web et accédez à :
http://your_domain/info.phpOu, si vous n’avez pas encore configuré de domaine :
http://your_server_ip/info.phpVous devriez voir la page d’informations PHP — un aperçu détaillé de votre installation PHP, des modules chargés, des valeurs de configuration et des variables d’environnement. Cela confirme que les trois composants (Nginx, PHP-FPM et MySQL) fonctionnent correctement ensemble.
Étape 3 : Supprimer le fichier PHP Info (étape de sécurité critique)
Une fois que vous avez confirmé que tout fonctionne, supprimez immédiatement le fichier info.php. Ce fichier expose des détails sensibles de la configuration du serveur qui pourraient être exploités par des acteurs malveillants :
sudo rm /var/www/your_domain/info.php8. Prochaines étapes : Renforcer et optimiser votre pile LEMP
Avec votre pile LEMP opérationnelle, considérez les étapes supplémentaires suivantes pour préparer votre serveur à la production :
Activer HTTPS avec un certificat SSL gratuit
Sécurisez votre site avec le chiffrement TLS/SSL en utilisant Certbot et Let’s Encrypt :
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your_domain -d www.your_domainSinon, explorez les certificats SSL d’AlexHost pour les certificats validés commercialement premium qui offrent des niveaux de confiance plus élevés pour les applications commerciales et de commerce électronique.
Optimiser les performances de Nginx
Ajoutez les directives suivantes à votre configuration Nginx pour améliorer les performances :
# Enable Gzip compression
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
# Enable browser caching for static assets
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}Configurer un utilisateur MySQL dédié
Évitez d’utiliser le compte root MySQL pour vos applications. Créez un utilisateur de base de données dédié avec des privilèges limités :
CREATE DATABASE your_app_db;
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON your_app_db.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;Envisager un panneau de contrôle pour une gestion plus facile
Si vous préférez une interface graphique pour gérer votre pile LEMP, les hôtes virtuels
on All Hosting Services