Comment installer Nginx avec PHP et MariaDB (pile LEMP) sur Fedora 31

La pile logicielle LEMP est un groupe de logiciels open-source qui sont installés ensemble pour permettre à un serveur d’héberger des sites Web et des applications. C’est l’acronyme de Linux, serveur ENginx, MySQL (qui utilise ici MariaDB) et PHP.

Dans ce guide, tu vas installer une pile LEMP sur un serveur basé sur Fedora 31. Nous installerons également PHPMyAdmin, Redis et Opcache.

Conditions préalables

  • Un serveur fonctionnant sous Fedora 31.

  • Un utilisateur sudo non-root.

  • Assure-toi que tout est mis à jour.

    $ sudo dnf upgrade
    
  • Quelques paquets dont ton système a besoin.

    $ sudo dnf install wget curl nano -y
    

    Certains de ces paquets sont peut-être déjà installés sur ton système.

  • Désactiver SELinux.

    $ sudo setenforce 0
    

Configurer le pare-feu

La première étape consiste à configurer le pare-feu. Le serveur Fedora est livré avec le pare-feu Firewalld préinstallé.

Vérifie si le pare-feu est en cours d'exécution.

$ sudo firewall-cmd --state

Tu devrais obtenir la sortie suivante.

running

Définis la zone par défaut du pare-feu sur public.

$ sudo firewall-cmd --set-default-zone=public

Vérifie les services/ports actuellement autorisés.

$ sudo firewall-cmd --zone=public --permanent --list-services

Tu devrais obtenir la sortie suivante.

dhcpv6-client mdns ssh

Autorise les ports HTTP et HTTPS.

$ sudo firewall-cmd --zone=public --permanent --add-service=http
$ sudo firewall-cmd --zone=public --permanent --add-service=https

Vérifie à nouveau l'état du pare-feu.

$ sudo firewall-cmd --zone=public --permanent --list-services

Tu devrais voir un résultat similaire.

dhcpv6-client http https mdns ssh

Recharge le pare-feu.

$ sudo systemctl reload firewalld

Installe PHP

Fedora 31 est livré par défaut avec PHP 7.3. Mais nous voulons installer PHP 7.4 et pour cela, nous devons ajouter le référentiel REMI.

Installe le référentiel REMI qui est le référentiel officiel de Fedora pour l'installation des paquets PHP.

$ sudo dnf -y install https://rpms.remirepo.net/fedora/remi-release-31.rpm

Active les référentiels remi et remi-php74 et désactive le référentiel remi-modular. Cela active le dépôt nécessaire pour installer les paquets PHP 7.4.

$ sudo dnf config-manager --set-enabled remi
$ sudo dnf config-manager --set-enabled remi-php74
$ sudo dnf config-manager --set-disabled remi-modular

Installe PHP 7.4 ainsi que quelques paquets supplémentaires.

$ sudo dnf install -y php-cli php-fpm php-mysqlnd

Vérifie si PHP fonctionne correctement.

$ php --version

Tu devrais voir un résultat similaire.

PHP 7.4.3 (cli) (built: Feb 18 2020 11:53:05) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

Installe MariaDB

MariaDB est un remplacement direct de MySQL, ce qui signifie que les commandes pour exécuter et faire fonctionner MariaDB sont les mêmes que celles de MySQL.

Fedora 31 est livré par défaut avec MariaDB 10.3 mais nous pouvons aussi installer la dernière version 10.4 (disponible au moment de la rédaction de ce tutoriel). Pour cela, nous devons ajouter le dépôt officiel de MariaDB.

Crée MariaDB.repo dans le répertoire /etc/yum.repos.d/.

$ sudo nano /etc/yum.repos.d/MariaDB.repo

Ajoute-y le code suivant.

# MariaDB 10.4 Fedora repository list
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/fedora31-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Enregistre le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque tu y es invité.

Pour installer MariaDB, lance les commandes suivantes

$ sudo dnf install MariaDB-server -y

Remarque sur la commande. Si tu veux installer la copie(10.3) dans le dépôt Fedora, tu dois utiliser sudo dnf install mariadb-server mais pour la version 10.4, nous utilisons sudo dnf install MariaDB-server.

Vérifie si MariaDB s'est installé correctement.

$ mysql --version

Tu devrais voir la sortie suivante.

mysql  Ver 15.1 Distrib 10.4.12-MariaDB, for Linux (x86_64) using  EditLine wrapper

Active et démarre le service MariaDB.

$ sudo systemctl enable mariadb
$ sudo systemctl start mariadb

Exécute la commande suivante pour effectuer la configuration par défaut, comme donner un mot de passe root, supprimer les utilisateurs anonymes, interdire la connexion root à distance et supprimer les tables de test.

$ sudo mysql_secure_installation

Avec MariaDB 10.4, il te sera désormais demandé de choisir entre l'utilisation du mot de passe root ou du plugin unix_socket. Le plugin unix_socket te permet de te connecter à MariaDB avec tes identifiants d'utilisateur Linux. Il est considéré comme plus sûr, mais tu auras besoin d'un nom d'utilisateur/mot de passe traditionnel pour utiliser des applications tierces comme PhpMyAdmin. Nous nous en tiendrons à l'utilisation du plugin unix_socket pour ce tutoriel. Tu peux toujours utiliser PhpMyAdmin via n'importe quel utilisateur spécifique que tu as créé pour tes bases de données.

En appuyant sur Entrée, tu choisis l'option par défaut (celle qui est en majuscule, Y dans ce cas).

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
haven't set the root password yet, 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 or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] [PRESS ENTER]
Enabled successfully!
Reloading privilege tables..
 ... Success!

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] [ANSWER n]

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...
 ... 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? [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.

Thanks for using MariaDB!

C'est tout. La prochaine fois que tu veux te connecter à MySQL, utilise la commande suivante

$ sudo mysql

Saisis ton mot de passe root lorsque tu y es invité.

Installe Nginx

Fedora 31 est livrée par défaut avec la version stable de Nginx (1.16.1). Si tu veux installer la version principale de Nginx, suis notre guide de construction de Nginx à partir des sources. Assure-toi de récupérer la dernière version de Nginx et les dépendances mentionnées dans le tutoriel. Le reste des instructions restera le même (modifie les noms de chemin en conséquence pendant la commande ./configure ). Pour ce tutoriel, nous nous en tiendrons à la version stable de Nginx.

Installe le serveur Nginx.

$ sudo dnf install nginx -y

Vérifie s'il fonctionne correctement.

$ nginx -v

Tu devrais voir la sortie suivante.

nginx version: nginx/1.16.1

Démarre et active Nginx.

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

Ouvre l'adresse IP de ton serveur dans un navigateur pour voir la page suivante. Cela signifie que Nginx fonctionne correctement.

Page de test de Fedora Nginx

Configurer Nginx

Configure les répertoires où vivront les blocs du serveur.

$ sudo mkdir /etc/nginx/sites-available
$ sudo mkdir /etc/nginx/sites-enabled

Crée le répertoire où ton site vivra.

$ sudo mkdir /var/www/example.com/html -p

L'utilisation de la directive -p permet de créer des répertoires parents qui n'existaient pas auparavant.

Exécute la commande suivante pour ajouter un fichier de configuration pour ton site.

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

Colle le code suivant dans l'éditeur.

server {
  listen          *:80;
  server_name     example.com;
  root            /var/www/example.com/html;
  index           index.php index.html;

  location / {
    try_files   $uri $uri/ =404;
  }
    
  access_log /var/log/nginx/example.com.access.log;
  error_log /var/log/nginx/example.com.error.log;

  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass  unix:/run/php-fpm/www.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_index index.php;
    include  fastcgi_params;
  }
}

Ce fichier part du principe que nous allons héberger example.com dans le répertoire /var/www/html. Si tu n'utilises aucun domaine et que tu configures ton serveur pour qu'il soit accessible uniquement via l'adresse IP/localhost, tu devras supprimer les paramètres de bloc serveur correspondants du fichier nginx.conf, sinon cela perturbera le bloc serveur que tu créeras.

Active ce fichier de configuration en le liant au répertoire sites-enabled.

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

Ouvre le fichier /etc/nginx/nginx.conf pour le modifier.

$ sudo nano /etc/nginx/nginx.conf	

Colle les lignes suivantes après la ligne include /etc/nginx/conf.d/*.conf

include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;

Change la valeur de types_hash_max_size de 2048 à 4096.

types_hash_max_size 4096;

Appuie sur Ctrl + X pour fermer l'éditeur et appuie sur Y lorsque tu es invité à enregistrer le fichier. Teste la configuration de Nginx.

$ sudo nginx -t

Tu devrais voir la sortie suivante indiquant que ta configuration est correcte.

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

Recharge le service Nginx.

$ sudo systemctl reload nginx

Configurer PHP-FPM

Ouvre le fichier /etc/php-fpm.d/www.conf.

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

Nous devons définir l'utilisateur/groupe Unix des processus PHP sur nginx. Trouve les lignes user=apache et group=apache dans le fichier et change-les en nginx.

...
; 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 = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...

Définis également les autorisations de propriété pour le socket Unix à nginx et supprime le ; qui les précède.

listen.owner = nginx
listen.group = nginx

Enregistre le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque tu y es invité.

Redémarre le processus PHP-fpm.

$ sudo systemctl restart php-fpm

Pour tester ta configuration PHP, crée un fichier test.php dans le dossier html.

$ sudo nano /var/www/example.com/html/test.php

Ajoute-y le contenu suivant et enregistre le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque tu y es invité.

<?php phpinfo();

Lance http://<yourserverip>/test.php dans ton navigateur Web et tu devrais voir ce qui suit.

PHP Info page

Conclusion

C'est tout pour ce tutoriel. Ton installation LEMP est terminée et tu peux commencer à créer et à héberger tes sites Web et tes applications.

Vous aimerez aussi...