Installer Nginx, MariaDB, PHP (pile LEMP) sur le serveur Ubuntu 18.04 LTS
Dans notre tutoriel précédent, nous avons discuté de la façon d'installer la pile LAMP sur un serveur Ubuntu 18.04 LTS. Dans ce tutoriel, nous verrons comment installer Nginx, MariaDB, PHP (pile LEMP) sur l'édition serveur minimale d'Ubuntu 18.04 LTS. Comme je l'ai mentionné dans le tutoriel précédent, LEMP est l'acronyme de Linux, Engine-x, MariaDB/MySQL, PHP/Perl/Python. Pour les besoins de ce tutoriel, j'utiliserai la machine de test suivante :
- Système d'exploitation : Ubuntu 18.04 LTS Server
- Adresse IP : 192.168.225.22/24
Commençons.
Installer Nginx, MariaDB, PHP (pile LEMP) sur Ubuntu 18.04 LTS
1. Installer Nginx
Ouvrez le Terminal et exécutez la commande suivante pour installer le serveur web Nginx :
$ sudo apt install nginxAprès avoir installé Nginx, vérifiez si le service Nginx fonctionne ou non en utilisant la commande :
$ sudo systemctl status nginxExemple de sortie :
● 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 Sat 2018-07-07 12:10:05 UTC; 57s ago
Docs: man:nginx(8)
Process: 1846 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 1833 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 1849 (nginx)
Tasks: 2 (limit: 2322)
CGroup: /system.slice/nginx.service
├─1849 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─1851 nginx: worker process
Jul 07 12:10:05 ubuntuserver systemd[1]: Starting A high performance web server and a reverse proxy server...
Jul 07 12:10:05 ubuntuserver systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Jul 07 12:10:05 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é.
Au cas où il n'a pas encore été démarré, vous pouvez le démarrer en utilisant la commande :
$ sudo systemctl start nginx1.1 Ajuster le pare-feu pour autoriser le serveur web Nginx
Par défaut, le navigateur web Nginx ne peut pas être accessible depuis des systèmes distants si vous avez activé le pare-feu UFW sous Ubuntu 18.04 LTS. Vous devez autoriser le trafic http et https via UFW en suivant les étapes ci-dessous.
Tout d'abord, voyons quelles applications ont installé un profil en utilisant la commande :
$ sudo ufw app list
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSHComme vous pouvez le voir, les applications Nginx et OpenSSH ont des profils UFW installés.
Si vous regardez le profil « Nginx Full », vous verrez qu'il permet le trafic vers les ports 80 et 443 :
$ sudo ufw app info "Nginx Full"
Profile: Nginx Full
Title: Web Server (Nginx, HTTP + HTTPS)
Description: Small, but very powerful and efficient web server
Ports:
80,443/tcpMaintenant, exécutez la commande suivante pour autoriser le trafic HTTP et HTTPS entrant pour ce profil :
$ sudo ufw allow in "Nginx Full"
Rules updated
Rules updated (v6)Si vous voulez autoriser le trafic https, mais uniquement le trafic http (80), exécutez :
$ sudo ufw app info "Nginx HTTP"Allons de l'avant et exécutons la page test de Nginx.
Pour ce faire, ouvrez votre navigateur Web et accédez à http://localhost/ ou http://Adresse-IP/.
Vous verrez une page ressemblant à ce qui suit.
Si vous voyez une sortie comme celle ci-dessus, félicitations ! Le serveur Nginx fonctionne !
2. Installer MariaDB
MariaDB est le remplacement direct du serveur de base de données MySQL.
Pour l'installer, exécutez :
$ sudo apt install mariadb-server mariadb-clientLa version de MariaDB dans les dépôts officiels d'Ubuntu pourrait être obsolète. Si vous voulez installer la dernière version de MariaDB, ajoutez le dépôt officiel MariaDB pour Ubuntu et installez-le comme indiqué ci-dessous.
Tout d'abord, ajoutez le dépôt MariaDB et importez la clé comme indiqué ci-dessous.
$ sudo apt-get install software-properties-common
$ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
$ sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://sgp1.mirrors.linux-console.net/mariadb/repo/10.3/ubuntu bionic main'Après avoir ajouté le dépôt, exécutez les commandes suivantes pour installer MariaDB.
$ sudo apt update
$ sudo apt install mariadb-serverVérifiez si le service MariaDB fonctionne ou non en utilisant la commande :
$ sudo systemctl status mysqlExemple de sortie :
● mariadb.service - MariaDB database server
Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2018-07-07 12:15:13 UTC; 2min 57s ago
Main PID: 3428 (mysqld)
Status: "Taking your SQL requests now..."
Tasks: 27 (limit: 2322)
CGroup: /system.slice/mariadb.service
└─3428 /usr/sbin/mysqld
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: mysql
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: performance_schema
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: Phase 6/7: Checking and upgrading tables
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: Processing databases
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: information_schema
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: performance_schema
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: Phase 7/7: Running 'FLUSH PRIVILEGES'
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: OK
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3534]: Checking for insecure root accounts.
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3538]: Triggering myisam-recover for all MyISAM tables and aria-recover for all Aria tablesMysql fonctionne !
2.1 Configurer le mot de passe de l'utilisateur administratif de la base de données (root)
Lors de l'installation de MariaDB, il définira le mot de passe pour le compte utilisateur administratif (root).
Si vous essayez de configurer le mot de passe manuellement en utilisant la commande :
$ mysql_secure_installationVous ne pouvez pas vous connecter pour définir le mot de passe. Vous verrez une erreur comme ci-dessous.
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Enter current password for root (enter for none):Pour résoudre ce problème, connectez-vous en tant qu'administrateur de base de données MySQL en utilisant la commande :
$ sudo mysql -u rootAprès vous être connecté à l'invite MySQL, exécutez les commandes suivantes une par une.
use mysql;update user set plugin='' where User='root';flush privileges;\qVous pouvez maintenant définir le mot de passe administrateur de la base de données en utilisant la commande :
$ mysql_secure_installationEntrez le mot de passe password, et appuyez sur la touche ENTRÉE pour accepter les valeurs par défaut.
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none): # Press ENTER
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] # Press ENTER
New password: # Enter password
Re-enter new password: # Re-enter password
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] # Press ENTER
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] # Press ENTER
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] # Press ENTER
- Dropping test database...
ERROR 1008 (HY000) at line 1: Can't drop database 'test'; database doesn't exist
... Failed! Not critical, keep moving...
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] # Press ENTER
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.C'est tout. Le mot de passe pour le compte utilisateur administratif de la base de données a été défini.
3. Installer PHP
Pour installer PHP, exécutez :
$ sudo apt-get install php-fpm php-mysqlAprès avoir installé PHP, nous devons le sécuriser en effectuant un changement simple.
Pour ce faire, modifiez le fichier php.ini :
$ sudo vi /etc/php/7.2/fpm/php.iniTrouvez la ligne suivante :
;cgi.fix_pathinfo=1Décommentez-le et changez sa valeur de 1 à 0 (zéro).
cgi.fix_pathinfo=0Enregistrez et fermez le fichier. Ensuite, redémarrez le service PHP-FPM pour que les modifications prennent effet.
$ sudo systemctl restart php7.2-fpmVérifiez si le service PHP-FPM fonctionne ou non en utilisant la commande :
$ sudo systemctl status php7.2-fpmExemple de sortie :
● php7.2-fpm.service - The PHP 7.2 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.2-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2018-07-07 12:23:46 UTC; 7s ago
Docs: man:php-fpm7.2(8)
Main PID: 11005 (php-fpm7.2)
Status: "Ready to handle connections"
Tasks: 3 (limit: 2322)
CGroup: /system.slice/php7.2-fpm.service
├─11005 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf)
├─11018 php-fpm: pool www
└─11019 php-fpm: pool www
Jul 07 12:23:46 ubuntuserver systemd[1]: Starting The PHP 7.2 FastCGI Process Manager...
Jul 07 12:23:46 ubuntuserver systemd[1]: Started The PHP 7.2 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 (bloc serveur) par défaut de Nginx /etc/nginx/sites-available/default :
$ sudo vi /etc/nginx/sites-available/defaultTrouvez la section Serveur et définissez le FQDN ou l'adresse IP de votre serveur Ubuntu comme indiqué ci-dessous. Et vérifiez également si vous avez ajouté la ligne index.php. Toutes les modifications sont indiquées en lettres grasses.
[...]
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.22;
[...]Examinons les lignes ci-dessus et voyons ce que chaque ligne signifie.
- écouter 80; → écouter pour ipv4.
- listen [::]:80 default_server ; → écouter pour ipv6.
- root /var/www/html; –> Répertoire racine des documents Nginx.
- server_name 192.168.225.22; → L'adresse IP de notre serveur Ubuntu.
Ensuite, faites défiler un peu vers le bas et trouvez la section #location ~ \.php$.
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:/run/php/php7.2-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;
}
}
Enregistrez et quittez le fichier.
Faites bien attention lorsque vous modifiez la directive fastcgi_pass dans le bloc location ~ \.php$ . Vous devez mentionner le nom correct du fichier correspondant à ce qui est réellement stocké dans le répertoire /run/php sur votre serveur. Pour le vérifier, exécutez :
$ ls /run/php/
php7.2-fpm.pid php7.2-fpm.sock
Comme vous pouvez le voir, le nom du fichier est php7.2-fpm.sock, et non php7.0-fpm.sock, qui est ce qui est indiqué dans la directive location ~ \.php$. Assurez-vous d'avoir mentionné le nom correct dans cette directive.
Vérifiez le fichier de configuration Nginx pour toute erreur de syntaxe en utilisant la commande :
$ sudo nginx -tExemple de sortie :
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulSi vous ne voyez aucune erreur, redémarrez le service nginx pour que les changements prennent effet.
Pour ce faire, exécutez :
$ sudo systemctl restart nginxMaintenant, créons un fichier PHP exemple pour tester la configuration PHP via le navigateur.
Pour ce faire, créez un fichier appelé info.php sous le dossier racine des documents Nginx.
$ sudo vi /var/www/html/info.phpAjoutez les lignes suivantes :
<?php
phpinfo();
?>Enregistrez et quittez le fichier. Redémarrez le service nginx pour que les modifications prennent effet.
Ensuite, ouvrez votre navigateur web et accédez à http://IP-address/info.php.
Vous verrez les détails PHP.
Félicitations ! PHP fonctionne !!
3.2 Installer les modules PHP
Pour améliorer la fonctionnalité de PHP, vous pouvez installer certains modules PHP supplémentaires.
Pour lister les modules PHP disponibles, exécutez :
$ sudo apt-cache search php- | lessExemple de sortie :
Rechercher des modules PHP
Utilisez les flèches pour monter et descendre entre les résultats. Pour quitter les résultats, tapez q.
Pour trouver les détails de n'importe quel module php particulier, par exemple php-gd, exécutez :
$ sudo apt-cache show php-gdPour installer un module PHP, exécutez :
$ sudo apt-get install php-gdPour 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.
Félicitations ! Nous avons installé avec succès la pile LEMP sur le serveur Ubuntu 18.04 LTS. Commencez à déployer des sites web et des applications web sur votre nouvelle pile web LEMP.
Santé !




