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.