LEMP est un acronyme qui représente la pile logicielle suivante :Linux noyau, Nginx serveur Web, MariaDB base de données (ou MySQL ), et le PHP langage de programmation côté serveur. Ce logiciel est aujourd'hui largement utilisé sur les serveurs sur Internet pour fournir des sites Web dynamiques ou des applications Web interactives.
Nginx est un serveur Web moderne et économe en ressources qui est activement développé et est le deuxième serveur Web le plus utilisé sur Internet après le serveur HTTP Apache. Il est particulièrement rapide car il utilise une approche asynchrone et pilotée par les événements pour traiter les demandes.
Ce tutoriel vous montre comment installer et configurer la pile LEMP (Nginx avec MariaDB et PHP 7) sur la dernière version de Debian 10.
CONFIGURATIONS
- La dernière version du système d'exploitation Debian 10, qui peut être obtenue à partir du lien suivant https://www.debian.org/CD/http-ftp/, installée à partir de zéro sur un VPS, une machine virtuelle ou directement sur une machine dédiée.
- Accès direct à la console du serveur ou à une connexion SSH distante.
- Une interface réseau configurée avec une adresse IP statique pour la machine
- Un nom de domaine public enregistré avec des enregistrements DNS A et CNAME (www) configurés côté serveur de noms. Dans ce guide, nous utilisons le domaine example.com comme exemple.
Étape 1 :configuration initiale
La première étape consiste à vous connecter avec root ou avec un utilisateur disposant des privilèges root sur votre système et à mettre à jour les composants Debian 10 (mises à niveau du noyau, mises à jour de packages et correctifs de sécurité) en exécutant les commandes suivantes.
sudo apt update sudo apt upgrade sudo apt dist-upgrade
Ensuite, assurez-vous d'ajouter un nom descriptif pour le nom d'hôte de votre machine en exécutant la commande ci-dessous. Ensuite, vous devrez redémarrer le système afin d'appliquer le nouveau nom d'hôte en conséquence.
sudo hostnamectl set-hostname hostname.yourdomain.com
sudo init 6
Ensuite, allez-y et installez les utilitaires net-tools wget, curl et bash-completion afin de les utiliser plus tard pour administrer facilement votre serveur Debian.
sudo apt install net-tools sudo wget curl bash-completion
Étape 2 :Installez le serveur Web Nginx
Nginx est un serveur Web moderne et économe en ressources utilisé pour afficher des pages Web aux visiteurs sur Internet. Installez le serveur Web Nginx à partir du référentiel Debian 10 en exécutant la commande ci-dessous dans la console de votre serveur.
sudo apt-get install nginx
Comme indiqué dans l'image ci-dessus, le gestionnaire de packages apt vérifiera les dépendances supplémentaires du package et vous demandera si vous acceptez de poursuivre le processus d'installation. Répondez par oui (y ) afin d'installer Nginx.
Ensuite, exécutez netstat afin d'afficher les sockets réseau sur votre système et de vérifier si le démon nginx écoute sur le port 80/TCP. Alternativement, vous pouvez émettre systemctl afin de vérifier l'état du démon nginx comme illustré dans l'image ci-dessous.
sudo netstat -tlp sudo netstat –tlpn sudo systemctl status nginx.service
Une fois que le serveur nginx est opérationnel sur votre système, lancez ifconfig commande afin d'afficher les informations des interfaces réseau et de lister les adresses IP de votre machine. Ensuite, ouvrez un navigateur et visitez la page Web par défaut de Nginx via le protocole HTTP en ajoutant l'adresse IP dans votre navigateur. Le message « Bienvenue à Nginx ! » devrait s'afficher dans la fenêtre de votre navigateur.
http://www.example.com
ou
http://192.168.0.100
Étape 3 :Activer le protocole Nginx HTTP/2.0
Par défaut, les dernières versions des binaires Nginx fournies par les référentiels Debian 10 sont construites avec le protocole HTTP/2.0. HTTP/2.0 est intégré aux protocoles TSL/SSL et peut améliorer la vitesse de chargement des pages Web via des transactions sécurisées.
Tous les navigateurs modernes, tels que Chrome ou Firefox, devraient prendre en charge ce protocole par défaut. Cependant, notez que les navigateurs Microsoft Internet Explorer et Microsoft Edge ne peuvent pas encore analyser le protocole http2.
Pour activer le protocole HTTP/2.0 dans Nginx sur Debian 10, vous devez apporter quelques modifications au fichier de configuration Nginx par défaut ou créer un nouveau fichier de configuration et ajouter le bloc de code TLS pour les serveurs 443. Pour ce faire, créez d'abord une sauvegarde de la configuration par défaut des sites Nginx disponibles en exécutant la commande suivante. Confirmez que la sauvegarde a réussi en répertoriant le contenu du répertoire sites-available.
sudo cp /etc/nginx/sites-available/default{,.backup}
ls /etc/nginx/sites-available/
Ensuite, créez un fichier de configuration Nginx TLS à l'aide d'un éditeur de texte et ajoutez le contenu suivant.
sudo nano /etc/nginx/sites-available/default-ssl
ssl par défaut extrait de fichier :
server { listen 443 ssl http2 default_server; listen [::]:443 ssl http2 default_server; #server_name www.domain.tld; server_name _; root /var/www/html; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; #SSL Certificates ssl_certificate "/etc/nginx/ssl/cert.pem"; ssl_certificate_key "/etc/nginx/ssl/privekey.pem"; ssl_dhparam /etc/nginx/ssl/dhparam.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; add_header Strict-Transport-Security "max-age=31536000; #includeSubDomains" always; location / { index index.php index.html index.htm; try_files $uri $uri/ /index.php?$args $uri/ =404; } set $cache_uri $request_uri; location ~ /.well-known { allow all; } location ~ \.php$ { include snippets/fastcgi-php.conf; # # # With php-fpm (or other unix sockets): fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; # # With php-cgi (or other tcp sockets): # fastcgi_pass 127.0.0.1:9000; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} }
La déclaration qui permet l'utilisation du protocole HTTP/2.0 est représentée par le mot http2 à partir de la ligne ci-dessous.
listen 443 ssl http2 default_server;
Si les navigateurs de vos visiteurs ne prennent pas en charge le protocole HTTP2, supprimez le http2 mot de vos configurations de serveur afin de désactiver le protocole et de redémarrer le service nginx pour appliquer les modifications.
Si vous avez un domaine enregistré ou si vous utilisez un hébergement virtuel basé sur des adresses IP, vous devez ajouter votre nom de domaine ou votre adresse IP après le nom_du_serveur directive comme indiqué dans l'exemple ci-dessous.
server_name www.example.com example.com;
Une fois que vous avez terminé de modifier le fichier de configuration par défaut de Nginx avec les paramètres ci-dessus
Configurer SSL dans Nginx
Dans le fichier de configuration TSL ci-dessus de nginx, nous avons spécifié le chemin du certificat et de la clé TLS. Puisque nous n'avons pas encore installé les clés dans votre système, entrez la commande suivante pour générer le fichier et la clé du certificat SSL auto-signé. Lors de la génération du certificat SSL, une série de questions vous sera posée. Entrez le code à deux chiffres de votre pays, état ou province, le nom de votre ville, le nom de votre organisation, le nom de l'unité de votre organisation, le nom commun de votre serveur et une adresse e-mail valide. Vous devez vous assurer de définir le nom commun afin qu'il corresponde à l'enregistrement FQDN de votre ordinateur à partir du serveur DNS ou à l'adresse IP de votre serveur utilisé pour accéder au site Web. Le certificat et la clé sont stockés dans un nouveau répertoire sous le répertoire nginx nommé ssl, comme illustré dans la capture d'écran suivante.
sudo mkdir /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/privekey.pem -out /etc/nginx/ssl/cert.pem
ls /etc/nginx/ssl/
Générez également un nouveau chiffrement Diffie-Hellman fort, qui se trouve dans le fichier de configuration ci-dessus sur ssl_dhparam ligne de déclaration, en exécutant la commande ci-dessous :
sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
Enfin, après avoir généré la clé Diffie-Hellman, activez le fichier de configuration TLS en créant un lien symbolique pour default-ssl fichier de configuration de sites-available répertoire vers sites activés répertoire en exécutant la commande suivante.
ln -s /etc/nginx/sites-available/default-ssl /etc/nginx/sites-enabled/
Ensuite, testez le fichier de configuration Nginx pour détecter les erreurs de syntaxe et, si tout va bien, redémarrez le démon Nginx afin d'appliquer toutes les modifications en exécutant les commandes ci-dessous.
sudo nginx -t
sudo systemctl restart nginx.service
Vérifier si la configuration SSL a réussi
Afin de confirmer si le serveur Web Nginx est lié au port SSL, émettez la commande netstat et vérifiez si le port 443 est affiché en mode d'écoute.
netstat -tlpn | grep nginx
La capture d'écran ci-dessous illustre les étapes ci-dessus.
Ensuite, accédez à votre nom de domaine ou à l'adresse IP de votre serveur via le protocole HTTP à partir d'un navigateur pour afficher la page par défaut de nginx. Étant donné que vous utilisez des certificats auto-signés, une erreur devrait s'afficher dans votre navigateur. Confirmez l'erreur afin de passer à la page principale par défaut de nginx.
Dans le cas où Nginx ne fournit pas un index.html par défaut page dans le répertoire webroot, lancez la commande suivante pour créer la page d'index.
echo "test page" | tee /var/www/html/index.html
Afin de confirmer la présence du protocole HTTP/2.0 annoncé par Nginx, lancez la commande ci-dessous. Recherchez h2 mot dans les protocoles annoncés par le serveur.
openssl s_client -connect localhost:443 -nextprotoneg ''
Vous pouvez également visualiser l'état de la connexion et vérifier si le protocole http2 est annoncé par Nginx depuis le navigateur Chrome en appuyant sur la touche de fonction F12 et demander la page. Pour afficher le protocole utilisé par la requête, allez dans l'onglet Réseau, faites un clic droit sur le menu Type et cochez Protocole déposé. Le protocole HTTP2 doit être affiché sous la forme h2 dans la colonne du protocole actuel, comme illustré dans la capture d'écran ci-dessous.
Étape 4 :Installez PHP 7
Le serveur Web Nginx peut servir du contenu Web dynamique à l'aide d'un interpréteur de langage de programmation PHP via le gestionnaire de processus PHP FastCGI auquel Nginx transmet les demandes de traitement. Le gestionnaire de processus FastCGI peut être obtenu en installant le php-fpm paquet pré-compilé offert par les dépôts officiels Debian 9.
Afin d'installer le gestionnaire de processus php-fpm et l'interpréteur PHP7.0 dans le système avec les packages supplémentaires qui permettront à PHP de communiquer avec le serveur Web Nginx, lancez la commande ci-dessous sur la console de votre serveur :
sudo apt installer php7.3 php7.3-fpm php7.3-curl php7.3-gd
Démarrer PHP-FPM
Une fois l'interpréteur PHP 7.3 installé avec succès sur votre système, démarrez et vérifiez le démon php7.3-fpm en exécutant la commande ci-dessous :
sudo systemctl start php7.3-fpm
sudo systemctl status php7.3-fpm
Dans le fichier de configuration TLS ci-dessus de Nginx, nous avons déjà ajouté les configurations de bloc pour le gestionnaire de processus PHP FastCGI afin de servir du contenu dynamique. Le bloc de code qui permet à Nginx d'utiliser l'interpréteur PHP est illustré dans l'extrait ci-dessous, donc aucune étape n'est nécessaire pour modifier le fichier de configuration Nginx TSL. Le signe hashtag # du début des lignes dans la capture d'écran ci-dessous sont des commentaires. Les lignes commentées des fichiers de configuration sont ignorées par défaut par le serveur Web Nginx.
location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.3-fpm.sock; }
Tester la configuration PHP
Afin de tester et de valider si Nginx peut correctement transmettre les fichiers php au processeur PHP, créez un PHP info.php testez le fichier de configuration en lançant la commande ci-dessous
sudo su -c 'echo "<?php phpinfo(); ?>" > /var/www/html/info.php'
Ensuite, visitez la page d'informations php dans votre navigateur Web en accédant au nom de domaine ou à l'adresse IP publique de votre serveur suivi de /info.php comme indiqué dans l'image ci-dessous.
https://www.example.com/info.php
ou
http://192.168.0.100/info.php
Vous pouvez également vérifier si le protocole HTTP/2.0 est annoncé par le serveur en recherchant la ligne $_SERVER[‘SERVER_PROTOCOL’] sur les variables PHP.
Pour installer d'autres modules PHP7.3, exécutez la recherche apt php7.3 pour trouver un module PHP spécifique et l'installer. Si vous envisagez d'installer un système de gestion de contenu, tel que WordPress, installez ces modules supplémentaires :
sudo apt install php7.3-mcrypt php7.3-mbstring
Cependant, les modules PHP nouvellement installés ne sont pas activés par défaut sur votre système. Pour les activer, redémarrez le service PHP-FPM.
sudo systemctl restart php7.3-fpm.service
Étape 5 :Installer la base de données MariaDB
Enfin, la dernière pièce du puzzle de la pile LAMP manque dans la base de données. Le composant LEMP de la base de données MariaDB est utilisé pour stocker les enregistrements dans des tables et des colonnes. Il va gérer dynamiquement les données d'une application web. Pour installer MariaDB, exécutez la commande suivante dans la console de votre serveur. Ensuite, redémarrez le démon PHP FPM pour activer le module PHP-MySQL requis pour accéder à la base de données.
sudo apt install mariadb-server mariadb-client php7.0-mysql
sudo systemctl restart php7.0-fpm.service
Par défaut, le compte root du système ou les utilisateurs disposant de privilèges root peuvent accéder à la base de données sans fournir de mot de passe. Pour modifier ce comportement afin que MySQL demande un mot de passe chaque fois qu'un utilisateur du système tente d'accéder à la base de données, connectez-vous à la base de données MySQL à l'aide de l'interface de ligne de commande avec les privilèges root et exécutez les commandes suivantes dans la console MySQL :
sudo mysql
MariaDB> use mysql; MariaDB> update user set plugin='' where User='root'; MariaDB> flush privileges; MariaDB> exit
Définir le mot de passe root dans MariaDB
À l'étape suivante, assurez-vous de sécuriser MariaDB en exécutant le script de sécurité mysql_secure_installation. Il est fourni par le package d'installation des dépôts Debian. Lors de l'exécution, le script posera une série de questions conçues pour sécuriser la base de données MariaDB. Tels que :pour modifier le mot de passe root MySQL, supprimer les utilisateurs anonymes, désactiver les connexions root à distance et supprimer la base de données de test. Exécutez le script en exécutant la commande ci-dessous. Répondez oui à toutes les questions posées afin de sécuriser complètement le démon MySQL. Utilisez la sortie de script ci-dessous, sauf comme guide.
sudo mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. You already have a root password set, so you can safely answer 'n'. Change the root password? [Y/n] y New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. ... Success! By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] y ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] y ... Success! By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
Enfin, afin de tester les fonctionnalités de MariaDB, connectez-vous à la base de données depuis la console et exécutez la commande suivante. Une liste des bases de données par défaut doit être affichée dans la console MariaDB. Quittez la console MariaDB avec exit déclaration.
mysql -u root –p
MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+ 3 rows in set (0.00 sec) MariaDB [(none)]> exit
C'est tout! Le serveur Web Nginx, la base de données MariaDB et le langage de programmation PHP sont installés sur votre machine Debian 10. Vous pouvez maintenant commencer à créer des sites Web dynamiques ou des applications Web pour vos visiteurs.