One place for hosting & domains

      pile

      Comment installer Linux, Nginx, MySQL, PHP (pile LEMP) sur Ubuntu 20.04


      Introduction

      La pile logicielle LEMP est un groupe de logiciels qui peuvent être utilisés pour servir des pages web dynamiques et des applications web écrites en PHP. Il s’agit d’un acronyme qui décrit un système d’exploitation Linux, avec un serveur Web Nginx (prononcé « Engine-X »). Les données backend sont stockées dans la base de données MySQL et le traitement dynamique est géré par PHP.

      Ce guide explique comment installer une pile LEMP sur un serveur Ubuntu 20.04. Le système d’exploitation Ubuntu prend en charge la première exigence. Nous allons vous décrire comment faire fonctionner les autres composants.

      Conditions préalables

      Pour suivre ce tutoriel, vous devez avoir accès à un serveur Ubuntu 20.04 en tant qu’utilisateur non-root ​​​​sud​o​​​ normal, et le pare-feu de votre serveur doit être activé. Pour configurer cela, vous pouvez notre guide de configuration initiale du serveur pour Ubuntu 20.04.

      Étape 1 – Installation du serveur web Nginx

      Afin d’afficher les pages web aux visiteurs de notre site, nous allons utiliser Nginx, un serveur web très performant. Nous allons utiliser le gestionnaire de packages apt pour obtenir ce logiciel.

      Etant donné que c’est la première fois que nous allons utiliser apt pour cette session, commencez par mettre à jour l’index des packages de votre serveur. Ensuite, vous pouvez utiliser apt install pour installer Nginx :

      • sudo apt update
      • sudo apt install nginx

      Lorsque vous y êtes invité, entrez y pour confirmer que vous voulez installer nginx. Une fois l’installation terminée, le serveur Web Nginx sera actif et s’exécutera sur votre serveur Ubuntu 20.04.

      Si le pare-feu ufw est activé, comme le recommande notre guide de configuration initiale du serveur, vous devez autoriser les connexions à Nginx. Lors de l’installation, Nginx enregistre quelques profils d’application UFW différents. Pour vérifier quels profils UFW sont disponibles, exécutez :

      Output

      Available applications: Nginx Full Nginx HTTP Nginx HTTPS OpenSSH

      Nous vous recommandons d’activer le profil le plus restrictif qui autorisera tout de même le trafic dont vous avez besoin. Puisque vous n’avez pas configuré SSL pour votre serveur dans ce guide, vous aurez seulement besoin d’autoriser le trafic HTTP régulier sur le port 80.

      Procédez à son activation en tapant :

      • sudo ufw allow 'Nginx HTTP'

      Vous pouvez vérifier le changement en exécutant :

      Le résultat de cette commande vous montrera que le trafic HTTP est désormais autorisé :

      Output

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

      Une fois la nouvelle règle de pare-feu ajoutée, vous pouvez tester si le serveur est opérationnel en accédant au nom de domaine ou à l’adresse IP publique de votre serveur dans votre navigateur Web.

      Si vous n’avez pas de nom de domaine pointé vers votre serveur et que vous ne connaissez pas l’adresse IP publique de votre serveur, vous pouvez la trouver en exécutant la commande suivante :

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

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

      Vous pouvez également vérifier quelle est l’adresse IP accessible, telle qu’elle est vue depuis d’autres endroits sur Internet :

      Saisissez l’adresse que vous recevez dans votre navigateur web : elle vous conduira à la page d’accueil par défaut de Nginx :

      http://server_domain_or_IP
      

      Page par défaut de Nginx

      Si vous voyez cette page, cela signifie que vous avez correctement installé Nginx et activé le trafic HTTP pour votre serveur web.

      Étape 2 — Installer MySQL

      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. MySQL est un système de gestion de base de données populaire utilisé dans les environnements PHP.

      Là encore, utilisez apt pour acquérir et installer ce logiciel :

      • sudo apt install mysql-server

      Lorsque vous y êtes invité, confirmez l’installation en tapant Y, puis ENTRÉE.

      Une fois l’installation terminée, il est recommandé d’exécuter un script de sécurité qui vient préinstallé avec MySQL. Ce script supprimera certains paramètres par défaut peu sûrs et verrouillera l’accès à votre système de base de données. Lancez le script interactif en exécutant :

      • sudo mysql_secure_installation

      Il vous sera demandé si vous souhaitez configurer le VALIDATE PASSWORD PLUGIN.

      Note : L’activation de cette fonction est en quelque sorte une question de jugement. Si elle est activée, les mots de passe qui ne correspondent pas aux critères spécifiés seront rejetés par MySQL avec une erreur. Laisser la validation désactivée est sans risque, mais vous devez toujours utiliser des mots de passe forts et uniques pour les identifiants de la base de données.

      Répondez Y pour oui, ou tout autre chose pour continuer sans activer.

      VALIDATE PASSWORD PLUGIN can be used to test passwords
      and improve security. It checks the strength of password
      and allows the users to set only those passwords which are
      secure enough. Would you like to setup VALIDATE PASSWORD plugin?
      
      Press y|Y for Yes, any other key for No:
      

      Si vous répondez « oui », il vous sera demandé de choisir un niveau de validation du mot de passe. Gardez à l’esprit que si vous entrez 2 pour le niveau le plus fort, vous recevrez des erreurs lorsque vous tenterez de définir un mot de passe qui ne contient pas de chiffres, de lettres majuscules et minuscules et de caractères spéciaux, ou qui est basé sur des mots communs du dictionnaire.

      There are three levels of password validation policy:
      
      LOW    Length >= 8
      MEDIUM Length >= 8, numeric, mixed case, and special characters
      STRONG Length >= 8, numeric, mixed case, special characters and dictionary              file
      
      Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
      

      Que vous ayez ou non choisi de configurer le VALIDATE PASSWORD PLUGIN, votre serveur vous demandera ensuite de sélectionner et de confirmer un mot de passe pour l’utilisateur root de MySQL. Il ne faut pas confondre ce dernier avec le root du système. L’utilisateur root de la base de données est un utilisateur administratif disposant de tous les privilèges sur le système de base de données. Même si la méthode d’authentification par défaut pour l’utilisateur root de MySQL dispense de l’utilisation d’un mot de passe, même si celui-ci est défini, vous devez définir ici un mot de passe fort pour plus de sécurité. Nous en parlerons dans un instant.

      Si vous avez activé la validation du mot de passe, la force du mot de passe root que vous venez d’entrer vous sera indiquée et votre serveur vous demandera si vous voulez continuer avec ce mot de passe. Si vous êtes satisfait de votre mot de passe actuel, saisissez Y pour « oui » à l’invite :

      Estimated strength of the password: 100
      Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
      

      Pour le reste des questions, appuyez sur Y et appuyez sur la touche ENTRÉE à chaque invite. Cela supprimera les utilisateurs anonymes et la base de données de test, désactivera les connexions root à distance, et chargera ces nouvelles règles afin que MySQL respecte immédiatement les modifications que vous avez apportées.

      Lorsque vous avez terminé, vérifiez si vous êtes capable de vous connecter à la console MySQL en tapant :

      Cela permettra de se connecter au serveur MySQL en tant que root de l’utilisateur de la base de données administrative, ce qui est déduit par l’utilisation de sudo lors de l’exécution de cette commande. Vous devriez voir une sortie comme celle-ci :

      Output

      Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 22 Server version: 8.0.19-0ubuntu5 (Ubuntu) Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql>

      Pour quitter la console MySQL, tapez :

      Notez que vous n’avez pas eu besoin de fournir un mot de passe pour vous connecter en tant qu’utilisateur root, même si vous en avez défini un lors de l’exécution du script mysql_secure_installation. En effet, la méthode d’authentification par défaut pour l’utilisateur administratif de MySQL est unix_socket au lieu du password. Même si cela peut sembler être un problème de sécurité au premier abord, cela rend le serveur de base de données plus sûr car les seuls utilisateurs autorisés à se connecter en tant qu’utilisateur MySQL root sont les utilisateurs du système ayant des privilèges sudo qui se connectent depuis la console ou par le biais d’une application fonctionnant avec les mêmes privilèges. Concrètement, cela signifie que vous ne pourrez pas utiliser l’utilisateur root de la base de données administrative pour vous connecter à partir de votre application PHP. La définition d’un mot de passe pour le compte root MySQL fonctionne comme une sauvegarde, dans le cas où la méthode d’authentification par défaut est changée de unix_socket au password.

      Pour une sécurité accrue, il est préférable de créer des comptes d’utilisateurs dédiés avec des privilèges moins étendus pour chaque base de données, surtout si vous prévoyez d’héberger plusieurs bases de données sur votre serveur.

      Note : Au moment de la rédaction de ce document, la bibliothèque MySQL PHP native mysqlnd ne prend pas en charge caching_sha2_authentification,la méthode d’authentification par défaut pour MySQL 8. Pour cette raison, lorsque vous créez des utilisateurs de base de données pour des applications PHP sur MySQL 8, vous devez vous assurer qu’ils sont configurés pour utiliser le mot de passe mysql_native_password à la place. Nous démontrerons comment le faire dans l’Étape 6.

      Votre serveur MySQL est maintenant installé et sécurisé. Ensuite, nous allons installer PHP, le dernier composant de la pile LEMP.

      Étape 3 – Installation de PHP

      Vous avez installé Nginx pour servir votre contenu et MySQL pour stocker et gérer vos données. Vous pouvez maintenant installer PHP pour traiter le code et générer du contenu dynamique pour le serveur web.

      Alors qu’Apache intègre l’interpréteur PHP dans chaque requête, Nginx nécessite un programme externe pour gérer le traitement PHP et agir comme un pont entre l’interpréteur PHP lui-même et le serveur web. Cela permet d’obtenir de meilleures performances globales dans la plupart des sites web basés sur PHP, mais cela nécessite une configuration supplémentaire. Vous devrez installer php-fpm (PHP fastCGI process manager) et indiquer à Nginx qu’il doit transmettre les requêtes PHP à ce logiciel pour qu’elles soient traitées. En outre, vous aurez besoin de php-mysql​​​​, un module PHP qui permet à PHP de communiquer avec des bases de données basées sur MySQL. Les packages PHP de base seront automatiquement installés en tant que dépendances.

      Pour installer les packages php-fpm et php-mysql, exécutez :

      • sudo apt install php-fpm php-mysql

      Lorsque vous y êtes invité, tapez Y et ENTER pour confirmer l’installation.

      Maintenant, vos composants PHP sont installés. Ensuite, vous allez configurer Nginx afin de pouvoir les utiliser.

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

      Avec le serveur Web Nginx, vous pouvez créer des blocs de serveur (similaires aux hôtes virtuels dans Apache) pour encapsuler les détails de configuration et héberger plusieurs domaines sur un seul serveur. Dans ce guide, nous utiliserons l’exemple de nom de domaine your_domain. Pour en savoir plus sur la mise en place d’un nom de domaine avec DigitalOcean, voir notre introduction à DigitalOcean DNS. 

      Sur Ubuntu 20.04, Nginx dispose d’un bloc serveur activé par défaut qui est configuré pour servir des documents à partir d’un répertoire à /var/www/html. Même si cela fonctionne bien pour un seul site, cela peut devenir difficile à gérer si vous hébergez plusieurs sites. Au lieu de modifier /var/www/html, nous allons créer une structure de répertoire au sein de /var/www pour le site Web your_domain, en laissant /var/www/html en place comme répertoire par défaut à servir si une demande du client ne correspond à aucun autre site.

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

      • sudo mkdir /var/www/your_domain

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

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

      Ouvrez ensuite un nouveau fichier de configuration dans le répertoire sites-available de Nginx en utilisant votre éditeur de ligne de commande préféré. Ici, nous utiliserons nano :

      • sudo nano /etc/nginx/sites-available/your_domain

      Cela créera un nouveau fichier vierge. Collez dans la configuration suivante :

      /etc/nginx/sites-available/your_domain

      server {
          listen 80;
          server_name your_domain www.your_domain;
          root /var/www/your_domain;
      
          index index.html index.htm index.php;
      
          location / {
              try_files $uri $uri/ =404;
          }
      
          location ~ .php$ {
              include snippets/fastcgi-php.conf;
              fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
           }
      
          location ~ /.ht {
              deny all;
          }
      
      }
      
      
      

      Voici ce que font chacune de ces directives et blocs de localisation :

      • listen — Définit le port que Nginx écoutera. Dans ce cas, l’écoute se fera sur le port 80, le port par défaut de HTTP.
      • root — Définit la racine du document dans laquelle les fichiers servis par ce site Web sont stockés.
      • index — Définit dans quel ordre Nginx priorisera les fichiers d’index pour ce site Web. Il est courant de répertorier les fichiers index.html avec une priorité plus élevée que les fichiers index.php, pour permettre de configurer rapidement une page de destination de maintenance dans les applications PHP. Vous pouvez ajuster ces paramètres pour mieux répondre aux besoins de votre application.
      • server_name — Définit les noms de domaine et / ou adresses IP auxquels ce bloc serveur doit répondre. Pointez cette directive sur le nom de domaine ou l’adresse IP publique de votre serveur.
      • location / —Le premier bloc de localisation comprend une directive try_files, qui vérifie l’existence de fichiers ou de répertoires correspondant à une demande d’URI. Si Nginx n’arrive pas à trouver la ressource appropriée, il renverra une erreur 404.
      • location ~ .php$ — Ce bloc de localisation gère le traitement PHP réel en pointant Nginx vers le fichier de configuration fastcgi-php.conf et vers le fichier php7.4-fpm.sock, qui indique quel socket est associé à php-fpm.
      • location ~ /.ht — Le dernier bloc de localisation s’occupe des fichiers .htaccess que Nginx ne traite pas. En ajoutant la directive deny all, les fichiers .htaccess qui se retrouvent dans la racine du document ne seront pas présentés aux visiteurs.

      Une fois que vous avez terminé vos modifications, enregistrez et fermez le fichier. Si vous utilisez nano, vous pouvez le faire en appuyant sur CTRL + X, puis y et ENTER pour confirmer.

      Activez votre configuration en établissant un lien vers le fichier de configuration à partir du répertoire sites-enabled de Nginx :

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

      Cela indiquera à Nginx d’utiliser la configuration lors du prochain rechargement. Vous pouvez vérifier si votre configuration contient des fautes de syntaxe en tapant :

      Si des erreurs sont signalées, revenez à votre fichier de configuration pour corriger son contenu avant de continuer.

      Une fois que vous êtes prêt, rechargez Nginx pour appliquer les modifications :

      • sudo systemctl reload nginx

      Votre nouveau site web est maintenant actif, mais le root web /var/www/your_domain est toujours vide. Créez un fichier index.html à cet endroit afin que nous puissions tester si le bloc de serveur fonctionne comme prévu :

      • nano /var/www/your_domain/index.html

      Incluez le contenu suivant dans ce dossier :

      /var/www/your_domain/index.html

      <html>
        <head>
          <title>your_domain website</title>
        </head>
        <body>
          <h1>Hello World!</h1>
      
          <p>This is the landing page of <strong>your_domain</strong>.</p>
        </body>
      </html>
      

      Maintenant, allez dans votre navigateur et accédez au nom de domaine ou à l’adresse IP de votre serveur, comme indiqué dans la directive server_name de votre fichier de configuration de bloc de serveur :

      http://server_domain_or_IP
      

      Vous verrez une page comme celle-ci :

      Nginx server block

      Si vous voyez cette page, cela signifie que votre bloc de serveur Nginx fonctionne comme prévu.

      Vous pouvez laisser ce fichier en place en tant que page d’accueil temporaire pour votre demande jusqu’à ce que vous créiez un fichier index.php pour le remplacer. Une fois que vous aurez fait cela, n’oubliez pas de supprimer ou de renommer le fichier index.html du root de votre document car il aurait la priorité sur un fichier index.php par défaut.

      Votre pile LEMP est maintenant entièrement configurée. A l’étape suivante, nous allons créer un script PHP pour tester que Nginx est vraiment capable de gérer les fichiers .php au sein de votre site Web nouvellement configuré.

      Étape 5 – Tester PHP avec Nginx

      Maintenant, votre pile LEMP devrait être entièrement installée. Vous pouvez la tester pour vérifier que Nginx peut correctement transmettre les fichiers .php à votre processeur PHP.

      Vous pouvez le faire en créant un fichier PHP de test 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/your_domain/info.php

      Saisissez ou collez les lignes suivantes dans le nouveau fichier. Il s’agit d’un code PHP valide qui renverra des informations sur votre serveur :

      /var/www/your_domain/info.php

      <?php
      phpinfo();
      

      Une fois que 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 consultant le nom de domaine ou l’adresse IP publique que vous avez défini dans votre fichier de configuration Nginx, suivi de /info.php :

      http://server_domain_or_IP/info.php
      

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

      PHPInfo Ubuntu 20.04

      Après avoir vérifié les informations pertinentes sur votre serveur PHP par le biais de 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 Ubuntu. Vous pouvez utiliser rm pour supprimer ce fichier :

      • sudo rm /var/www/your_domain/info.php

      Vous pourrez toujours générer de nouveau ce fichier si vous en avez besoin plus tard.

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

      Si vous souhaitez tester si PHP est capable de se connecter à MySQL 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 à partir d’un script PHP. Avant cela, nous devons créer une base de données test et un nouvel utilisateur MySQL correctement configuré pour y accéder.

      Au moment de la rédaction du présent document, la bibliothèque MySQL PHP native mysqlnd ne prend pas en charge caching_sha2_authentification, la méthode d’authentification par défaut pour MySQL 8. Nous devrons créer un nouvel utilisateur avec le mot de passe mysql_native_password afin de pouvoir se connecter à la base de données MySQL à partir de PHP. 

      Nous allons créer une base de données appelée exemple_database et un utilisateur nommé example_user, mais vous pouvez remplacer ces noms par des valeurs différentes. 

      Tout d’abord, connectez-vous à la console MySQL en utilisant le compte root :

      Pour créer une nouvelle base de données, exécutez la commande suivante depuis votre console MySQL :

      • CREATE DATABASE example_database;

      Vous pouvez maintenant créer un utilisateur et lui accorder tous les privilèges sur la base de données personnalisée que vous venez de créer.

      La commande suivante crée un nouvel utilisateur nommé example_user, en utilisant mysql_native_password comme méthode d’authentification par défaut. Nous définissons le mot de passe de cet utilisateur comme password, mais vous devez remplacer cette valeur par un mot de passe sécurisé de votre choix. 

      • CREATE USER 'example_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

      Nous devons maintenant donner à cet utilisateur une autorisation sur la base de données example_database : 

      • GRANT ALL ON example_database.* TO 'example_user'@'%';

      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.

      Maintenant, quittez le shell MySQL avec :

      Vous pouvez tester si le nouvel utilisateur a les bonnes autorisations en vous connectant à nouveau à la console MySQL, cette fois-ci en utilisant les identifiants personnalisés de l’utilisateur :

      Remarquez le drapeau -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 MySQL, confirmez que vous avez accès à la base de données example_database :

      Cela donnera la sortie suivante :

      Output

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

      Ensuite, nous allons créer une table de test appelée todo_list. Depuis la console MySQL, lancez la déclaration suivante :

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

      Insérez quelques lignes de contenu dans la table de test. Vous pouvez répéter la commande suivante plusieurs fois, en utilisant des valeurs différentes :

      • INSERT INTO example_database.todo_list (content) VALUES ("My first important item");

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

      • SELECT * FROM example_database.todo_list;

      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 confirmé que vous avez des données valides dans votre table de test, vous pouvez quitter la console MySQL :

      Vous pouvez maintenant créer le script PHP qui se connectera à MySQL et interrogera votre contenu. Créez un nouveau fichier PHP dans votre répertoire root personnalisé en utilisant votre éditeur préféré. Nous utiliserons nano pour cela :

      • nano /var/www/your_domain/todo_list.php

      Le script PHP suivant se connecte à la base de données MySQL et interroge le contenu de la table todo_list affichant les résultats dans une liste. S’il y a un problème avec la connexion à la base de données, il y aura une exception. Copiez ce contenu dans votre script todo_list.php : 

      /var/www/your_domain/todo_list.php

      <?php
      $user = "example_user";
      $password = "password";
      $database = "example_database";
      $table = "todo_list";
      
      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 lorsque vous avez fini de le modifier.

      Vous pouvez maintenant accéder à cette page dans votre navigateur web en consultant le nom de domaine ou l’adresse IP publique configurée de votre site web, suivi de /todo_list.php :

      http://server_domain_or_IP/todo_list.php
      

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

      Exemple todo list PHP

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

      Conclusion

      Dans ce guide, nous avons établi une base souple pour offrir des sites web et des applications PHP à vos visiteurs en utilisant Nginx comme serveur web et MySQL comme système de base de données.

      À partir de là, vous pouvez effectuer certain nombre d’étapes supplémentaires. Par exemple, vous devez vous assurer que les connexions à votre serveur sont sécurisées. Pour cela, vous pourriez sécuriser votre installation Nginx avec Let’s Encrypt. En suivant ce guide, vous allez acquérir un certificat TLS/SSL gratuit pour votre serveur, ce qui lui permettra de servir du contenu sur HTTPS.



      Source link

      Comment installer la pile Linux, Nginx, MySQL, PHP sur CentOS 8 (LEMP)


      Introduction

      La pile logicielle LEMP est un groupe de logiciels qui peuvent être utilisés pour servir des pages web dynamiques et des applications web écrites en PHP. Le nom « LEMP » est un acronyme qui décrit un système d’exploitation Linux avec un serveur web Nginx (prononcé « Engine-X »). Les données backend sont stockées dans une base de données MariaDB et le traitement dynamique est géré par PHP.

      La couche de base de données dans une pile LEMP est généralement un serveur de base de données MySQL, mais avant la sortie de CentOS 8, MySQL n’était pas disponible à partir des référentiels CentOS par défaut. Pour cette raison, MariaDB, un fork communautaire de MySQL, est devenu une alternative largement acceptée à MySQL comme système de base de données par défaut pour les piles LEMP sur les machines CentOS. MariaDB fonctionne en remplacement du serveur MySQL d’origine, ce qui signifie en pratique que vous pouvez passer à MariaDB sans avoir à modifier la configuration ou le code de votre application.

      Dans ce guide, vous allez installer une pile LEMP sur un serveur CentOS 8. Bien que MySQL soit disponible à partir des référentiels par défaut de CentOS 8, ce guide présente le processus de mise en place d’une pile LEMP avec MariaDB comme système de gestion de base de données.

      Conditions préalables

      Pour suivre ce guide, vous devrez avoir accès à un serveur CentOS 8 en tant qu’utilisateur non root avec des privilèges sudo, et vous aurez besoin d’un pare-feu actif installé sur votre serveur. Pour le mettre en place, vous pouvez suivre notre Guide de configuration initiale du serveur pour CentOS 8.

      Étape 1 – Installation du serveur web Nginx

      Afin d’afficher les pages web aux visiteurs de notre site, nous allons utiliser Nginx, un serveur web très performant. Nous utiliserons le gestionnaire de packages ​​​​dnf​ (qui est le nouveau gestionnaire de packages par défaut sur CentOS 8) pour installer ce logiciel.

      Installez le package nginx avec :

      Lorsque vous y êtes invité, entrez y pour confirmer que vous voulez installer nginx.

      Une fois l’installation terminée, exécutez la commande suivante pour activer et démarrer le serveur :

      • sudo systemctl start nginx

      Si vous avez activé le pare-feu firewalld conformément à notre guide de configuration initiale du serveur, vous devrez autoriser les connexions à Nginx. La commande suivante permettra d’activer en permanence les connexions HTTP, qui fonctionnent par défaut sur le port 80 :

      • sudo firewall-cmd --permanent --add-service=http

      Pour vérifier que le changement a été appliqué, vous pouvez exécuter :

      • sudo firewall-cmd --permanent --list-all

      Vous verrez une sortie de ce type :

      Output

      public target: default icmp-block-inversion: no interfaces: sources: services: cockpit dhcpv6-client http ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

      Vous devrez recharger la configuration du pare-feu pour que les changements prennent effet :

      • sudo firewall-cmd --reload

      Avec l’ajout de la nouvelle règle de pare-feu, vous pouvez vérifier si le serveur est opérationnel en accédant à l’adresse IP publique ou au nom de domaine de votre serveur depuis votre navigateur web.

      Remarque : si vous utilisez DigitalOcean comme fournisseur d’hébergement DNS, vous pouvez consulter la documentation de nos produits pour obtenir des instructions détaillées sur la façon de configurer un nouveau nom de domaine et de le faire pointer vers votre serveur.

      Si vous n’avez pas de nom de domaine pointé vers votre serveur et que vous ne connaissez pas l’adresse IP publique de votre serveur, vous pouvez la trouver en exécutant la commande suivante :

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

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

      Vous pouvez également vérifier quelle est l’adresse IP accessible, telle qu’elle est vue depuis d’autres endroits sur Internet :

      Saisissez l’adresse que vous recevez dans votre navigateur web et elle vous conduira à la page d’accueil par défaut de Nginx :

      Page Nginx par défaut CentOS 8

      Si vous voyez cette page, c’est que votre serveur web est maintenant correctement installé.

      Étape 2 – Installation de MariaDB

      Maintenant que vous avez un serveur web opérationnel, vous devez installer un système de base de données pour pouvoir stocker et gérer les données de votre site. Nous allons installer MariaDB, un fork communautaire du serveur MySQL original d’Oracle.

      Pour installer ce logiciel, exécutez :

      • sudo dnf install mariadb-server

      Lorsque l’installation est terminée, vous pouvez activer et démarrer le serveur MariaDB avec :

      • sudo systemctl start mariadb

      Pour améliorer la sécurité de votre serveur de base de données, il est recommandé d’exécuter un script de sécurité, qui est pré-installé avec MariaDB. Ce script supprimera certains paramètres par défaut peu sûrs et verrouillera l’accès à votre système de base de données. Lancez le script interactif en exécutant :

      • sudo mysql_secure_installation

      Ce script vous guidera à travers une série d’invites où vous pourrez modifier la configuration de votre système MariaDB. La première invite vous demandera de saisir le mot de passe actuel de l’utilisateur root de la base de données. Il ne faut pas le confondre avec l’utilisateur root du système. L’utilisateur root de la base de données est un utilisateur administratif 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 pas encore apporté de modifications à la configuration, ce mot de passe sera vide, il suffit donc d’appuyer sur ENTER (ENTRÉE) à l’invite.

      L’invite suivante vous demande si vous souhaitez créer un mot de passe pour l’utilisateur root de la 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 le définir maintenant. Tapez N et appuyez ensuite sur ENTER (ENTRÉE).

      À partir de là, vous pouvez appuyer sur Y puis sur ENTER (ENTRÉE) afin d’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 le serveur respecte immédiatement les modifications que vous avez apportées.

      Lorsque vous avez terminé, connectez-vous à la console MariaDB en saisissant :

      Cette action entraînera la connexion au serveur MariaDB en tant qu’utilisateur root de la base de données administrative, ce qui est déduit par l’utilisation de sudo lors de l’exécution de cette commande. Vous devriez voir une sortie comme celle-ci :

      Output

      Welcome to the MariaDB monitor. Commands end with ; or g. Your MariaDB connection id is 9 Server version: 10.3.17-MariaDB MariaDB Server 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 que vous n’avez pas eu besoin 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 pour l’utilisateur administratif de MariaDB est unix_socket au lieu de password. Même si cela peut sembler être un problème de sécurité au premier abord, cela rend le serveur de base de données plus sûr, car les seuls utilisateurs autorisés à se connecter en tant qu’utilisateur root de MariaDB sont les utilisateurs du système avec des privilèges sudo se connectant depuis la console ou par le biais d’une application fonctionnant avec les mêmes privilèges. Concrètement, cela signifie que vous ne pourrez pas utiliser l’utilisateur root de la base de données administrative pour vous connecter à partir de votre application PHP.

      Pour une sécurité accrue, il est préférable de créer des comptes d’utilisateurs dédiés avec des privilèges moins étendus pour chaque base de données, surtout si vous prévoyez 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 depuis votre console MariaDB :

      • CREATE DATABASE example_database;

      Vous pouvez maintenant créer un utilisateur et lui accorder 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 password, mais vous devez remplacer cette valeur par un mot de passe sécurisé de votre choix :

      • GRANT ALL ON example_database.* TO 'example_user'@'localhost' IDENTIFIED BY 'password' 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 :

      Ensuite, quittez le shell MariaDB :

      Vous pouvez tester si le nouvel utilisateur a les bonnes permissions en vous connectant à nouveau à la console MariaDB, en utilisant cette fois les identifiants personnalisés :

      Notez la présence d’un indicateur -p dans cette commande, qui vous demandera le mot de passe que vous avez choisi lors de la création de l’utilisateur example_user. Après vous être connecté à la console MariaDB, confirmez que vous avez accès à la base de données example_database :

      Cela donnera la sortie suivante :

      Output

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

      Pour quitter le shell MariaDB, saisissez :

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

      Étape 3- Installation de PHP-FPM

      Vous avez installé Nginx pour servir votre contenu et MariaDB pour stocker et gérer vos données. Vous pouvez maintenant installer PHP pour traiter le code et générer du contenu dynamique pour le serveur web.

      Alors qu’Apache intègre l’interpréteur PHP dans chaque requête, Nginx nécessite un programme externe pour gérer le traitement PHP et servir de pont entre l’interpréteur PHP lui-même et le serveur web. Cela permet d’obtenir de meilleures performances globales dans la plupart des sites web basés sur PHP, mais cela nécessite une configuration supplémentaire. Vous devrez installer php-fpm (PHP fastCGI process manager) et indiquer à Nginx qu’il doit transmettre les requêtes PHP à ce logiciel pour qu’elles soient traitées. En outre, vous aurez besoin de php-mysqlnd, un module PHP qui permet à PHP de communiquer avec des bases de données basées sur MySQL. Les packages PHP de base seront automatiquement installés en tant que dépendances.

      Pour installer les packages php-fpm et php-mysql, exécutez :

      • sudo dnf install php-fpm php-mysqlnd

      Une fois l’installation terminée, vous devrez modifier le fichier /etc/php-fpm.d/www.conf afin d’ajuster quelques paramètres.

      L’éditeur de texte par défaut fourni avec CentOS 8 est vi. vi, un éditeur de texte extrêmement puissant, mais il peut être difficile à utiliser pour les utilisateurs qui manquent d’expérience. Vous pouvez installer un éditeur plus adapté, tel que nano, pour faciliter l’édition des fichiers de configuration sur votre serveur CentOS 8 :

      Ouvrez maintenant le fichier de configuration /etc/php-fpm.d/www.conf en utilisant nano ou l’éditeur de votre choix :

      • sudo nano /etc/php-fpm.d/www.conf

      Cherchez maintenant les directives user et group. Si vous utilisez nano, vous pouvez appuyer sur CTRL+W pour rechercher ces termes dans le fichier ouvert.

      /etc/php-fpm.d/www.conf

      …
      ; Unix user/group of processes
      ; Note: The user is mandatory. If the group is not set, the default user's group
      ;       will be used.
      ; RPM: apache user chosen to provide access to the same directories as httpd
      user = apache
      ; RPM: Keep a group allowed to write in log dir.
      group = apache

      Vous remarquerez que les variables user et group sont toutes deux définies sur apache. Nous devons les passer sur nginx :

      /etc/php-fpm.d/www.conf

      …
      ; RPM: apache user chosen to provide access to the same directories as httpd
      user = nginx
      ; RPM: Keep a group allowed to write in log dir.
      group = nginx

      Enregistrez et fermez le fichier lorsque vous avez fini de le modifier. Si vous utilisez nano, faites-le en appuyant sur CTRL + X, puis Y et ENTER (ENTRÉE).

      Pour activer et démarrer le service php-fpm, exécutez :

      • sudo systemctl start php-fpm

      Enfin, redémarrez le serveur web Nginx afin qu’il charge les fichiers de configuration créés par l’installation de php-fpm :

      • sudo systemctl restart nginx

      Votre serveur web est maintenant entièrement configuré. Au cours de la prochaine étape, nous créerons un script de test PHP pour nous assurer que tout fonctionne comme prévu.

      Étape 4 – Test de PHP avec Nginx

      Sous CentOS 8, l’installation par défaut de php-fpm crée automatiquement des fichiers de configuration qui permettront à votre serveur web Nginx de gérer les fichiers .php à la racine par défaut du document root dans /usr/share/nginx/html. Vous n’aurez pas besoin de modifier la configuration de Nginx pour que PHP fonctionne correctement sur votre serveur web.

      Le seul ajustement que nous ferons consistera à modifier les paramètres de permission par défaut du dossier racine du document Nginx. Ainsi, vous pourrez créer et modifier des fichiers dans ce répertoire avec votre utilisateur système habituel, sans avoir besoin de préfixer chaque commande par sudo.

      La commande suivante va changer la propriété de la racine du document Nginx par défaut au profit d’un utilisateur et d’un groupe appelés sammy. Assurez-vous donc de remplacer le nom d’utilisateur et le groupe mis en évidence dans cette commande pour refléter le nom d’utilisateur et le groupe de votre système.

      • sudo chown -R sammy.sammy /usr/share/nginx/html/

      Nous allons maintenant créer une page PHP de test pour nous assurer que le serveur web fonctionne comme prévu.

      Créez un nouveau fichier PHP appelé info.php dans le répertoire /usr/share/nginx/html :

      • nano /usr/share/nginx/html/info.php

      Le code PHP suivant affichera des informations sur l’environnement PHP en cours d’exécution sur le serveur :

      /usr/share/nginx/html/info.php

      <?php
      
      phpinfo();
      

      Lorsque vous avez terminé, enregistrez et fermez le fichier.

      Nous pouvons maintenant tester si notre serveur web peut afficher correctement le contenu généré par un script PHP. Allez dans votre navigateur et accédez au nom d’hôte ou à l’adresse IP de votre serveur, suivi de /info.php :

      http://server_host_or_IP/info.php
      

      Vous verrez une page similaire à celle-ci :

      Infos PHP par défaut CentOS 8

      Après avoir vérifié les informations pertinentes sur votre serveur PHP par le biais de 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 CentOS. Vous pouvez utiliser rm pour supprimer ce fichier :

      • rm /usr/share/nginx/html/info.php

      Vous pourrez toujours générer de nouveau ce fichier si vous en avez besoin plus tard. Ensuite, nous allons tester la connexion à la base de données depuis PHP.

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

      Pour tester si PHP est capable de se connecter à MariaDB et d’exécuter des requêtes de base de données, vous pouvez créer un tableau de test avec des données factices et interroger son contenu à partir 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éé à l’étape 2 de ce guide :

      Créez un tableau nommé todo_list. Depuis la console MariaDB, exécutez l’instruction suivante :

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

      Maintenant, insérez quelques lignes de contenu dans le tableau de test. Vous pouvez répéter la commande suivante plusieurs fois, en utilisant des valeurs différentes :

      • INSERT INTO example_database.todo_list (content) VALUES ("My first important item");

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

      • SELECT * FROM example_database.todo_list;

      Vous verrez le résultat suivant :

      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 confirmé que vous avez des données valides dans votre tableau de test, vous pouvez quitter la console MariaDB :

      Vous pouvez maintenant créer le script PHP qui se connectera à MariaDB et interrogera votre contenu. Créez un nouveau fichier PHP dans votre répertoire root personnalisé en utilisant votre éditeur préféré. Nous utiliserons nano pour cela :

      • nano /usr/share/nginx/html/todo_list.php

      Ajoutez le contenu suivant à votre script PHP :

      /usr/share/nginx/html/todo_list.php

      <?php
      $user = "example_user";
      $password = "password";
      $database = "example_database";
      $table = "todo_list";
      
      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 lorsque vous avez fini de le modifier.

      Vous pouvez maintenant accéder à cette page dans votre navigateur web en consultant le nom d’hôte ou l’adresse IP publique de votre serveur, suivi de /todo_list.php :

      http://server_host_or_IP/todo_list.php
      

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

      Exemple todo list PHP

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

      Conclusion

      Dans ce guide, vous avez construit une base flexible pour servir des sites web et des applications PHP à vos visiteurs, en utilisant Nginx comme serveur web. Vous avez configuré Nginx pour traiter les requêtes PHP via php-fpm, et vous avez également mis en place une base de données MariaDB pour stocker les données de votre site web.



      Source link

      Comment installer la pile Linux, Apache, MySQL, PHP (LAMP) sur un serveur Ubuntu 18.04


      Introduction

      Une pile “LAMP” est un groupe de logiciels libres qui sont généralement installés ensemble afin de permettre à un serveur d’héberger des sites internet dynamiques ainsi que des applications web. Le terme constitue généralement un acronyme qui représente le système d’exploitation Linux, le serveur web Apache. Les données du site sont hébergées sur une base de données MySQL, puis le contenu dynamique est traité par PHP.

      Dans ce guide, nous installerons une pile LAMP sur un serveur Ubuntu 18.04.

      Préalable

      Afin de compléter ce tutoriel, vous aurez besoin d’un serveur Ubuntu 18.04, un compte d’utilisateur non-root «sudo» activé, ainsi qu’un pare-feu de base. Cela peut être configuré en se référant à notre guide de configuration initial pour Ubuntu 18.04.

      Étape 1 — Installer Apache et mettre à jour le pare-feu.

      Le serveur Apache est parmi les serveurs web les plus populaires au monde. Il est bien documenté et a été utilisé abondamment pour la majeure partie de l’histoire de l’internet, ce qui en fait un bon choix par défaut pour héberger un site internet.

      Installer Apache à l’aide du gestionnaire de paquets d’Ubuntu, apt:

      • sudo apt update
      • sudo apt install apache2

      Puisqu’il s’agit d’une commande sudo, ces opérations sont exécutées avec les privilèges root. On vous demandera votre mot de passe d’utilisateur régulier afin de connaître vos intentions.

      Dès que vous aurez entré votre mot de passe, apt vous dira quels paquets il prévoit installer et combien d’espace il prendra sur votre disque dur. Entrez la touche Y et appuyer sur ENTER afin de continuer, et l’installation poursuivra.

      Ajuster votre pare-feu afin d’autoriser le trafic web.

      Ensuite, en présumant que vous avez suivi les instructions de configuration initiale du serveur et autorisé le pare-feu UFW, assurez-vous que votre pare-feu autorise le trafic HTTP et HTTPS. Vous pouvez vérifier que UFW possède un profil d’application pour Apache de la manière suivante :

      SortieOutput

      Available applications: Apache Apache Full Apache Secure OpenSSH

      Si vous regardez sur le profil Apache Full, il devrait y être indiqué qu’il permet le trafic aux ports 80 et 443 :

      • sudo ufw app info "Apache Full"

      SortieOutput

      Profile: Apache Full Title: Web Server (HTTP,HTTPS) Description: Apache v2 is the next generation of the omnipresent Apache web server. Ports: 80,443/tcp

      Autoriser le trafic HTTP et HTTPS entrant pour ce profil :

      • sudo ufw allow in "Apache Full"

      Vous pouvez immédiatement effectuer une vérification afin de valider que tout se soit déroulé comme prévu en visitant l’adresse IP de votre serveur public sur votre navigateur web (voir la note sous la rubrique suivante afin de voir quel est votre adresse IP, si vous ne disposez pas déjà de cette information) :

      http://your_server_ip
      

      Vous allez voir la page web par défaut du serveur Ubuntu 18.04 Apache qui s’affiche à titre d’information et à des fins d’essai. La page devrait ressembler à ceci :

      Ubuntu 18.04 Apache default

      Si vous voyez cette page, cela veut dire que votre serveur web est maintenant bien installé et qu’il est accessible à travers votre pare-feu.

      Si vous ne connaissez pas l’adresse IP publique de votre serveur, il existe différentes façons de la trouver. Normalement, il s’agit de l’adresse que vous utilisez afin de vous connecter à votre serveur via SSH.

      Il y a plusieurs façons d’effectuer cela à partir de la ligne de commande. D’abord, vous pouvez utiliser les outils iproute2 afin d’obtenir votre adresse IP en écrivant ceci :

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

      Vous devriez voir apparaître deux ou trois lignes de résultats. Ce sont tous des adresses correctes, par contre votre ordinateur ne sera peut-être qu’en mesure d’utiliser une de celles-ci, alors libre à vous d’essayer chacune d’entre elles.

      Une autre méthode consiste à utiliser l’outil curl pour contacter un correspondant externe afin qu’il vous informe comment « il » perçoit votre serveur. Cela s’effectue en demandant à un serveur spécifique quelle est votre adresse IP :

      • sudo apt install curl
      • curl http://icanhazip.com

      Indépendamment de la méthode que vous choisissez pour obtenir votre adresse IP, inscrivez-la sur la barre d’adresse de votre navigateur afin de voir la page par défaut d’Apache.

      Étape 2 — Installer MySQL

      Maintenant que votre serveur web est opérationnel, il est temps d’installer MySQL. MySQL est un système de gestion de base de données. Il sert essentiellement à organiser et donner l’accès aux bases de données au sein desquelles votre site pourra emmagasiner de l’information.

      Encore une fois, utiliser apt pour obtenir et installer ce logiciel.

      • sudo apt install mysql-server

      Note: Dans ce cas, vous n’avez pas besoin d’activer sudo apt update avant d’effectuer la commande. Cela est dû au fait que l’avez récemment activé dans les commandes ci-dessus pour installer Apache. Le paquet d’index sur votre ordinateur devrait déjà être à jour.

      Cette commande affichera également une liste des paquets qui seront installés, de même que l’espace qu’ils occuperont sur votre disque dur. Entrez la touche Y pour continuer.

      Lorsque l’installation est complétée, exécuter un script de sécurité simple qui est préinstallé avec MySQL et qui permettra de supprimer des défaillances dangereuses et puis de verrouiller l’accès à votre système de base de données. Démarrer le script interactif en exécutant la commande :

      • sudo mysql_secure_installation

      On vous demandera si vous désirez configurer le VALIDATE PASSWORD PLUGIN.

      Note: Activer cette fonctionnalité demeure une question de jugement. Lorsqu’activés, les mots de passe qui ne correspondent pas au critère spécifique seront refusés par MySQL avec un message d’erreur. Ceci engendrera des problèmes si vous utilisez un mot de passe faible conjointement à l’application qui configure automatiquement les identifiants d’utilisateurs MySQL, tels que les paquets d’Ubuntu pour phpMyAdmin. Il est sécuritaire de laisser la validation désactivée, mais vous devriez toujours utiliser un mot de passe robuste et unique pour les authentifications de base de données.

      Répondre Y pour oui, ou n’importe quelle autre commande pour continuer sans l’activer.

      VALIDATE PASSWORD PLUGIN peut être utilisé pour tester les mots de passe
      et améliorer la sécurité. Le système vérifie la sécurité du mot de passe
      et permet aux utilisateurs de définir uniquement les mots de passe qui sont
      assez bien sécurisés en demandant : Voulez-vous configurer le plug-in  - VALIDATE PASSWORD?
      Press y|Y for Yes, any other key for No:
      

      Si vous répondez “oui”, on vous demandera de choisir un niveau de validation de mot de passe. Gardez à l’esprit que si vous choisissez 2, pour le niveau le plus élevé, vous recevrez des messages d’erreur lorsque vous tenterez de définir un mot de passe qui ne contient pas de chiffre, de majuscule et de minuscule, de caractères spéciaux, ou qui s’inspire de mots communs du dictionnaire.

      Il existe trois niveaux de politique de validation du mot de passe:
      
      LOW    Length >= 8
      MEDIUM Length >= 8, numeric, mixed case, and special characters
      STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file
      
      Veuillez saisir 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
      

      Indépendamment de votre décision de configurer ou non le VALIDATE PASSWORD PLUGIN, votre serveur vous demandera de choisir et de confirmer un mot de passe pour l’utilisateur root MySQL. Il s’agit d’un compte administratif au sein de MySQL qui possède des privilèges accrus. Voyez-le comme étant similaire au compte root pour le serveur lui-même (bien que celui que vous êtes en train de configurer est un compte spécifique au sein de MySQL). Assurez-vous que vous de détenir un mot de passe robuste, unique, et de ne pas laisser l’espace vide.

      Si vous activez la validation du mot de passe, on vous indiquera la robustesse du mot de passe root que vous venez d’inscrire et votre serveur vous demandera si vous voulez le modifier. Si vous êtes satisfait de votre mot de passe, entrez N pour « non » au moment de faire le choix :

      Utiliser le mot de passe existant pour root.
      
      Force estimée du mot de passe : 100
      Changer le mot de passe pour root ? ((Press y|Y for Yes, any other key for No) : n
      

      Pour le reste des questions, entrez la touche Y et appuyer sur le bouton ENTER au moment de faire le choix. Cela supprimera certains utilisateurs anonymes ainsi que la base de données d’essai, désactivera les identifications root à distance et chargera les nouvelles règles afin que MySQL applique automatiquement les changements que vous venez d’apporter.

      Veuillez noter que pour les systèmes Ubuntu fonctionnant avec MySQL 5.7 (et les versions ultérieures), l’utilisateur root MySQL est configuré par défaut pour authentifier en utilisant le plugin auth_socket, plutôt qu’avec un mot de passe. Cela permet d’avoir une meilleure sécurité et ergonomie dans de nombreux cas, mais il peut également compliquer les choses lorsque vous devez autoriser l’ouverture d’un programme externe (ex : phpMyAdmin) afin d’accéder au serveur.

      Si vous préférez utiliser un mot de passe lorsque vous vous connectez au MySQL en tant que root, vous aurez besoin de changer le mode d’authentification de auth_socket à mysql_native_password. Pour y parvenir, ouvrez le prompt MySQL à partir de votre terminal :

      Ensuite, vérifier quel mode d’authentification chacun de vos comptes d’utilisateurs MySQL fait appel avec la commande suivante :

      • SELECT user,authentication_string,plugin,host FROM mysql.user;

      SortieOutput

      +------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)

      Dans cet exemple, vous pouvez voir que l’utilisateur root s’authentifie effectivement en utilisant le plugin auth_socket. Afin de configurer le compte root pour l’identification avec mot de passe, exécuter la commande ALTER USER ci-dessous. Assurez-vous de modifier password pour un mot de passe robuste de votre choix :

      • ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

      Ensuite, exécuter FLUSH PRIVILEGES, qui envoie un message au serveur de renouveler les tableaux d’autorisations et de mettre en application vos nouvelles modifications :

      Vérifier encore les modes d’authentifications utilisées par chacun de vos utilisateurs afin de confirmer que le root ne s’authentifie plus en utilisant le plugin auth_socket :

      • SELECT user,authentication_string,plugin,host FROM mysql.user;

      SortieOutput

      +------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)

      Vous pouvez voir dans cet exemple que l’utilisateur root de MySQL s’authentifie actuellement en utilisant un mot de passe. Une fois que vous aurez confirmé cela sur votre propre serveur, vous pouvez sortir du shell MySQL :

      À ce stade, votre système de base de données est maintenant programmé et vous pouvez poursuivre avec l’installation PHP, le dernier composant de la pile LAMP.

      Étape 3 — Installer PHP

      PHP est le composant de votre configuration qui sert de code de traitement pour afficher le contenu dynamique. Il peut exécuter des scripts, se connecter à vos bases de données MySQL afin d’obtenir de l’information et acheminer le contenu traité vers votre serveur web pour affichage.

      Encore une fois, utiliser le système apt pour installer PHP. De plus, inclure des paquets d’assistance cette fois-ci afin de permettre au code PHP de s’exécuter sous le serveur Apache et communiquer avec votre base de données MySQL :

      • sudo apt install php libapache2-mod-php php-mysql

      Cela devrait permettre d’installer PHP sans problème. Nous le mettrons à l’essai dans un moment.

      Dans la plupart des cas, vous allez vouloir modifier la façon dont Apache dessert les fichiers lorsqu’un répertoire est demandé. Actuellement, si un utilisateur demande un répertoire du serveur, Apache recherchera d’abord pour un fichier nommé index.html. Nous voulons dire au serveur web de donner priorité aux fichiers PHP, ainsi il faut exiger à Apache de regarder pour un fichier index.php en premier.

      Afin d’effectuer cela, entrez cette commande pour ouvrir le fichier dir.conf dans un éditeur de texte avec des privilèges root :

      • sudo nano /etc/apache2/mods-enabled/dir.conf

      Cela va ressembler à cela :

      /etc/apache2/mods-enabled/dir.conf

      <IfModule mod_dir.c>
          DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
      </IfModule>
      

      Déplacer le fichier d’index PHP (surligner ci-dessous) à la première position après la spécification DirectoryIndex, de la manière suivante :

      /etc/apache2/mods-enabled/dir.conf

      <IfModule mod_dir.c>
          DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
      </IfModule>
      

      Lorsque vous avez terminé, sauvegarder et fermer le fichier en appuyant sur CTRL+X. Confirmer la sauvegarde en entrant la touche Y et en appuyant sur ENTER afin de vérifier la localisation du fichier de sauvegarde.

      Ensuite, redémarrer le serveur web Apache afin que vos modifications prennent effet. Cela s’effectuera en inscrivant ceci :

      • sudo systemctl restart apache2

      Vous pouvez également vérifier le statut du service apache2 en utilisant la commande systemctl :

      • sudo systemctl status apache2

      Sample SortieOutput

      ● apache2.service - LSB: Apache2 web server Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Tue 2018-04-23 14:28:43 EDT; 45s ago Docs: man:systemd-sysv-generator(8) Process: 13581 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS) Process: 13605 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS) Tasks: 6 (limit: 512) CGroup: /system.slice/apache2.service ├─13623 /usr/sbin/apache2 -k start ├─13626 /usr/sbin/apache2 -k start ├─13627 /usr/sbin/apache2 -k start ├─13628 /usr/sbin/apache2 -k start ├─13629 /usr/sbin/apache2 -k start └─13630 /usr/sbin/apache2 -k start

      Afin d’améliorer le fonctionnement de PHP, vous avez l’option d’installer de modules supplémentaires. Pour voir les options disponibles de modules PHP et de bibliothèques, mener les résultats de apt search vers less, un récepteur qui vous laissera défiler à travers les résultats d’autres commandes :

      Utiliser les flèches afin de défiler de haut en bas, et appuyer sur Q pour quitter.

      Les résultats sont tous des composants optionnels que vous pouvez installer. Une courte description de chacun d’entre eux sera affichée :

      bandwidthd-pgsql/bionic 2.0.1+cvs20090917-10ubuntu1 amd64
        Tracks usage of TCP/IP and builds html files with graphs
      
      bluefish/bionic 2.2.10-1 amd64
        advanced Gtk+ text editor for web and software development
      
      cacti/bionic 1.1.38+ds1-1 all
        web interface for graphing of monitoring systems
      
      ganglia-webfrontend/bionic 3.6.1-3 all
        cluster monitoring toolkit - web front-end
      
      golang-github-unknwon-cae-dev/bionic 0.0~git20160715.0.c6aac99-4 all
        PHP-like Compression and Archive Extensions in Go
      
      haserl/bionic 0.9.35-2 amd64
        CGI scripting program for embedded environments
      
      kdevelop-php-docs/bionic 5.2.1-1ubuntu2 all
        transitional package for kdevelop-php
      
      kdevelop-php-docs-l10n/bionic 5.2.1-1ubuntu2 all
        transitional package for kdevelop-php-l10n
      …
      :
      

      Pour en savoir plus sur la fonctionnalité de chaque module, vous pouvez chercher sur internet pour plus d’informations à leur sujet. Une autre solution est de lire la longue description du paquet en tapant :

      Il y aura plusieurs résultats, incluant un champ intitulé Description qui présentera une explication plus détaillée de la fonctionnalité du module en question.

      Par exemple, afin de découvrir en quoi le module php-cli consiste, vous pouvez taper :

      En plus de la grande quantité d’autres informations, vous obtiendrez quelque chose qui ressemble à ceci :

      SortieOutput

      … Description: command-line interpreter for the PHP scripting language (default) This package provides the /usr/bin/php command interpreter, useful for testing PHP scripts from a shell or performing general shell scripting tasks. . PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML. . Ce paquet est un forfait de dépendances, qui dépend du défaut d'Ubuntu PHP version (currently 7.2). …

      Si, après votre recherche, vous décidez que vous voulez installer un paquet, vous pouvez le faire en utilisation la commande apt install, de la même manière que vous avez procédé pour l’autre logiciel.

      Si vous décidez que le php-cli est quelque chose dont vous avez besoin, vous pouvez taper cette commande :

      Si vous désirez installer plus d’un module, vous pouvez le faire en énumérant chacun d’entre eux, séparé d’un espace, suivant la commande apt install, comme ceci :

      • sudo apt install package1 package2 ...

      À ce stade, votre pile LAMP est installée et configurée. Cependant, avant de procéder à toute modification ou de déployer une application, il serait préférable de tester votre configuration PHP de manière proactive au cas où il y aurait un problème à traiter.

      Étape 4 — Tester le processus PHP sur votre serveur web

      Afin de tester si votre système est configuré correctement pour PHP, créer un script PHP de base appelé info.php. Afin qu’Apache puisse localiser ce fichier et le desservir correctement, il devra être sauvegardé dans un répertoire bien spécifique, qui se nomme le "web root".

      Sur Ubuntu 18.04, ce répertoire est situé au /var/www/html/. Créer le fichier à cet emplacement en exécutant :

      • sudo nano /var/www/html/info.php

      Cela ouvrira un fichier vierge. Ajouter le texte suivant, qui s’agit d’un code PHP valide, à l’intérieur du fichier :

      info.php

      <?php
      phpinfo();
      ?>
      

      Lorsque vous aurez terminé, sauvegarder et fermer le fichier.

      Vous pouvez maintenant tester si votre serveur web affiche correctement le contenu généré par ce script PHP. Pour le tester, visiter la page suivante dans votre navigateur web. Vous aurez encore besoin de votre adresse IP publique.

      L’adresse que vous devrez consulter est la suivante :

      http://your_server_ip/info.php
      

      La page que vous allez accéder devrait ressembler à ceci :
      Ubuntu 18.04 default PHP info

      Cette page présente de l’information de base sur votre serveur du point de vue de PHP. Elle est pratique pour le débogage et afin d’assurer que vos réglages sont appliqués correctement.

      Si vous voyez cette page sur votre navigateur, alors votre PHP fonctionne correctement.

      Vous devriez supprimer ce fichier après la mise en essai parce qu’il pourrait en fait donner de l’information sur votre serveur à des utilisateurs non autorisés. Pour ce faire, exécuter la commande suivante :

      • sudo rm /var/www/html/info.php

      Vous pourrez toujours recréer cette page si vous avez besoin d’accéder à cette information plus tard.

      Conclusion

      Maintenant que votre pile LAMP est installée, vous avez plusieurs choix quant à ce que vous pouvez faire par la suite. Essentiellement, vous venez d’installer une plateforme qui vous permettra d’installer la plupart des types de site internet et de logiciels web sur votre serveur.

      Dans l’immédiat, vous devriez vous assurer que les connexions à votre serveur web sont sécurisées, en les faisant fonctionner via HTTPS. L’option la plus simple dans ce cas est de utiliser Let's Encrypt afin de sécuriser votre site avec un certificat TLS/SSL gratuit.

      D’autres options populaires demeurent (notez que pour le moment ces tutoriels sont seulement disponibles en anglais) :



      Source link