Comment installer et configurer une pile LEMP à l'aide de collections de logiciels sur CentOS 7
L'auteur a sélectionné Apache Software Foundation pour recevoir un don de 100 $ dans le cadre du programme Write for DOnations.
Introduction
Une pile logicielle LEMP est un groupe de logiciels open source qui sont généralement installés ensemble pour permettre à un serveur d'héberger des sites Web dynamiques et des applications Web. Ce terme est en fait un acronyme qui représente le système d'exploitation Linux, avec le serveur web ENginx (qui remplace le composant Apache d'une pile LAMP). Les données du site sont stockées dans une base de données MySQL (utilisant MariaDB), et le contenu dynamique est traité par PHP.
Les composants de la pile LEMP sont parfois installés à l'aide du référentiel CentOS 7 EPEL . Cependant, ce référentiel contient des packages obsolètes. Par exemple, vous ne pouvez pas installer de version de PHP supérieure à 5.4.16 à partir d'EPEL, même si cette version n'est pas prise en charge depuis longtemps . Afin d'obtenir les versions les plus récentes des logiciels, il est recommandé d'utiliser des collections de logiciels, également appelées SCL. Les SCL sont des collections de ressources de développement fournies par RedHat qui vous permettent d'utiliser plusieurs versions de logiciels sur le même système sans affecter les packages précédemment installés.
Dans ce guide, vous allez installer une pile LEMP sur un serveur CentOS 7. Le système d'exploitation CentOS prend en charge le composant Linux. Vous allez installer le reste des composants à l'aide du référentiel Software Collections, puis les configurer pour servir une simple page Web.
Conditions préalables
Avant de commencer ce didacticiel, vous devez configurer le serveur CentOS 7 en suivant le guide de configuration initiale du serveur CentOS 7 , y compris un utilisateur sudo non root.
Étape 1 - Activation du référentiel Software Collections
Afin d'accéder aux SCL pour CentOS, pour installer le fichier de version CentOS Linux Software Collections :
sudo yum install centos-release-scl
Affichez la liste des packages SCL disponibles à l'aide de la commande suivante :
yum --disablerepo='*' --enablerepo='centos-sclo-rh' --enablerepo='centos-sclo-sclo' list available
Pour éviter tout conflit à l'échelle du système, les packages SCL sont installés dans le répertoire /opt/rh
. Cela vous permet, par exemple, d'installer Python 3.5 sur une machine CentOS 7 sans supprimer ni interférer avec Python 2.7.
Tous les fichiers de configuration des packages SCL sont stockés dans le répertoire correspondant dans le répertoire /etc/opt/rh/
. Les packages SCL fournissent des scripts shell qui définissent les variables d'environnement nécessaires à l'utilisation des applications incluses, telles que PATH
, LD_LIBRARY_PATH
et MANPATH
. Ces scripts sont stockés dans le système de fichiers sous /opt/rh/package-name/enable
.
Vous êtes maintenant prêt à commencer l'installation des packages décrits dans ce guide.
Étape 2 - Installation du serveur Web Nginx
Afin d'afficher les pages Web aux visiteurs, nous allons utiliser Nginx, un serveur Web moderne et efficace.
Installez Nginx à l'aide de la commande yum
suivante. Assurez-vous de remplacer la valeur en surbrillance par la version de Nginx que vous souhaitez installer ; la version la plus récente aura le numéro le plus élevé dans le nom du package (112
au moment de la rédaction de cet article) :
sudo yum install rh-nginx112
Une fois l'installation terminée, démarrez le service Nginx :
sudo systemctl start rh-nginx112-nginx
Confirmez que Nginx est en cours d'exécution en saisissant la commande systemctl status
:
sudo systemctl status rh-nginx112-nginx
Output● rh-nginx112-nginx.service - The nginx HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/rh-nginx112-nginx.service; disabled; vendor preset: disabled) Active: active (running) since Fri 2018-03-19 15:15:43 UTC; 1min 17s ago Main PID: 10556 (nginx) CGroup: /system.slice/rh-nginx112-nginx.service ├─10556 nginx: master process /opt/rh/rh-nginx112/root/usr/sbin/nginx ├─10557 nginx: worker process └─10558 nginx: worker process Mar 19 15:15:43 lemp-centos-222 systemd[1]: Starting The nginx HTTP and reverse proxy server... Mar 19 15:15:43 lemp-centos-222 nginx-scl-helper[10541]: nginx: the configuration file /etc/opt/rh/rh-nginx... ok Mar 19 15:15:43 lemp-centos-222 nginx-scl-helper[10541]: nginx: configuration file /etc/opt/rh/rh-nginx112/...ful Mar 19 15:15:43 lemp-centos-222 systemd[1]: Started The nginx HTTP and reverse proxy server. Hint: Some lines were ellipsized, use -l to show in full.
À ce stade, votre serveur pourrait être vulnérable à un accès non autorisé par des utilisateurs non autorisés. Pour résoudre ce problème, configurez un pare-feu à l'aide de firewalld. Vous devrez peut-être d'abord installer firewalld, ce qui peut être fait avec la commande suivante :
sudo yum install firewalld
Ensuite, démarrez le service firewalld :
sudo systemctl start firewalld
Ensuite, ajoutez quelques règles de pare-feu pour autoriser l'accès SSH à votre serveur et les connexions HTTP et HTTPS à Nginx :
sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --zone=public --permanent --add-service=http sudo firewall-cmd --zone=public --permanent --add-service=https
Rechargez firewalld pour mettre en œuvre les nouvelles règles de pare-feu :
sudo firewall-cmd --reload
En savoir plus sur firewalld dans Comment configurer un pare-feu à l'aide de FirewallD sur CentOS 7.
Avec ces nouvelles règles de pare-feu ajoutées, vous pouvez tester si le serveur est opérationnel en accédant au nom de domaine ou à l'adresse IP publique de votre serveur dans votre navigateur Web.
Si vous n'avez pas de nom de domaine pointé vers votre serveur et que vous ne connaissez pas l'adresse IP publique de votre serveur, vous pouvez la trouver en tapant ce qui suit dans votre terminal :
curl -4 icanhazip.com
Tapez l'adresse IP résultante dans la barre d'adresse de votre navigateur Web et vous devriez voir la page de destination par défaut de Nginx :
http://server_domain_or_IP
Si vous voyez cette page, vous avez installé Nginx avec succès. Avant de continuer, activez Nginx pour qu'il démarre au démarrage à l'aide de la commande suivante :
sudo systemctl enable rh-nginx112-nginx
Le serveur Nginx est maintenant installé et vous pouvez passer à l'installation du logiciel de base de données MariaDB.
Étape 3 - Installation de MariaDB pour gérer les données du site
Maintenant que nous avons un serveur Web, il est temps d'installer MariaDB, un remplaçant de MySQL, pour stocker et gérer les données de votre site.
Installez MariaDB avec la commande suivante. Encore une fois, remplacez la valeur en surbrillance par le numéro de version que vous souhaitez installer, le numéro le plus élevé étant la version la plus récente disponible (102
, au moment de la rédaction de cet article) :
sudo yum install rh-mariadb102
Une fois l'installation terminée, démarrez le service MariaDB avec la commande suivante :
sudo systemctl start rh-mariadb102-mariadb
Avec cela, MariaDB est installé et en cours d'exécution. Cependant, sa configuration n'est pas encore terminée.
Pour sécuriser l'installation, MariaDB est installé avec un script de sécurité qui vous invite à modifier certains paramètres par défaut non sécurisés. Exécutez le script en tapant :
source /opt/rh/rh-mariadb102/enable mysql_secure_installation
L'invite vous demandera votre mot de passe root actuel. Puisque vous venez d'installer MySQL, vous n'en aurez probablement pas, alors laissez-le vide en appuyant sur ENTER
. Ensuite, l'invite vous demandera si vous souhaitez définir un mot de passe root. Allez-y et entrez Y
, et suivez les instructions :
. . . Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorization. Set root password? [Y/n] Y New password: password Re-enter new password: password Password updated successfully! Reloading privilege tables.. ... Success! . . .
Pour le reste des questions, appuyez sur la touche ENTER
à chaque invite pour accepter les valeurs par défaut. Cela supprimera certains utilisateurs anonymes et la base de données de test, désactivera les connexions root à distance et chargera ces nouvelles règles afin que MariaDB implémente immédiatement les modifications que nous avons apportées.
La dernière chose à faire ici est de permettre à MariaDB de démarrer au démarrage. Utilisez la commande suivante pour le faire :
sudo systemctl enable rh-mariadb102-mariadb
À ce stade, votre système de base de données est maintenant configuré et vous pouvez passer à la configuration de PHP sur votre serveur.
Étape 4 - Installation et configuration de PHP pour le traitement
Vous avez maintenant installé Nginx pour servir vos pages et MariaDB pour stocker et gérer vos données. Cependant, vous n'avez toujours rien installé qui puisse générer du contenu dynamique. C'est là qu'intervient PHP.
Étant donné que Nginx ne contient pas de traitement PHP natif comme certains autres serveurs Web, vous devrez installer php-fpm
, qui signifie « gestionnaire de processus fastCGI ». Plus tard, vous configurerez Nginx pour transmettre les requêtes PHP à ce logiciel pour traitement.
Installez ce module et récupérez également un package d'assistance qui permettra à PHP de communiquer avec votre backend de base de données. L'installation récupérera les fichiers de base PHP nécessaires. Faites cela en tapant :
sudo yum install rh-php71-php-fpm rh-php71-php-mysqlnd
Vos composants PHP sont maintenant installés, mais vous devez apporter une légère modification à la configuration pour renforcer la sécurité de votre configuration.
Ouvrez le fichier de configuration principal php.ini
avec les privilèges root :
sudo vi /etc/opt/rh/rh-php71/php.ini
Dans ce fichier, recherchez le paramètre qui définit cgi.fix_pathinfo
. Cela sera commenté avec un point-virgule (;) et mis à "1" par défaut.
Il s'agit d'un paramètre extrêmement peu sûr car il indique à PHP d'essayer d'exécuter le fichier le plus proche qu'il peut trouver si le fichier PHP demandé est introuvable. Cela permettrait essentiellement aux utilisateurs de créer des requêtes PHP d'une manière qui leur permettrait d'exécuter des scripts qu'ils ne devraient pas être autorisés à exécuter.
Modifiez ces deux conditions en décommentant la ligne et en la définissant sur "0" comme ceci :
/etc/opt/rh/rh-php<^>71<^>/php.ini
cgi.fix_pathinfo=0
Enregistrez et fermez le fichier lorsque vous avez terminé (appuyez sur ESC
, saisissez :wq
, puis appuyez sur Enter
).
Ensuite, ouvrez le fichier de configuration php-fpm www.conf
:
sudo vi /etc/opt/rh/rh-php71/php-fpm.d/www.conf
Par défaut, ce fichier est configuré pour fonctionner avec le serveur Apache. Étant donné que Nginx est installé sur votre serveur, recherchez les lignes qui définissent user
et group
et changez leurs valeurs de « apache » à « nginx » :
/etc/opt/rh/rh-php<^>71<^>/php-fpm.d/www.conf
user = nginx group = nginx
Ensuite, enregistrez et fermez le fichier.
Ensuite, démarrez votre processeur PHP en tapant :
sudo systemctl start rh-php71-php-fpm
Activez ensuite php-fpm pour qu'il démarre au démarrage :
sudo systemctl enable rh-php71-php-fpm
Avec cela, vous avez installé avec succès PHP sur votre serveur. Cependant, il doit toujours être configuré pour fonctionner avec les autres logiciels que vous avez installés pour permettre à votre serveur de servir correctement le contenu de votre site.
Étape 5 - Configuration de Nginx pour utiliser le processeur PHP
À ce stade, tous les composants requis d'une pile LEMP sont installés. Le seul changement de configuration que vous devez encore apporter est de dire à Nginx d'utiliser votre processeur PHP pour le contenu dynamique.
Ce changement de configuration est effectué au niveau du bloc serveur (les blocs serveur sont similaires aux hôtes virtuels d'Apache). Ouvrez le fichier de configuration de bloc de serveur Nginx par défaut en tapant :
sudo vi /etc/opt/rh/rh-nginx112/nginx/nginx.conf
Décommentez le bloc location ~ \.php$
(le segment du fichier qui gère les requêtes PHP, trouvé dans le bloc server
) et son contenu en supprimant les symboles dièse (#) au début de chaque ligne. Vous devez également mettre à jour l'option fastcgi_param
vers SCRIPT FILENAME $document_root$fastcgi_script_name
. Cela informe PHP de l'emplacement de la racine du document où il peut trouver des fichiers à traiter.
Après avoir apporté les modifications nécessaires, le bloc server
ressemblera à ceci :
/etc/nginx/sites-available/default
... server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /opt/rh/rh-nginx112/root/usr/share/nginx/html; # Load configuration files for the default server block. include /etc/opt/rh/rh-nginx112/nginx/default.d/*.conf; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } ...
Lorsque vous avez effectué les modifications, vous pouvez enregistrer le fichier et quitter l'éditeur.
Ensuite, testez votre fichier de configuration pour les erreurs de syntaxe en exécutant les commandes suivantes :
source /opt/rh/rh-nginx112/enable sudo nginx -t
Si des erreurs sont signalées, revenez en arrière et revérifiez votre fichier avant de continuer.
Une fois votre fichier de configuration valide, rechargez Nginx pour mettre en œuvre les modifications que vous avez apportées :
sudo systemctl reload rh-nginx112-nginx
Maintenant que Nginx, PHP et MariaDB ont été installés et configurés, il ne reste plus qu'à confirmer que la configuration de la pile LEMP est capable de servir correctement le contenu aux visiteurs de votre site.
Étape 6 - Création d'un fichier PHP pour tester la configuration
Votre pile LEMP est maintenant complètement configurée et vous pouvez la tester pour valider que Nginx est capable de transmettre correctement les fichiers .php
à votre processeur PHP. Cela se fait en créant un fichier PHP de test dans notre racine de document.
Ouvrez un nouveau fichier nommé info.php
à la racine du document :
sudo vi /opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php
Ajoutez la ligne suivante au nouveau fichier. Ceci est un code PHP valide qui renverra des informations sur votre serveur :
/opt/rh/rh-nginx<^>112<^>/root/usr/share/nginx/html/info.php
<?php phpinfo(); ?>
Lorsque vous avez terminé, enregistrez et fermez le fichier. Ensuite, visitez cette page dans votre navigateur Web en visitant le nom de domaine ou l'adresse IP publique de votre serveur suivi de /info.php
:
http://server_domain_or_IP/info.php
Vous verrez une page Web qui a été générée par PHP avec des informations sur votre serveur :
Si vous voyez une page qui ressemble à ceci, vous avez configuré le traitement PHP avec Nginx avec succès.
Après avoir vérifié que Nginx restitue correctement la page, il est préférable de supprimer le fichier que vous avez créé car il peut en fait donner aux utilisateurs non autorisés des indices sur votre configuration qui pourraient les aider à tenter de s'introduire. Vous pouvez toujours régénérer ce fichier si vous en avez besoin ultérieurement.
Supprimez le fichier en tapant :
sudo rm /opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php
Avec cela, vous avez confirmé que tous les composants de la pile LEMP sont installés et configurés correctement sur votre serveur.
Conclusion
Vous avez maintenant une pile LEMP entièrement configurée sur votre serveur CentOS 7. Cela vous donne une base très flexible pour fournir du contenu Web à vos visiteurs.
Les SCL sont également utilisées pour installer différentes versions de logiciels et basculer entre elles. Vous pouvez voir la liste de toutes les collections installées sur le système en exécutant :
scl --list
Si vous êtes intéressé, vous pouvez trouver plus d'informations sur les collections de logiciels sur le site officiel.