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

introduction

La pile logicielle LEMP est un groupe de logiciels pouvant servir à gérer des pages Web dynamiques et des applications Web. C'est un acronyme qui décrit un système d'exploitationLinux, avec un serveur Web Nginx (prononcé comme «Engine-X»). Les données du backend sont stockées dans la base de données sySQLMet le traitement dynamique est géré parPHP.

Ce guide explique comment installer une pile LEMP sur un serveur Ubuntu 18.04. Le système d'exploitation Ubuntu répond à la première exigence. Nous allons décrire comment mettre en marche le reste des composants.

Conditions préalables

Avant de terminer ce didacticiel, vous devez disposer d'un compte d'utilisateur non root sur votre serveur avec les privilègessudo. Configurez ce compte en complétant nosinitial server setup guide for Ubuntu 18.04.

Une fois que vous avez votre utilisateur disponible, vous êtes prêt à commencer les étapes décrites dans ce guide.

[[step-1 -–- Installing-the-nginx-web-server]] == Étape 1 - Installation du serveur Web Nginx

Pour afficher les pages Web destinées aux visiteurs de notre site, nous allons utiliser Nginx, un serveur Web moderne et efficace.

Tous les logiciels utilisés dans cette procédure proviendront des référentiels de paquets par défaut d’Ubuntu. Cela signifie que nous pouvons utiliser la suite de gestion de paquetsapt pour terminer les installations nécessaires.

Comme c'est la première fois que nous utilisonsapt pour cette session, commencez par mettre à jour l'index des packages de votre serveur. Ensuite, installez le serveur:

sudo apt update
sudo apt install nginx

Sur Ubuntu 18.04, Nginx est configuré pour s'exécuter lors de l'installation.

Si le pare-feu deufw est en cours d’exécution, comme indiqué dans le guide d’installation initiale, vous devrez autoriser les connexions à Nginx. Nginx s'enregistre avecufw lors de l'installation, la procédure est donc assez simple.

Il est recommandé d'activer le profil le plus restrictif permettant le trafic que vous souhaitez. Étant donné que vous n’avez pas configuré SSL pour votre serveur dans ce guide, vous devrez uniquement autoriser le trafic sur le port80.

Activez ceci en tapant:

sudo ufw allow 'Nginx HTTP'

Vous pouvez vérifier le changement en lançant:

sudo ufw status

La sortie de cette commande montrera que le trafic HTTP est autorisé:

OutputStatus: active

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

Avec la nouvelle règle de pare-feu ajoutée, vous pouvez vérifier 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 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’elles à tour de rôle dans votre navigateur Web.

Au lieu de cela, vous pouvez vérifier quelle adresse IP est accessible, telle que vue depuis d'autres emplacements sur Internet:

curl -4 icanhazip.com

Saisissez l'adresse que vous recevez dans votre navigateur Web. La page de destination par défaut de Nginx apparaît:

http://server_domain_or_IP

Nginx default page

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

[[step-2 -–- Installing-mysql-to-manage-site-data]] == Étape 2 - Installation de MySQL pour gérer les données du site

Maintenant que vous avez un serveur Web, vous devez installer MySQL (un système de gestion de base de données) pour stocker et gérer les données de votre site.

Installez MySQL en tapant:

sudo apt install mysql-server

Le logiciel de base de données MySQL est maintenant installé, mais sa configuration n'est pas encore terminée.

Pour sécuriser l'installation, MySQL est livré avec un script qui demande si nous voulons modifier certaines valeurs par défaut non sécurisées. Initiez le script en tapant:

sudo mysql_secure_installation

Ce script vous demandera si vous souhaitez configurer lesVALIDATE PASSWORD PLUGIN.

[.warning] #Warning: L'activation de cette fonction est une sorte de jugement. Si activé, les mots de passe qui ne correspondent pas aux critères spécifiés seront rejetés par MySQL avec une erreur. Cela causera des problèmes si vous utilisez un mot de passe faible en conjonction avec un logiciel qui configure automatiquement les informations d'identification des utilisateurs MySQL, tels que les packages Ubuntu pour phpMyAdmin. Il est prudent de laisser la validation désactivée, mais vous devez toujours utiliser des mots de passe forts et uniques pour les informations d'identification de la base de données.
#

Répondez àY pour oui, ou toute 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 avez activé la validation, le script vous demandera également de sélectionner un niveau de validation du mot de passe. Gardez à l'esprit que si vous entrez2 - pour le niveau le plus élevé - 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 un dictionnaire commun mots.

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

Ensuite, il vous sera demandé de soumettre et de confirmer un mot de passe root:

Please set the password for root here.

New password:

Re-enter new password:

Pour le reste des questions, vous devez appuyer surY et appuyer sur la toucheENTER à chaque invite. Cela supprimera certains 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 nous avons apportées.

Notez que dans les systèmes Ubuntu exécutant MySQL 5.7 (et versions ultérieures), l'utilisateur MySQLroot est configuré pour s'authentifier en utilisant le pluginauth_socket par défaut plutôt qu'avec un mot de passe. Cela permet une sécurité et une convivialité accrues dans de nombreux cas, mais peut également compliquer les choses lorsque vous devez autoriser un programme externe (par exemple, phpMyAdmin) à accéder à l'utilisateur.

Si l'utilisation du pluginauth_socket pour accéder à MySQL correspond à votre flux de travail, vous pouvez passer à l'étape 3. Si, cependant, vous préférez utiliser un mot de passe lors de la connexion à MySQL en tant queroot, vous devrez changer sa méthode d'authentification deauth_socket àmysql_native_password. Pour ce faire, ouvrez l’invite MySQL depuis votre terminal:

sudo mysql

Ensuite, vérifiez la méthode d’authentification utilisée par chacun de vos comptes d’utilisateur MySQL avec la commande suivante:

SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+
| 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'utilisateurroot s'authentifie en fait en utilisant le pluginauth_socket. Pour configurer le compteroot afin qu'il s'authentifie avec un mot de passe, exécutez la commandeALTER USER suivante. Assurez-vous de remplacerpassword par un mot de passe fort de votre choix:

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

Ensuite, exécutezFLUSH PRIVILEGES qui dit au serveur de recharger les tables d'octroi et de mettre vos nouvelles modifications en vigueur:

FLUSH PRIVILEGES;

Vérifiez à nouveau les méthodes d'authentification employées par chacun de vos utilisateurs pour confirmer queroot ne s'authentifie plus à l'aide du pluginauth_socket:

SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+
| 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 de sortie que l'utilisateur MySQL deroot s'authentifie désormais à l'aide d'un mot de passe. Une fois que vous confirmez cela sur votre propre serveur, vous pouvez quitter le shell MySQL:

exit

[.Remarque]##

Note: après avoir configuré votre utilisateur MySQLroot pour s'authentifier avec un mot de passe, vous ne pourrez plus accéder à MySQL avec la commandesudo mysql utilisée précédemment. Au lieu de cela, vous devez exécuter ce qui suit:

mysql -u root -p

Après avoir entré le mot de passe que vous venez de définir, vous verrez l'invite MySQL.

À ce stade, votre système de base de données est maintenant configuré et vous pouvez passer à l'installation de PHP.

[[step-3 -–- installer-php-et-configurer-nginx-to-use-the-php-processor]] == Étape 3 - Installer PHP et configurer Nginx pour utiliser le processeur PHP

Vous avez maintenant Nginx installé pour servir vos pages et MySQL installé pour stocker et gérer vos données. Cependant, vous n’avez toujours rien qui puisse générer du contenu dynamique. C'est ici qu'intervient PHP.

Puisque Nginx ne contient pas de traitement PHP natif comme certains autres serveurs Web, vous devrez installerphp-fpm, qui signifie «gestionnaire de processus fastCGI». Nous dirons à Nginx de transmettre les requêtes PHP à ce logiciel pour traitement.

[.Remarque]##

Note: en fonction de votre fournisseur de cloud, vous devrez peut-être ajouter le référentieluniverse d'Ubuntu, qui comprend des logiciels gratuits et open source maintenus par la communauté Ubuntu, avant d'installer le packagephp-fpm. Vous pouvez le faire en tapant:

sudo add-apt-repository universe

Installez le modulephp-fpm avec un package d'assistance supplémentaire,php-mysql, qui permettra à PHP de communiquer avec votre backend de base de données. L'installation utilisera les fichiers de base de PHP nécessaires. Faites ceci en tapant:

sudo apt install php-fpm php-mysql

Vous avez maintenant tous les composants de pile LEMP requis installés, mais vous devez encore apporter quelques modifications de configuration afin de dire à Nginx d'utiliser le processeur PHP pour le contenu dynamique.

Cela se fait au niveau du bloc serveur (les blocs serveur sont similaires aux hôtes virtuels d’Apache). Pour ce faire, ouvrez un nouveau fichier de configuration de bloc serveur dans le répertoire/etc/nginx/sites-available/. Dans cet exemple, le nouveau fichier de configuration du bloc serveur est nomméexample.com, bien que vous puissiez nommer le vôtre comme vous le souhaitez:

sudo nano /etc/nginx/sites-available/example.com

En modifiant un nouveau fichier de configuration de bloc de serveur plutôt que le fichier par défaut, vous pourrez facilement restaurer la configuration par défaut si besoin est.

Ajoutez le contenu suivant, qui a été pris et légèrement modifié à partir du fichier de configuration de bloc de serveur par défaut, à votre nouveau fichier de configuration de bloc de serveur:

/etc/nginx/sites-available/example.com

server {
        listen 80;
        root /var/www/html;
        index index.php index.html index.htm index.nginx-debian.html;
        server_name example.com;

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

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

        location ~ /\.ht {
                deny all;
        }
}

Voici ce que chacune de ces directives et blocs d'emplacement font:

  • listen - Définit sur quel port Nginx écoutera. Dans ce cas, il écoutera sur le port80, le port par défaut pour HTTP.

  • root - Définit la racine du document où sont stockés les fichiers servis par le site Web.

  • index - Configure Nginx pour donner la priorité aux fichiers de diffusion nommésindex.php lorsqu'un fichier d'index est demandé, s'ils sont disponibles.

  • server_name - Définit quel bloc serveur doit être utilisé pour une requête donnée à votre serveur. Point this directive to your server’s domain name or public IP address.

  • location / - Le premier bloc d'emplacement comprend une directivetry_files, qui vérifie l'existence de fichiers correspondant à une demande d'URI. Si Nginx ne peut pas trouver le fichier approprié, il retournera une erreur 404.

  • location ~ \.php$ - Ce bloc d'emplacement gère le traitement PHP réel en pointant Nginx vers le fichier de configurationfastcgi-php.conf et le fichierphp7.2-fpm.sock, qui déclare quel socket est associé àphp-fpm.

  • location ~ /\.ht - Le dernier bloc d'emplacement traite des fichiers.htaccess, que Nginx ne traite pas. En ajoutant la directivedeny all, si des fichiers.htaccess trouvent leur chemin dans la racine du document, ils ne seront pas servis aux visiteurs.

Après avoir ajouté ce contenu, enregistrez et fermez le fichier. Activez votre nouveau bloc serveur en créant un lien symbolique depuis votre nouveau fichier de configuration de bloc serveur (dans le répertoire/etc/nginx/sites-available/) vers le répertoire/etc/nginx/sites-enabled/:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Ensuite, dissociez le fichier de configuration par défaut du répertoire/sites-enabled/:

sudo unlink /etc/nginx/sites-enabled/default

[.Remarque]##

Note: Si jamais vous avez besoin de restaurer la configuration par défaut, vous pouvez le faire en recréant le lien symbolique, comme ceci:

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

Testez votre nouveau fichier de configuration pour les erreurs de syntaxe en tapant:

sudo nginx -t

Si des erreurs sont signalées, revenez en arrière et revérifiez votre fichier avant de continuer.

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

sudo systemctl reload nginx

Ceci termine l’installation et la configuration de votre pile LEMP. Cependant, il est prudent de confirmer que tous les composants peuvent communiquer entre eux.

[[step-4 -–- creation-a-php-file-to-test-configuration]] == Étape 4 - Création d'un fichier PHP pour tester la configuration

Votre pile LEMP devrait maintenant être complètement configurée. Vous pouvez le tester pour valider que Nginx peut correctement remettre les fichiers.php au processeur PHP.

Pour ce faire, utilisez votre éditeur de texte pour créer un fichier PHP de test appeléinfo.php dans la racine de votre document:

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

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

/var/www/html/info.php

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

Désormais, vous pouvez visiter cette page dans votre navigateur Web en visitant le nom de domaine ou l'adresse IP publique de votre serveur suivi de/info.php:

http://your_server_domain_or_IP/info.php

Vous devriez voir une page Web générée par PHP avec des informations sur votre serveur:

PHP page info

Si vous voyez une page qui ressemble à ceci, vous avez configuré le traitement PHP avec Nginx avec succès.

Après avoir vérifié que Nginx rend la page correctement, il est préférable de supprimer le fichier que vous avez créé, car cela peut en réalité donner aux utilisateurs non autorisés des indications sur votre configuration susceptibles de les aider à tenter leur chance. Vous pouvez toujours régénérer ce fichier si vous en avez besoin plus tard.

Pour l'instant, supprimez le fichier en tapant:

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

Avec cela, vous avez maintenant une pile LEMP entièrement configurée et fonctionnelle sur votre serveur Ubuntu 18.04.

Conclusion

Une pile LEMP est une plate-forme puissante qui vous permettra de configurer et de servir presque tous les sites Web ou applications à partir de votre serveur.

Vous pouvez prendre un certain nombre de prochaines étapes. Par exemple, vous devez vous assurer que les connexions à votre serveur sont sécurisées. À cette fin, vous pourriezsecure your Nginx installation with Let’s Encrypt. En suivant ce guide, vous obtiendrez un certificat TLS / SSL gratuit pour votre serveur, lui permettant de diffuser du contenu via HTTPS.