Serveur Web · 11 min read · Oct 12, 2025

Comment installer Nginx avec PHP et MySQL (LEMP Stack) sur Ubuntu 22.04

La pile logicielle LEMP est un groupe de logiciels open-source qui permet à un serveur d’héberger des sites Web et des applications dynamiques écrites en PHP. C’est un acronyme pour L inux, Nginx (prononcé E ngine-X), M ySQL, et P HP.

Ce guide vous montrera comment installer une pile LEMP sur un serveur Ubuntu 22.04. Vous apprendrez également à installer des applications comme phpMyAdmin.

Prérequis

  • Un serveur exécutant Ubuntu 22.04.
  • Un utilisateur non-root avec des privilèges sudo.
  • Le pare-feu Uncomplicated Firewall (UFW) est activé et en cours d’exécution.
  • Tout est à jour. $ sudo apt update && sudo apt upgrade

Étape 1 - Configurer le pare-feu

La première étape avant d’installer des paquets est de configurer le pare-feu pour autoriser les connexions HTTP et HTTPS.

Vérifiez l’état du pare-feu.

$ sudo ufw status

Vous devriez voir quelque chose comme ceci.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Autorisez les ports HTTP et HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Vérifiez à nouveau l’état pour confirmer.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

Étape 2 - Installer PHP

Ubuntu 22.04 est livré avec PHP 8.1 par défaut. Vous pouvez l’installer en exécutant la commande suivante.

$ sudo apt install php-fpm php-cli php-mysqlnd php-mbstring php-xml php-gd

Nous avons installé les extensions MySQL, CLI, GD, Mbstring et XML de PHP. Vous pouvez installer d’autres extensions selon vos besoins.

Pour rester toujours sur la dernière version de PHP ou si vous souhaitez installer plusieurs versions de PHP, ajoutez le dépôt PHP d’Ondrej.

Ajoutez le dépôt PHP d’Ondrej.

$ sudo add-apt-repository ppa:ondrej/php

Maintenant, vous pouvez installer n’importe quelle version de PHP.

$ sudo apt install php8.0-fpm php8.0-cli

Vérifiez la version de PHP installée.

$ php --version
PHP 8.1.2 (cli) (built: Jun 13 2022 13:52:54) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.2, Copyright (c), by Zend Technologies

Étape 3 - Installer MySQL

Ubuntu 22.04 est livré avec la dernière version de MySQL. Vous pouvez l’installer avec une seule commande.

$ sudo apt install mysql-server

Vérifiez la version de MySQL.

$ mysql --version
mysql  Ver 8.0.29-0ubuntu0.22.04.2 for Linux on x86_64 ((Ubuntu))

Cette étape est nécessaire pour les versions de MySQL 8.0.28 et supérieures. Entrez dans le shell MySQL.

$ sudo mysql

Exécutez la commande suivante pour définir le mot de passe de votre utilisateur root. Assurez-vous qu’il contient un mélange de chiffres, de majuscules, de minuscules et de caractères spéciaux.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourPassword12!';

Quittez le shell.

mysql> exit

Exécutez le script d’installation sécurisée de MySQL.

$ sudo mysql_secure_installation

Vous serez invité à installer le composant de validation des mots de passe. Il vérifie la force des mots de passe utilisés dans MySQL. Appuyez sur Y pour l’installer.

Ensuite, vous serez invité à définir le niveau de la politique de validation des mots de passe. Choisissez 2 car c’est le plus fort.

Ensuite, entrez votre mot de passe root. Appuyez sur N pour refuser de le changer.

Appuyez sur Y pour supprimer les utilisateurs anonymes, interdire les connexions root à distance, supprimer la base de données de test et recharger les tables de privilèges.

Étape 4 - Configurer MySQL

Connectez-vous au shell MySQL. Entrez votre mot de passe root lorsque vous y êtes invité.

$ sudo mysql -u root -p

Créez une base de données d’exemple.

mysql> CREATE DATABASE exampledb;

Créez un compte utilisateur SQL.

mysql> CREATE USER 'exampleuser'@'localhost' IDENTIFIED BY 'YourPassword2!';

Accordez tous les privilèges sur la base de données à l’utilisateur.

mysql> GRANT ALL PRIVILEGES ON exampledb.* TO 'exampleuser'@'localhost';

Rafraîchissez les privilèges des utilisateurs.

mysql> FLUSH PRIVILEGES;

Quittez le shell.

mysql> exit

Reconnectons-nous au shell MySQL en utilisant le nouvel utilisateur créé.

$ sudo mysql -u exampleuser -p

Créez une table de test.

mysql> CREATE TABLE exampledb.name_list ( sno INT AUTO_INCREMENT, content VARCHAR(255), PRIMARY KEY(sno) );

Insérez des données de test.

mysql> INSERT INTO exampledb.name_list (content) VALUES ("Navjot");

Répétez la commande ci-dessus plusieurs fois pour ajouter plus d’entrées. Exécutez la commande suivante pour vérifier le contenu de la table.

mysql> SELECT * FROM exampledb.name_list;

Vous recevrez la sortie suivante.

+-----+---------+
| sno | content |
+-----+---------+
|   1 | Navjot  |
|   2 | Adam    |
|   3 | Josh    |
|   4 | Peter   |
+-----+---------+
4 rows in set (0.00 sec)

Quittez le shell MySQL.

mysql> exit

Étape 5 - Installer Nginx

Ubuntu 22.04 est livré avec une version plus ancienne de Nginx. Pour installer la dernière version, vous devez télécharger le dépôt officiel de Nginx.

Importez la clé de signature de Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Ajoutez le dépôt pour la version stable de Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

Mettez à jour les dépôts système.

$ sudo apt update

Installez Nginx.

$ sudo apt install nginx

Vérifiez l’installation.

$ nginx -v
nginx version: nginx/1.22.0

Étape 6 - Configurer PHP-FPM

Ouvrez php.ini pour l’édition.

$ sudo nano /etc/php/8.1/fpm/php.ini

Pour définir les tailles de téléchargement de fichiers, changez les valeurs des variables upload_max_filesize et post_max_size.

upload_max_filesize = 50M
...
post_max_size = 50M

Configurez la limite de mémoire de PHP en fonction des ressources et des exigences de votre serveur.

memory_limit = 256M

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

Ouvrez le fichier /etc/php/8.0/fpm/pool.d/www.conf.

$ sudo nano /etc/php/8.0/fpm/pool.d/www.conf

Nous devons définir l’utilisateur/groupe Unix des processus PHP sur nginx. Trouvez les lignes user=www-data et group=www-data dans le fichier et changez-les en nginx.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = nginx
group = nginx
...

De plus, trouvez les lignes listen.owner=www-data et listen.group=www-data dans le fichier et changez-les en nginx.

listen.owner = nginx
listen.group = nginx

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

Redémarrez le processus PHP-fpm.

$ sudo systemctl restart php8.1-fpm

Étape 7 - Installer phpMyAdmin

Téléchargez le fichier d’archive de phpMyAdmin pour la langue anglaise.

$ wget https://files.phpmyadmin.net/phpMyAdmin/5.2.0/phpMyAdmin-5.2.0-english.tar.gz

Créez un répertoire public pour le site.

$ sudo mkdir /var/www/html/example.com -p

Extrayez l’archive dans le répertoire public.

$ sudo tar -xzvf phpMyAdmin-5.2.0-english.tar.gz -C /var/www/example.com

Passez au répertoire public.

$ cd /var/www/html/example.com

Renommez le répertoire extrait en quelque chose d’obscur pour améliorer la sécurité.

$ sudo mv phpMyAdmin-5.2.0-english sm175

Étape 8 - Configurer phpMyAdmin

Copiez le fichier de configuration d’exemple.

$ sudo cp sm175/config.sample.inc.php sm175/config.inc.php

Ouvrez le fichier de configuration pour l’édition.

$ sudo nano sm175/config.inc.php

Trouvez la ligne $cfg['blowfish_secret'] = ''; et entrez une chaîne aléatoire de 32 caractères pour l’authentification basée sur les cookies.

Vous pouvez utiliser le générateur de blowfish en ligne de phpSolved ou le faire via la ligne de commande.

Copiez la valeur et collez-la comme indiqué.

$cfg['blowfish_secret'] = 'Tc/HfLPBOAPxJ-rhQP}HJoZEK69c3j:m';

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

Changez la propriété du site et de phpMyAdmin au serveur Nginx.

$ sudo chown -R nginx:nginx /var/www/html/example.com

Supprimez le répertoire de configuration de phpMyAdmin.

$ sudo rm -rf /var/www/html/example.com/sm175/setup

Étape 9 - Configurer Opcache

Opcache est le système de mise en cache de PHP. Il fonctionne en sauvegardant le bytecode de script précompilé en mémoire, donc chaque fois qu’un utilisateur visite une page, elle se charge plus rapidement. Opcache est installé par défaut. Pour vérifier, vérifiez la version de PHP.

$ php --version
PHP 8.1.2 (cli) (built: Jun 13 2022 13:52:54) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.2, Copyright (c), by Zend Technologies

Cela nous dit qu’Opcache est installé et disponible. Dans le cas où il ne s’affiche pas ici, vous pouvez l’installer manuellement en exécutant la commande suivante.

$ sudo apt install php-opcache

Pour changer les paramètres d’Opcache, ouvrez le fichier /etc/php/8.1/fpm/conf.d/10-opcache.ini pour l’édition.

$ sudo nano /etc/php/8.1/fpm/conf.d/10-opcache.ini

Les paramètres suivants devraient vous aider à commencer à utiliser Opcache et sont généralement recommandés pour de bonnes performances. Vous pouvez activer une configuration en la décommentant en supprimant le point-virgule devant.

opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

Étape 10 - Installer Certbot pour SSL

Nous devons installer Certbot pour générer des certificats SSL gratuits offerts par Let’s Encrypt.

Vous pouvez soit installer Certbot en utilisant le dépôt d’Ubuntu, soit obtenir la dernière version en utilisant l’outil Snapd. Nous allons utiliser la version Snapd.

Ubuntu 22.04 est livré avec Snapd installé par défaut. Exécutez les commandes suivantes pour vous assurer que votre version de Snapd est à jour.

$ sudo snap install core
$ sudo snap refresh core

Installez Certbot.

$ sudo snap install --classic certbot

Utilisez la commande suivante pour vous assurer que la commande Certbot peut être exécutée en créant un lien symbolique vers le répertoire /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Étape 11 - Tester un site de démonstration

Créer le site

Créez et ouvrez une page de test pour l’édition.

$ sudo nano /var/www/html/example.com/index.php

Collez le code suivant dedans.

Liste des membres
    "; foreach($db->query("SELECT content FROM $table") as $row) { echo "
  1. " . $row['content'] . "
  2. "; } echo "
"; } catch (PDOException $e) { print "Erreur!: " . $e->getMessage() . "
"; die(); }

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

Créer un certificat SSL

Exécutez la commande suivante pour générer un certificat SSL.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d example.com

La commande ci-dessus téléchargera un certificat dans le répertoire /etc/letsencrypt/live/example.com sur votre serveur.

Générez un certificat de groupe Diffie-Hellman.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Ouvrez le fichier /etc/letsencrypt/renewal/example.com.conf pour l’édition.

$ sudo nano /etc/letsencrypt/renewal/example.com.conf

Collez le code suivant en bas.

pre_hook = systemctl stop nginx
post_hook = systemctl start nginx

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

Nous avons généré le certificat SSL en utilisant l’option autonome de Certbot. Il exécute son serveur Web pour créer le certificat, ce qui signifie que Nginx doit être arrêté pendant le renouvellement. Les commandes pre_hook et post_hook s’exécutent avant et après le renouvellement pour arrêter et redémarrer automatiquement le serveur Nginx, nécessitant ainsi aucune intervention manuelle.

Pour vérifier si le renouvellement SSL fonctionne correctement, effectuez un essai à sec du processus.

$ sudo certbot renew --dry-run

Si vous ne voyez aucune erreur, vous êtes prêt. Votre certificat se renouvellera automatiquement.

Configurer Nginx

Créez et ouvrez le fichier /etc/nginx/conf.d/example.conf pour l’édition.

$ sudo nano /etc/nginx/conf.d/example.conf

Collez le code suivant dedans.

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  example.com;

    access_log  /var/log/nginx/example.com.access.log;
    error_log   /var/log/nginx/example.com.error.log;

    ssl_certificate      /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;

    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    root /var/www/html/example.com;

    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # Passer les scripts PHP au serveur FastCGI
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

# imposer HTTPS
server {
    listen       80;
    listen       [::]:80;
    server_name  example.com;
    return 301   https://$host$request_uri;
}

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

Ouvrez le fichier /etc/nginx/nginx.conf pour l’édition.

$ sudo nano /etc/nginx/nginx.conf

Ajoutez la ligne suivante avant la ligne include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

Vérifiez votre configuration Nginx.

$ sudo nginx -t

Si vous ne voyez aucune erreur, cela signifie que vous êtes prêt à partir. Démarrez le serveur Nginx.

$ sudo systemctl start nginx

Chargez votre site Web en visitant https://example.com dans votre navigateur et vous verrez la page suivante.

Sortie du site de test LEMP

Vous pouvez accéder à votre installation de phpMyAdmin en visitant l’URL https://example.com/sm175 dans votre navigateur. Vous pouvez soit entrer votre utilisateur root, soit l’utilisateur créé précédemment pour vous connecter.

Conclusion

Cela conclut notre tutoriel où vous avez appris à configurer une pile LEMP sur un serveur Ubuntu 22.04 et à créer un site de démonstration. Si vous avez des questions, posez-les dans les commentaires ci-dessous.

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.