Comment installer Linux, Nginx, MariaDB, PHP (pile LEMP) sur Debian 10

introduction

La pile logicielle LEMP est un groupe de logiciels pouvant servir à gérer des pages Web dynamiques et des applications Web. Le nom «LEMP» est un acronyme qui décrit un système d’exploitation L inux, avec un serveur Web (* E *) Nginx. Les données de base sont stockées dans une base de données M ariaDB et le traitement dynamique est géré par P HP.

Bien que cette pile logicielle inclue généralement * MySQL * en tant que système de gestion de base de données, certaines distributions Linux, y compris Debian, utilisent https://mariadb.org [MariaDB] en remplacement immédiat de MySQL.

Dans ce guide, vous allez installer une pile LEMP sur un serveur Debian 10 en utilisant MariaDB comme système de gestion de base de données.

Conditions préalables

Pour compléter ce guide, vous devez avoir accès à un serveur Debian 10. Ce serveur doit avoir un utilisateur régulier configuré avec les privilèges sudo + et un pare-feu activé avec + ufw +. Pour le configurer, vous pouvez suivre notre guide Initial Initial Server avec Debian 10.

Étape 1 - Installation du serveur Web Nginx

Afin de servir les pages Web aux visiteurs de votre site, nous allons utiliser Nginx, un serveur Web populaire, réputé pour ses performances et sa stabilité.

Tous les logiciels que vous utiliserez pour cette procédure proviendront directement des référentiels de paquets par défaut de Debian. Cela signifie que vous pouvez utiliser la suite de gestion de paquets + apt + pour terminer l’installation.

Comme il s’agit de la première fois que vous utiliserez + apt + pour cette session, vous devriez commencer par mettre à jour votre index de paquet local. Vous pouvez ensuite installer le serveur:

sudo apt update
sudo apt install nginx

Sur Debian 10, Nginx est configuré pour s’exécuter lors de l’installation.

Si le pare-feu + ufw + est actif, vous devrez autoriser les connexions à Nginx. Vous devez activer le profil le plus restrictif qui autorisera le trafic que vous souhaitez. Puisque vous n’avez pas encore configuré SSL pour votre serveur, il vous suffit pour l’instant d’autoriser le trafic HTTP sur le port + 80 +.

Vous pouvez l’activer en tapant:

sudo ufw allow 'Nginx HTTP'

Vous pouvez vérifier le changement en tapant:

sudo ufw status

Vous devriez voir le trafic HTTP autorisé dans la sortie affichée:

OutputStatus: active

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

Maintenant, testez si le serveur est opérationnel en accédant au nom de domaine de votre serveur ou à l’adresse IP publique de votre navigateur Web. Si vous n’avez pas de nom de domaine pointé sur votre serveur et que vous ne connaissez pas l’adresse IP publique de votre serveur, vous pouvez le trouver en tapant l’un des éléments suivants dans votre terminal:

ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

Cela imprimera quelques adresses IP. Vous pouvez essayer chacune d’elles à tour de rôle dans votre navigateur Web.

Tapez l’une des adresses que vous recevez dans votre navigateur Web. Cela devrait vous amener à la page de destination par défaut de Nginx:

http://

image: https: //assets.digitalocean.com/articles/lemp_debian8/THcJfIl.png [page par défaut de Nginx]

Si vous voyez la page ci-dessus, vous avez correctement installé Nginx.

Étape 2 - Installation de MariaDB

Maintenant que vous avez un serveur Web opérationnel, vous devez installer le système de base de données pour pouvoir stocker et gérer les données de votre site.

Dans Debian 10, le métapaquet + mysql-server +, qui était traditionnellement utilisé pour installer le serveur MySQL, a été remplacé par + default-mysql-server +. Ce méta-paquet fait référence à MariaDB, un fork de la communauté du serveur MySQL d’origine par Oracle, et est actuellement le serveur de base de données compatible MySQL par défaut disponible sur les référentiels de gestionnaires de paquets basés sur Debian.

Cependant, pour une compatibilité à long terme, il est recommandé d’installer MariaDB au lieu du méta-paquet en utilisant le package actuel du programme, + mariadb-server +.

Pour installer ce logiciel, lancez:

sudo apt install mariadb-server

Une fois l’installation terminée, il est recommandé d’exécuter un script de sécurité pré-installé avec MariaDB. Ce script supprime certains paramètres par défaut non sécurisés et verrouille l’accès à votre système de base de données. Démarrez le script interactif en exécutant:

sudo mysql_secure_installation

Ce script vous guidera à travers une série d’invites dans lesquelles vous pourrez apporter des modifications à votre configuration de MariaDB. La première invite vous demandera de saisir le mot de passe actuel * racine de la base de données *. Cela ne doit pas être confondu avec la * racine système *. L’utilisateur * racine de la base de données * est un utilisateur administrateur disposant de tous les privilèges sur le système de base de données. Comme vous venez d’installer MariaDB et que vous n’avez encore apporté aucune modification à la configuration, ce mot de passe sera vide. Il vous suffit donc d’appuyer sur les touches + ENTER + à l’invite.

L’invite suivante vous demande si vous souhaitez configurer un mot de passe * racine de base de données *. Comme MariaDB utilise une méthode d’authentification spéciale pour l’utilisateur * root *, qui est généralement plus sûre que l’utilisation d’un mot de passe, vous n’avez pas besoin de la définir maintenant. Tapez + A + puis appuyez sur + ENTER.

À partir de là, vous pouvez appuyer sur + Y + puis sur + + ENTER + `pour accepter les valeurs par défaut pour toutes les questions suivantes. Cela supprimera les utilisateurs anonymes et la base de données de test, désactivera la connexion * root * à distance et chargera ces nouvelles règles afin que MariaDB respecte immédiatement les modifications que vous avez apportées. + Lorsque vous avez terminé, connectez-vous à la console MariaDB en tapant:

sudo mariadb

Cela connectera le serveur MariaDB en tant qu’utilisateur * root * de la base de données administrative, ce qui est déduit de l’utilisation de + sudo + lors de l’exécution de cette commande. Vous devriez voir la sortie comme ceci:

OutputWelcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 74
Server version: 10.3.15-MariaDB-1 Debian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

Notez qu’il n’est pas nécessaire de fournir un mot de passe pour vous connecter en tant qu’utilisateur * root *. Cela fonctionne car la méthode d’authentification par défaut de l’utilisateur administratif de MariaDB est + unix_socket + au lieu de + mot de passe +. Même si cela peut sembler être un problème de sécurité au départ, le serveur de base de données est davantage sécurisé, car les seuls utilisateurs autorisés à se connecter en tant qu’utilisateur * root * MariaDB sont les utilisateurs système disposant des privilèges sudo se connectant à partir de la console ou via une application en cours d’exécution. avec les mêmes privilèges. Concrètement, cela signifie que vous ne pourrez pas utiliser la base de données administrative * root * user pour vous connecter à partir de votre application PHP.

Pour une sécurité accrue, il est préférable d’avoir des comptes d’utilisateur dédiés avec des privilèges moins étendus, configurés pour chaque base de données, en particulier si vous envisagez d’héberger plusieurs bases de données sur votre serveur. Pour illustrer une telle configuration, 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 des valeurs différentes. + Pour créer une nouvelle base de données, exécutez la commande suivante à partir de votre console MariaDB:

CREATE DATABASE ;

Vous pouvez maintenant créer un nouvel utilisateur et lui attribuer tous les privilèges sur la base de données personnalisée que vous venez de créer. La commande suivante définit le mot de passe de cet utilisateur comme «++», mais vous devez remplacer cette valeur par un mot de passe sécurisé de votre choix.

GRANT ALL ON .* TO ''@'localhost' IDENTIFIED BY '' WITH GRANT OPTION;

Cela donnera à l’utilisateur * example_user * tous les privilèges sur la base de données * example_database *, tout en empêchant cet utilisateur de créer ou de modifier d’autres bases de données sur votre serveur.

Purgez les privilèges pour vous assurer qu’ils sont enregistrés et disponibles dans la session en cours:

FLUSH PRIVILEGES;

Ensuite, quittez le shell MariaDB:

exit

Vous pouvez tester si le nouvel utilisateur dispose des autorisations appropriées en vous reconnectant à la console MariaDB, cette fois à l’aide des informations d’identification de l’utilisateur personnalisé:

mariadb -u  -p

Notez l’indicateur + -p + dans cette commande, qui vous demandera le mot de passe utilisé lors de la création de l’utilisateur * example_user *. Après vous être connecté à la console MariaDB, vérifiez que vous avez accès à la base de données * example_database *:

SHOW DATABASES;

Cela vous donnera la sortie suivante:

Output+--------------------+
| Database           |
+--------------------+
|    |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)

Pour quitter le shell MariaDB, tapez:

exit

À ce stade, votre système de base de données est configuré et vous pouvez passer à l’installation de PHP, le dernier composant de la pile LEMP.

Étape 3 - Installation de PHP pour le traitement

Nginx est installé pour servir votre contenu et MySQL est installé pour stocker et gérer vos données. Maintenant, vous pouvez installer PHP pour traiter le code et générer du contenu dynamique pour le serveur Web.

Tandis qu’Apache incorpore l’interpréteur PHP dans chaque requête, Nginx nécessite un programme externe pour gérer le traitement PHP et joue le rôle de pont entre l’interpréteur PHP lui-même et le serveur Web. Cela permet d’améliorer les performances globales de la plupart des sites Web basés sur PHP, mais cela nécessite une configuration supplémentaire. Vous devrez installer + php-fpm +, qui signifie «gestionnaire de processus PHP fastCGI», et dire à Nginx de transmettre les requêtes PHP à ce logiciel pour traitement. En outre, vous aurez besoin de + php-mysql et d’un module PHP permettant à PHP de communiquer avec des bases de données MySQL. Les paquets PHP de base seront automatiquement installés en tant que dépendances.

Pour installer les paquets + php-fpm et` + php-mysql`, lancez:

sudo apt install php-fpm php-mysql

Vous avez maintenant vos composants PHP installés. Ensuite, vous allez configurer Nginx pour les utiliser.

Étape 4 - Configuration de Nginx pour utiliser le processeur PHP

Lors de l’utilisation du serveur Web Nginx, server blocks (similaire aux hôtes virtuels dans Apache) peut être utilisé pour encapsuler les détails de la configuration et héberger plusieurs domaines sur un seul serveur. Dans ce guide, nous utiliserons * votre_domaine * comme exemple de nom de domaine. Pour en savoir plus sur la configuration d’un nom de domaine avec DigitalOcean, consultez notre introduction à DigitalOcean DNS.

Sur Debian 10, Nginx a un bloc de serveur activé par défaut et est configuré pour servir les documents à partir d’un répertoire situé ` / / var / www / html + `. Bien que cela fonctionne bien pour un seul site, il peut devenir difficile à gérer si vous hébergez plusieurs sites. Au lieu de modifier `+ / var / www / html +, créons une structure de répertoires dans + / var / www + pour le site Web * votre_domaine *, en laissant + / var / www / html + à la place être servi si une demande du client ne correspond à aucun autre site.

Créez le répertoire Web racine pour * votre_domaine * comme suit:

sudo mkdir /var/www/

Ensuite, attribuez la propriété du répertoire avec la variable d’environnement $ USER, qui devrait référencer votre utilisateur système actuel:

sudo chown -R $USER:$USER /var/www/

Ensuite, ouvrez un nouveau fichier de configuration dans le répertoire + sites-available + de Nginx à l’aide de votre éditeur de ligne de commande préféré. Ici, nous allons utiliser + nano +:

sudo nano /etc/nginx/sites-available/

Cela créera un nouveau fichier vierge. Collez-le dans la configuration de base:

/ etc / nginx / sites-available / votre_domaine

server {
   listen 80;
   listen [::]:80;

   root /var/www/;
   index index.php index.html index.htm;

   server_name ;

   location / {
       try_files $uri $uri/ =404;
   }

   location ~ \.php$ {
       include snippets/fastcgi-php.conf;
       fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
   }
}

Il s’agit d’une configuration de base qui écoute sur le port + 80 + et sert les fichiers à partir de la racine Web que vous venez de créer. Il ne répondra qu’aux requêtes adressées à l’hôte ou à l’adresse IP fournies après + nom_serveur +, et tous les fichiers se terminant par '+ .php + seront traités par + php-fpm + `avant que Nginx n’envoie les résultats à l’utilisateur.

Lorsque vous avez terminé, enregistrez et fermez le fichier. Si vous avez utilisé + nano + pour créer le fichier, faites-le en tapant + CTRL + + + + X + puis + y + et + ENTER + `pour confirmer.

Activez votre configuration en vous connectant au fichier de configuration à partir du répertoire + sites + enabled + de Nginx:

sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/

Cela indiquera à Nginx d’utiliser la configuration lors de son prochain rechargement. Vous pouvez tester votre configuration pour les erreurs de syntaxe en tapant:

sudo nginx -t

Si des erreurs sont signalées, revenez à votre fichier de configuration pour en examiner le contenu avant de continuer.

Lorsque vous êtes prêt, rechargez Nginx pour apporter les modifications:

sudo systemctl reload nginx

Vous allez ensuite créer un fichier dans votre nouveau répertoire racine Web pour tester le traitement de PHP.

Étape 5 - Créer un fichier PHP pour tester la configuration

Votre pile LEMP devrait maintenant être complètement configurée. Vous pouvez le tester pour vérifier que Nginx peut correctement transmettre les fichiers + .php + à votre processeur PHP.

Vous pouvez le faire en créant un fichier test PHP dans la racine de votre document. Ouvrez un nouveau fichier appelé + info.php + dans la racine de votre document dans votre éditeur de texte:

nano /var/www//info.php

Tapez ou collez les lignes suivantes dans le nouveau fichier. Ceci est un code PHP valide qui retournera des informations sur votre serveur:

/var/www/votre_domaine/info.php

<?php
phpinfo();

Lorsque vous avez terminé, enregistrez et fermez le fichier en tapant + CTRL + + + X + puis + y + et + ENTER + pour confirmer.

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:///info.php

Vous verrez une page Web contenant des informations détaillées sur votre serveur:

image: https: //assets.digitalocean.com/articles/lemp_debian10/phpinfo.png [informations de page PHP]

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 Debian. Vous pouvez utiliser + rm + pour supprimer ce fichier:

rm /var/www//info.php

Vous pouvez toujours régénérer ce fichier si vous en avez besoin plus tard. Nous allons ensuite tester la connexion à la base de données du côté de PHP.

Étape 6 - Test de la connexion à la base de données à partir de PHP (facultatif)

Si vous souhaitez vérifier si PHP est capable de se connecter à MariaDB et d’exécuter des requêtes de base de données, vous pouvez créer une table de test avec des données factices et interroger son contenu à l’aide d’un script PHP.

Tout d’abord, connectez-vous à la console MariaDB avec l’utilisateur de la base de données que vous avez créé dans le lien: # step-2-% E2% 80% 94-installer-mariadb [Étape 2] de ce guide:

mariadb -u  -p

Créez une table nommée * todo_list *. Depuis la console MariaDB, exécutez l’instruction suivante:

CREATE TABLE . (
   item_id INT AUTO_INCREMENT,
   content VARCHAR(255),
   PRIMARY KEY(item_id)
);

Maintenant, insérez quelques lignes de contenu dans la table de test. Vous voudrez peut-être répéter la commande suivante plusieurs fois, en utilisant différentes valeurs:

INSERT INTO . (content) VALUES ("");

Pour confirmer que les données ont bien été enregistrées dans votre table, exécutez:

SELECT * FROM .;

Vous verrez la sortie suivante:

Output+---------+--------------------------+
| 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 vérifié que vous avez des données valides dans votre table de test, vous pouvez quitter la console MariaDB:

exit

Vous pouvez maintenant créer le script PHP qui se connectera à MariaDB et demandera votre contenu. Créez un nouveau fichier PHP dans votre répertoire racine Web personnalisé à l’aide de votre éditeur préféré. Nous allons utiliser + nano + pour cela:

nano /var/www//

Ajoutez le contenu suivant à votre script PHP:

<?php
$user = "";
$password = "";
$database = "";
$table = "";

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 une fois l’édition terminée.

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 + / todo_list.php +:

http:///todo_list.php

Vous devriez voir une page comme celle-ci, montrant le contenu que vous avez inséré dans votre table de test:

image: https: //assets.digitalocean.com/articles/lemp_debian10/todo_list.png [Exemple de liste de tâches PHP]

Cela signifie que votre environnement PHP est prêt à se connecter et à interagir avec votre serveur MariaDB.

Conclusion

Dans ce guide, vous avez créé une base flexible pour servir les sites Web et les applications PHP à vos visiteurs, en utilisant Nginx comme serveur Web. Vous avez configuré Nginx pour gérer les requêtes PHP via + php-fpm +, et vous avez également configuré une base de données MariaDB pour stocker les données de votre site Web.

Pour améliorer encore votre configuration actuelle, vous pouvez install Composer pour la gestion des dépendances et des paquets dans PHP, et vous pouvez également installer un certificat OpenSSL pour votre site Web en utilisant Let’s Encrypt.