GNU/Linux >> Tutoriels Linux >  >> Fedora

Comment installer Nginx avec PHP et MariaDB (pile LEMP) avec Opcache, Redis et Lets Encrypt sur Fedora 32

Une 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 un acronyme pour L inux, E Serveur Nginx, M ySQL (avec MariaDB) et P HP.

Dans ce guide, vous allez installer une pile LEMP sur un serveur basé sur Fedora 32. Nous installerons également phpMyAdmin, Redis, Opcache et Let's Encrypt SSL.

Prérequis

Un serveur exécutant Fedora 32.

Un utilisateur sudo non root.

Assurez-vous que tout est mis à jour.

$ sudo dnf upgrade

Peu de packages dont votre système a besoin.

$ sudo dnf install wget curl nano -y

Certains de ces packages sont peut-être déjà installés sur votre 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érifiez si le pare-feu est en cours d'exécution.

$ sudo firewall-cmd --state

Vous devriez obtenir le résultat suivant.

running

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

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

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

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

Il devrait afficher la sortie suivante.

dhcpv6-client mdns ssh

Autoriser les ports HTTP et HTTPS.

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

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

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

Vous devriez voir une sortie similaire.

dhcpv6-client http https mdns ssh

Rechargez le pare-feu.

$ sudo systemctl reload firewalld

Installer PHP

Fedora 32 est livré par défaut avec PHP 7.4 mais pour avoir un référentiel PHP mis à jour, nous ajouterons le référentiel REMI.

Installez le référentiel REMI qui est le référentiel Fedora officiel pour l'installation des packages PHP.

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

Activer le remi référentiel et désactiver le remi-modular dépôt. Cela active le référentiel requis pour installer les packages PHP 7.4.

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

Installez PHP 7.4 avec quelques packages supplémentaires.

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

Vérifiez si PHP fonctionne correctement.

$ php --version

Vous devriez voir une sortie similaire.

PHP 7.4.6 (cli) (built: May 12 2020 08:09:15) ( NTS ) 
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

Installer MariaDB

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

Fedora 32 est livré par défaut avec MariaDB 10.4 qui est la dernière version stable disponible à ce jour, nous allons donc l'utiliser.

Pour installer MariaDB, exécutez la commande suivante.

$ sudo dnf install mariadb-server -y

Vérifiez si MariaDB est installé correctement.

$ mysql --version

Vous devriez voir la sortie suivante.

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

Activez et démarrez le service MariaDB.

$ sudo systemctl enable mariadb
$ sudo systemctl start mariadb

Exécutez la commande suivante pour effectuer la configuration par défaut, par exemple en donnant un mot de passe root, en supprimant les utilisateurs anonymes, en interdisant la connexion root à distance et en supprimant les tables de test.

$ sudo mysql_secure_installation

Avec MariaDB 10.4, il vous sera désormais demandé d'utiliser le mot de passe root ou unix_socket brancher. Le unix_socket Le plugin vous permet de vous connecter à MariaDB avec vos informations d'identification d'utilisateur Linux. Il est considéré comme plus sûr, bien que vous ayez besoin d'un nom d'utilisateur/mot de passe traditionnel pour utiliser des applications tierces telles que phpMyAdmin. Nous nous en tiendrons à l'utilisation du plugin unix_socket pour ce tutoriel. Vous pouvez toujours utiliser phpMyAdmin via n'importe quel utilisateur spécifique que vous créez pour vos bases de données.

Appuyer sur Entrée choisit 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]
... skipping.

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 ça. La prochaine fois que vous voudrez vous connecter à MySQL, utilisez la commande suivante

$ sudo mysql

Entrez votre mot de passe root lorsque vous y êtes invité.

Installer Redis

Fedora 32 contient la version 5.0.8 du package Redis, mais le référentiel Remi que nous avons installé précédemment pour PHP contient la dernière version de Redis (v6.0.1) au moment de la rédaction de ce didacticiel.

Utilisez la commande suivante pour installer Redis et l'extension PHP Redis correspondante.

$ sudo dnf install redis php-redis

Activez le service Redis.

$ sudo systemctl enable --now redis

Configurer le serveur Redis

Effectuons quelques configurations de base sur le serveur Redis.

Ouvrez le fichier /etc/redis.conf avec l'éditeur Nano.

$ sudo nano /etc/redis.conf

Si vous souhaitez que les clients distants se connectent à votre instance Redis, recherchez la ligne bind 127.0.0.1 et remplacez-le par ce qui suit.

bind 0.0.0.0

Vous pouvez également modifier le port par défaut sur lequel Redis écoute de 6379 à une valeur de votre choix.

port 3458

Pour configurer Redis en tant que serveur de cache, définissez les valeurs suivantes comme indiqué.

maxmemory 256mb
maxmemory-policy allkeys-lru

Cela indique à Redis de supprimer toute clé à l'aide de l'algorithme LRU lorsque la mémoire maximale de 256 Mo est atteinte. Vous pouvez définir la valeur de la mémoire en fonction de vos besoins et du serveur que vous utilisez.

Vous pouvez définir un mot de passe afin que tout client qui a besoin de Redis doive d'abord s'authentifier. Pour ce faire, définissez un mot de passe à l'aide de la directive suivante.

requirepass  <AuthPassword>

Vous pouvez trouver plus de directives à modifier dans le fichier de configuration. Une fois que vous avez terminé, appuyez sur Ctrl + X et entrez Y lorsque vous êtes invité à enregistrer le fichier.

Redémarrez le serveur Redis pour appliquer les modifications.

$ sudo systemctl restart redis

Nous devrons également ajouter la règle dans notre pare-feu pour permettre à Redis de fonctionner.

$ sudo firewall-cmd --zone=public --permanent --add-port=6379/tcp
$ sudo firewall-cmd --reload

Vous devrez modifier la valeur dans la commande ci-dessus pour qu'elle corresponde au port que vous avez choisi dans le fichier de configuration ci-dessus.

Installer Nginx

Fedora 32 est livré par défaut avec la dernière version stable de Nginx. (1.18.0).

Installez Nginx.

$ sudo dnf install nginx -y

Vérifiez s'il fonctionne correctement.

$ nginx -v

Vous devriez voir la sortie suivante en fonction de la version de Nginx que vous avez choisi d'installer.

nginx version: nginx/1.18.0

Démarrez et activez Nginx.

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

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

Configurer Nginx

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

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

Créez le répertoire où votre site vivra.

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

Utiliser le -p crée des répertoires parents qui n'existaient pas auparavant.

Exécutez la commande suivante pour ajouter un fichier de configuration pour votre site.

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

Collez 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;
  }
}

Appuyez sur Ctrl + X pour fermer l'éditeur et appuyez sur Y lorsque vous êtes invité à enregistrer le fichier.

Ce fichier suppose que nous hébergerons example.com dans le répertoire /var/www/html . Si vous n'utilisez aucun domaine et que vous configurez votre serveur pour qu'il soit accessible uniquement via l'adresse IP/l'hôte local, vous devrez supprimer les paramètres de blocage de serveur correspondants de nginx.conf fichier sinon il gâchera le bloc de serveur que vous allez créer.

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

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

Ouvrez le /etc/nginx/nginx.conf fichier à éditer.

$ sudo nano /etc/nginx/nginx.conf	

Collez 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;

Modifiez la valeur de types_hash_max_size de 2048 à 4096.

types_hash_max_size 4096;

Appuyez sur Ctrl + X pour fermer l'éditeur et appuyez sur Y lorsque vous êtes invité à enregistrer le fichier. Testez la configuration Nginx.

$ sudo nginx -t

Vous devriez voir la sortie suivante indiquant que votre configuration est correcte.

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

Rechargez le service Nginx.

$ sudo systemctl reload nginx

Configurer PHP-FPM

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

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

Nous devons définir l'utilisateur/groupe Unix de processus PHP sur nginx . Trouvez le user=apache et group=apache lignes dans le fichier et changez-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
...

Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.

Redémarrez le processus PHP-fpm.

$ sudo systemctl restart php-fpm

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

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

Ajoutez-y le contenu suivant et enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.

<?php phpinfo();

Lancez http://<yourserverip>/test.php dans votre navigateur Web et vous devriez voir ce qui suit.

Installer phpMyAdmin

Remi Repository contient la dernière version de phpMyAdmin afin que nous puissions simplement l'installer en utilisant la commande suivante.

$ sudo dnf install phpmyadmin

Il s'installe dans le /usr/share/phpMyAdmin répertoire.

Configurer phpMyAdmin

Pour que le serveur Web Nginx trouve et serve correctement les fichiers phpMyAdmin, nous devrons créer un lien symbolique depuis son emplacement réel vers le répertoire de documents racine de Nginx.

Pour ce faire, exécutez la commande suivante.

$ sudo ln -s /usr/share/phpmyadmin /var/www/example.com/html/phpmyadmin

Votre installation phpMyAdmin est opérationnelle. Pour y accéder, ouvrez simplement http://example.com/phpmyadmin .

Si vous obtenez des erreurs de session php, exécutez la commande suivante pour accorder les autorisations appropriées au répertoire de session PHP. Vérifiez votre chemin de session à partir du test.php fichier que nous avons créé précédemment. Pour nous, c'est à /var/lib/php/session .

$ sudo chown -R nginx:nginx /var/lib/php/session

Par défaut, cet emplacement par défaut doit être modifié car il s'agit de l'emplacement le plus courant où un pirate informatique peut localiser votre installation phpMyAdmin. Pour ce faire, exécutez la commande suivante.

$ sudo mv phpmyadmin sm123

Fondamentalement, nous avons déplacé notre emplacement phpMyAdmin vers sm123 dossier. Pour y accéder, vous devrez maintenant ouvrir http://example.com/sm123 dans votre navigateur.

Puisque nous utilisons ici unix_authentication avec MySQL, il n'y a pas d'utilisateur root auquel se connecter via phpMyAdmin. Vous devrez d'abord créer un utilisateur MySQL et lui donner des privilèges sur les bases de données pour pouvoir utiliser phpMyAdmin.

Configurer Opcache

L'installation de phpMyAdmin à partir du référentiel de Remi installe également Opcache. Si vous n'avez pas installé phpMyAdmin et que vous ne le souhaitez pas, vous pouvez simplement installer Opcache à l'aide de la commande suivante.

$ sudo dnf install php-opcache	

Vérifiez qu'il a été installé.

$ php -v
PHP 7.4.5 (cli) (built: Apr 14 2020 12:54:33) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.5, Copyright (c), by Zend Technologies

Pour modifier les paramètres d'Opcache, ouvrez le fichier /etc/php.d/10-opcache.ini .

$ sudo nano /etc/php.d/10-opcache.ini

Les paramètres suivants devraient vous permettre de démarrer avec Opcache et sont généralement recommandés pour de bonnes performances. Vous pouvez activer une configuration en la décommentant en supprimant ; devant.

opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60

Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.

Redémarrez votre serveur pour appliquer les paramètres.

$ sudo systemctl reload nginx

Installer SSL via Let's Encrypt

SSL est devenu un élément essentiel de tout site Web. Ici, nous allons installer SSL en utilisant le service Let's Encrypt.

Pour cela, installez d'abord l'outil Certbot.

$ sudo dnf install certbot-nginx

Générez les certificats.

$ sudo certbot --nginx -d example.com -d www.example.com -d phpmyadmin.example.com

Nous créons des certificats pour les deux :notre site principal et le domaine phpMyAdmin.

Si c'est la première fois que vous exécutez certbot sur votre système, il vous sera demandé une adresse e-mail et d'accepter les conditions d'utilisation. Il vous sera également demandé si vous acceptez de partager des données avec la fondation EFF, ce à quoi vous pouvez dire non. Après cela, certbot communiquera avec les serveurs Let's Encrypt et lancera un défi pour vérifier vos domaines.

Si cela réussit, il vous sera demandé comment gérer les redirections HTTPS.

Please choose whether HTTPS access is required or optional.
-------------------------------------------------------------------------------
1: Easy - Allow both HTTP and HTTPS access to these sites
2: Secure - Make all requests redirect to secure HTTPS access
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Sélectionnez votre choix et appuyez sur Entrée. Vos certificats seront créés et votre configuration Nginx sera mise à jour avec les paramètres SSL.

Vos certificats sont prêts et vous pouvez ouvrir votre site maintenant en vous rendant sur https://example.com

Configuration du renouvellement automatique SSL

C'est la dernière étape avant de terminer ce tutoriel. Pour renouveler le SSL, nous utiliserons cron.

Nous devons ajouter une entrée à Cron en utilisant l'éditeur Crontab. Pour ouvrir l'éditeur crontab, exécutez la commande suivante.

$ EDITOR=nano sudo crontab -e

EDITOR=nano devant la commande garantit que crontab ouvre l'éditeur Nano pour nous car Fedora préfère par défaut l'éditeur VIM.

Collez la ligne suivante en bas.

. . .
25 2 * * * /usr/bin/certbot renew --quiet

Le 25 2 * * * une partie de cette ligne signifie "exécuter la commande suivante à 2h25, tous les jours". Vous pouvez choisir à tout moment.

Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.

Le renew La commande pour Certbot vérifiera tous les certificats installés sur le système et mettra à jour ceux qui doivent expirer dans moins de trente jours. --quiet indique à Certbot de ne pas afficher d'informations ou d'attendre l'entrée de l'utilisateur.

Cette commande sera exécutée quotidiennement.

Conclusion

C'est tout pour ce tutoriel. Votre configuration LEMP est terminée et vous pouvez commencer à créer et à héberger vos sites Web et applications.


Fedora
  1. Comment installer LEMP (Linux, Nginx, MariaDB, PHP) sur le serveur Fedora 30

  2. Comment installer Nginx avec PHP et MySQL (pile LEMP) sur CentOS 7

  3. Comment installer Pagekit CMS avec Nginx sur Fedora 29

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

  5. Comment installer Phorum avec Nginx sur Fedora 30

Comment installer Nginx avec PHP et MySQL (pile LEMP) sur CentOS 7.6

Comment installer Nginx, MariaDB, PHP (pile LEMP) sur Debian 9

Comment installer Linux, Nginx, MariaDB, PHP (pile LEMP) sur Linux Mint 19

Comment installer la pile LEMP (Nginx, MariaDB et PHP) sur AlmaLinux 8

Comment installer la pile LEMP sur Fedora 35

Comment installer Linux, Nginx, MariaDB et PHP (LEMP) sur Fedora 22