GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Installez Nginx, MySQL, PHP (pile LEMP) sur Ubuntu 20.04 LTS

Dans notre tutoriel précédent, nous avons expliqué comment installer la pile LAMP dans Ubuntu 20.04 LTS serveur. Dans ce tutoriel, nous verrons comment installer Nginx, MySQL, PHP (pile LEMP) sur l'édition serveur Ubuntu 20.04 LTS. LEMP est l'acronyme de L inux, En gine-x, M ariaDB/M ySQL, P HP/P erl/P ython.

Installer Nginx, MySQL, PHP (pile LEMP) sur Ubuntu 20.04 LTS

Pour les besoins de ce tutoriel, j'utiliserai la machine de test suivante :

  • Système d'exploitation :Serveur Ubuntu 20.04 LTS
  • Adresse IP :192.168.225.52/24

Commençons.

1. Installer Nginx sur Ubuntu

Exécutez la commande suivante depuis le Terminal pour installer le serveur Web Nginx :

$ sudo apt install nginx

Après avoir installé Nginx, vérifiez si le service Nginx est en cours d'exécution ou non à l'aide de la commande :

$ sudo systemctl status nginx

Exemple de résultat :

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-05-29 10:13:47 UTC; 56s ago
       Docs: man:nginx(8)
   Main PID: 1349 (nginx)
      Tasks: 2 (limit: 2283)
     Memory: 4.4M
     CGroup: /system.slice/nginx.service
             ├─1349 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             └─1350 nginx: worker process

May 29 10:13:46 ubuntuserver systemd[1]: Starting A high performance web server and a reverse proxy server...
May 29 10:13:47 ubuntuserver systemd[1]: Started A high performance web server and a reverse proxy server.

Si vous voyez une sortie comme ci-dessus, le service Nginx a été démarré.

Si le service Nginx n'est pas encore démarré, vous pouvez le démarrer à l'aide de la commande :

$ sudo systemctl enable nginx
$ sudo systemctl start nginx

1.1 Autoriser le serveur Web Nginx via le pare-feu UFW

UFW , signifie U F ncompliqué irew all, est un programme de gestion d'un pare-feu netfilter conçu pour être facile à utiliser. UFW est disponible par défaut dans toutes les versions d'Ubuntu.

Par défaut, le navigateur Web Nginx n'est pas accessible à partir de systèmes distants si vous avez activé le pare-feu UFW dans Ubuntu 20.04 LTS. Vous devez autoriser le http et https ports en suivant les étapes ci-dessous.

Voyons d'abord quelles applications ont installé un profil à l'aide de la commande :

$ sudo ufw app list

Exemple de résultat :

Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

Comme vous pouvez le voir, les applications Nginx et OpenSSH ont installé des profils UFW.

Si vous regardez dans le "Nginx Full" profil, vous verrez qu'il active le trafic vers les ports 80 et 443 :

$ sudo ufw app info "Nginx Full"

Exemple de résultat :

Profile: Nginx Full
Title: Web Server (Nginx, HTTP + HTTPS)
Description: Small, but very powerful and efficient web server

Ports:
80,443/tcp

Maintenant, exécutez la commande suivante pour autoriser le trafic HTTP et HTTPS entrant pour ce profil :

$ sudo ufw allow in "Nginx Full"

Vous verrez une sortie comme ci-dessous :

Rules updated
Rules updated (v6)

Si vous souhaitez autoriser le trafic https, mais uniquement le trafic http (80), exécutez :

$ sudo ufw app info "Nginx HTTP"

Allons-y et exécutons la page de test Nginx.

Pour ce faire, ouvrez votre navigateur Web et accédez à http://localhost/ ou http://IP-Address/ .

Vous verrez la page d'accueil de Nginx comme indiqué ci-dessous.

Toutes nos félicitations! Le serveur Nginx fonctionne !

2. Installer MySQL sur Ubuntu

Pour installer MySQL sur Ubuntu, exécutez :

$ sudo apt install mysql-server

Vérifiez si le service MySQL est en cours d'exécution ou non à l'aide de la commande :

$ sudo systemctl status mysql

Exemple de résultat :

● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-05-29 10:31:56 UTC; 51s ago
   Main PID: 2288 (mysqld)
     Status: "Server is operational"
      Tasks: 39 (limit: 2283)
     Memory: 325.6M
     CGroup: /system.slice/mysql.service
             └─2288 /usr/sbin/mysqld

May 29 10:31:49 ubuntuserver systemd[1]: Starting MySQL Community Server...
May 29 10:31:56 ubuntuserver systemd[1]: Started MySQL Community Server.

Comme vous le voyez dans la sortie ci-dessus, Mysql est en cours d'exécution !

2.1 Configurer le mot de passe de l'administrateur de la base de données (root) pour Mysql

Par défaut, MySQL racine le mot de passe utilisateur est vide. Il n'est pas recommandé d'utiliser un mot de passe vide pour le compte administratif de la base de données. Vous devez sécuriser votre serveur MySQL en exécutant le script suivant :

$ sudo mysql_secure_installation

Il vous sera demandé si vous souhaitez configurer "VALIDATE PASSWORD" composant ou non. Ce composant permet aux utilisateurs de configurer un mot de passe fort pour les informations d'identification de la base de données. S'il est activé, il vérifiera automatiquement la force du mot de passe et obligera les utilisateurs à définir uniquement les mots de passe suffisamment sécurisés. Vous pouvez laisser cette option désactivée en toute sécurité . Cependant, vous devez utiliser un mot de passe fort et unique pour les informations d'identification de la base de données. Si vous ne souhaitez pas activer ce composant, appuyez simplement sur n'importe quelle touche pour ignorer la partie de validation du mot de passe et continuer le reste des étapes.

Si votre réponse est Oui , il vous sera demandé de choisir le niveau de validation du mot de passe.

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

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 y

Les validations de mot de passe disponibles sont faibles , moyen et fort . Entrez simplement le nombre approprié (0 pour faible, 1 pour moyen et 2 pour mot de passe fort) et appuyez sur la touche ENTRÉE.

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: 0

Maintenant, entrez le mot de passe de l'utilisateur root MySQL. N'oubliez pas que vous devez utiliser un mot de passe pour l'utilisateur root mysql en fonction de la politique de mot de passe que vous avez choisie à l'étape précédente. Si vous n'avez pas activé le plugin, utilisez simplement un mot de passe fort et unique de votre choix.

Please set the password for root here.

New password:

Re-enter new password:

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

Une fois que vous avez entré le mot de passe deux fois, vous verrez la force du mot de passe (dans notre cas, c'est 100 ). Si cela vous convient, appuyez sur Y pour continuer avec le mot de passe fourni. Si vous n'êtes pas satisfait de la longueur du mot de passe, appuyez sur n'importe quelle autre touche et définissez un mot de passe fort. Je suis d'accord avec mon mot de passe actuel, j'ai donc choisi y .

Pour le reste des questions, tapez simplement y et appuyez sur ENTRÉE. Cela supprimera l'utilisateur anonyme, interdira la connexion à distance de l'utilisateur root et supprimera la base de données de test.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
- Dropping test database...
Success.

- Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

Fait! Nous avons défini le mot de passe de l'utilisateur root MySQL.

2.2 Modifier la méthode d'authentification pour l'utilisateur racine MySQL

Par défaut, l'utilisateur racine MySQL est configuré pour s'authentifier à l'aide de "auth_socket" plugin à partir de MySQL 5.7 et des versions plus récentes sur Ubuntu. Même si cela améliore la sécurité, cela compliquera également les choses lorsque vous accéderez à votre serveur de base de données à l'aide de programmes externes, par exemple phpMyAdmin. Pour résoudre ce problème, vous devez modifier la méthode d'authentification de auth_socket à "caching_sha2_password" ou "mysql_native_password" .

Depuis la version MySQL 8.0, le plugin d'authentification préféré et par défaut est caching_sha2_password . Le plugin d'authentification caching_sha2_password fournit un cryptage de mot de passe plus sécurisé que le plugin mysql_native_password.

Pour changer le plugin d'authentification, connectez-vous à votre invite MySQL à l'aide de la commande :

$ sudo mysql

Exécutez la commande suivante à l'invite mysql pour trouver la méthode d'authentification actuelle pour tous les comptes d'utilisateurs mysql :

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

Exemple de résultat :

+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user             | authentication_string                                                  | plugin                | host      |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$=s%UO"�[email protected]>[email protected] | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| root             |                                                                        | auth_socket           | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)

Comme vous le voyez, l'utilisateur root mysql utilise auth_socket plugin pour l'authentification.

Pour remplacer le plug-in auth_socket par caching_sha2_password, exécutez la commande suivante à l'invite mysql. Si vous avez activé le plug-in VALIDATE PASSWORD, assurez-vous d'avoir utilisé un mot de passe fort basé sur les exigences de la politique actuelle. Un strong should se compose d'au moins 8 caractères dont une lettre majuscule, une lettre minuscule, un chiffre et un caractère spécial.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'Password123#@!';

Remplacez "Mot de passe123#@ !" avec un mot de passe fort et unique de votre choix dans la commande ci-dessus.

Mettez à jour les modifications à l'aide de la commande :

mysql> FLUSH PRIVILEGES;

Vérifiez maintenant si le plugin d'authentification actuel est modifié ou non à l'aide de la commande :

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

Exemple de résultat :

Bon! Maintenant, l'utilisateur myql root peut s'authentifier à l'aide d'un mot de passe pour accéder au shell mysql.

Sortez de l'invite mysql :

mysql> exit

Remarque :

Même si le plug-in caching_sha2_password fournit un cryptage sécurisé amélioré, il présente des problèmes de compatibilité avec les installations MySQL existantes. Pour plus de détails, consultez ce lien . Si vous rencontrez des problèmes de compatibilité, vous devez définir "mysql_native_password" plugin comme plugin d'authentification par défaut.

Pour passer à mysql_native_password plugin, exécutez la commande suivante à l'invite mysql.

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

Mettez à jour les modifications à l'aide de la commande :

mysql> FLUSH PRIVILEGES;

Maintenant, vérifiez à nouveau si la méthode d'authentification est modifiée ou non à l'aide de la commande :

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

Exemple de résultat :

Quittez l'invite mysql en saisissant la commande suivante :

exit

3. Installer PHP sur Ubuntu

Pour installer PHP, exécutez :

$ sudo apt-get install php-fpm php-mysql

Après avoir installé PHP, nous devons le sécuriser en faisant un simple changement dans php.ini fichier.

Pour ce faire, modifiez php.ini fichier à l'aide de votre éditeur préféré :

$ sudo vi /etc/php/7.4/fpm/php.ini

Recherchez la ligne suivante :

;cgi.fix_pathinfo=1

Décommentez-le et changez sa valeur de 1 à 0 (zéro) .

cgi.fix_pathinfo=0

Enregistrez et fermez le fichier. Ensuite, redémarrez le service PHP-FPM pour que les modifications prennent effet.

$ sudo systemctl restart php7.4-fpm

Vérifiez que le service PHP-FPM est en cours d'exécution ou non à l'aide de la commande :

$ sudo systemctl status php7.4-fpm

Exemple de résultat :

● php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager
     Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor preset: en>
     Active: active (running) since Fri 2020-05-29 10:40:45 UTC; 11s ago
       Docs: man:php-fpm7.4(8)
    Process: 10711 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/ph>
   Main PID: 10693 (php-fpm7.4)
     Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
      Tasks: 3 (limit: 2283)
     Memory: 7.0M
     CGroup: /system.slice/php7.4-fpm.service
             ├─10693 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf)
             ├─10709 php-fpm: pool www
             └─10710 php-fpm: pool www

May 29 10:40:44 ubuntuserver systemd[1]: Starting The PHP 7.4 FastCGI Process Manager...
May 29 10:40:45 ubuntuserver systemd[1]: Started The PHP 7.4 FastCGI Process Manager.

3.1 Configurer Nginx pour utiliser PHP-FPM

Nous devons configurer Nginx pour utiliser PHP-FPM.

Pour ce faire, modifiez le vhost par défaut de Nginx (bloc serveur) /etc/nginx/sites-available/default fichier :

$ sudo vi /etc/nginx/sites-available/default

Recherchez la section Serveur et définissez le FQDN ou l'adresse IP de votre serveur Ubuntu comme indiqué ci-dessous. Et aussi, vérifiez si vous avez ajouté le index.php doubler. Toutes les modifications sont indiquées en caractères gras.

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

[...]

root /var/www/html;

 # Add index.php to the list if you are using PHP
 index index.php index.html index.htm index.nginx-debian.html;

 server_name 192.168.225.52;
[...]

Ici,

  • écouter 80 ; -> écouter ipv4.
  • écouter [::]:80 default_server; -> écouter ipv6.
  • index.php -> Ajoutez ceci si vous utilisez PHP.
  • racine /var/www/html ; -> Répertoire racine des documents Nginx.
  • nom_serveur 192.168.225.52 ; -> Adresse IP de notre serveur Ubuntu.

Ensuite, faites défiler un peu vers le bas et trouvez le "#location ~ \.php$" rubrique.

Décommentez et modifiez les lignes suivantes comme indiqué ci-dessous.

location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}
# deny access to .htaccess files, if Apache's document root
 # concurs with nginx's one
 #
 location ~ /\.ht {
 deny all;
 }
}

Reportez-vous à la capture d'écran suivante. Les modifications sont marquées/soulignées en rouge.

Enregistrez et quittez le fichier.

Faites très attention lorsque vous modifiez fastcgi_pass directive dans l'emplacement ~ \.php$ bloc. Vous devez mentionner le bon nom de fichier avec ce qui est réellement stocké dans le /var/run/php répertoire sur votre serveur. Pour le vérifier, exécutez :

$ ls /var/run/php/
php-fpm.sock php7.4-fpm.pid php7.4-fpm.sock

Comme vous pouvez le voir, le nom du fichier est php7.4-fpm.sock . Assurez-vous d'avoir mentionné le nom correct dans cette directive.

Vérifiez le fichier de configuration Nginx pour toute erreur de syntaxe à l'aide de la commande :

$ sudo nginx -t

Exemple de résultat :

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Si vous ne voyez aucune erreur, redémarrez le service nginx pour que les modifications prennent effet.

Pour ce faire, exécutez :

$ sudo systemctl restart nginx

Maintenant, créons un exemple de fichier PHP pour tester la configuration PHP via le navigateur.

Pour ce faire, créez un fichier appelé "info.php" sous le dossier racine du document Nginx.

$ sudo vi /var/www/html/info.php

Ajoutez les lignes suivantes :

<?php
phpinfo();
?>

Enregistrez et quittez le fichier. Redémarrez le service nginx pour appliquer les modifications.

$ sudo systemctl restart nginx

Ensuite, ouvrez votre navigateur Web et accédez à http://IP-address/info.php .

Vous verrez les détails PHP.

Toutes nos félicitations! PHP fonctionne !!

3.2 Installer les modules PHP

Pour améliorer les fonctionnalités de PHP, vous pouvez installer des modules PHP supplémentaires.

Pour lister les modules PHP disponibles, exécutez :

$ sudo apt-cache search php- | less

Exemple de résultat :

Utilisez les flèches et pour vous déplacer vers le haut et vers le bas entre les résultats. Pour quitter, tapez q .

Pour trouver les détails d'un module php particulier, par exemple php-gd , exécutez :

$ sudo apt-cache show php-gd

Pour installer un module php, lancez :

$ sudo apt-get install php-gd

Pour installer tous les modules (pas nécessaire cependant), exécutez :

$ sudo apt-get install php*

N'oubliez pas de redémarrer le service Nginx après avoir installé un module php.

Toutes nos félicitations! Nous avons réussi à configurer la pile LEMP sur le serveur Ubuntu 20.04 LTS. Commencez à déployer des sites Web et des applications Web dans votre nouvelle pile Web LEMP.

Lire la suite :

  • Installer phpMyAdmin avec la pile LEMP sur Ubuntu 20.04 LTS

Ubuntu
  1. Comment installer Nginx avec PHP et MySQL (pile LEMP) sur Ubuntu 18.04

  2. Comment installer Phorum avec Nginx sur Ubuntu 18.04 LTS

  3. Comment installer Nginx avec PHP et MySQL (pile LEMP) sur Ubuntu 20.04 LTS

  4. Comment installer LAMP Stack sur Ubuntu 22.04 LTS

  5. Comment installer LEMP Stack Nginx, MySQL, PHP sur Ubuntu 22.04

Comment installer la pile LEMP sur le serveur/bureau Ubuntu 20.04

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

Comment installer Nginx sur Ubuntu 18.04 LTS

Comment installer Nginx, MySQL et PHP (LEMP) sur un serveur Ubuntu 15.04

Comment installer LEMP (Linux, Nginx, MySQL, PHP) sur un serveur cloud Ubuntu 14.04 LTS

Comment installer la pile Nginx, MySQL, PHP (LEMP) sur un serveur cloud Debian 8.3