Comment installer et configurer une pile LEMP à l’aide de collections de logiciels sur CentOS 7

L'auteur a sélectionné lesApache Software Foundation pour recevoir un don de 100 $ dans le cadre du programmeWrite for DOnations.

introduction

Une pile logicielle LEMP est un groupe de logiciels open source 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'exploitationLinux, avec le serveur webENginx (qui remplace le composant Apache d'une pile LAMP). Les données du site sont stockées dans une base de données sySQLM(utilisant MariaDB) et le contenu dynamique est traité parPHP.

Les composants de la pile LEMP sont parfois installés à l'aide des CentOS 7EPEL repository. 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 depuis EPEL, même si cette version n'a pas été prise en chargefor a long time. Pour obtenir les versions les plus récentes du logiciel, 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 de collections de logiciels, 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 suivantthe CentOS 7 initial server setup guide, y compris un utilisateur sudo non root.

[[step-1 -—- enabled-the-software-collections-repository]] == Étape 1 - Activation du référentiel de collections de logiciels

Pour avoir accès aux SCL pour CentOS, vous devez installer le fichier de version de 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 ou interférer avec Python 2.7.

Tous les fichiers de configuration des packages SCL sont stockés dans le répertoire correspondant à l'intérieur du 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 quePATH,LD_LIBRARY_PATH etMANPATH. Ces scripts sont stockés dans le système de fichiers en tant que/opt/rh/package-name/enable.

Vous êtes maintenant prêt à installer les packages décrits dans ce guide.

[[step-2 -—- Installing-the-nginx-web-server]] == Étape 2 - Installation du serveur Web Nginx

Afin d’afficher des pages Web aux visiteurs, nous allons utiliser Nginx, un serveur Web moderne et efficace.

Installez Nginx à l'aide de la commandeyum 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 entrant la commandesystemctl 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 peut être vulnérable aux accès non autorisés d'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

Ajoutez ensuite quelques règles de pare-feu pour autoriser l’accès SSH à votre serveur, ainsi que 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 implémenter les nouvelles règles de pare-feu:

sudo firewall-cmd --reload

En savoir plus sur firewalld dansHow To Set Up a Firewall Using FirewallD on CentOS 7.

Avec l’ajout de ces nouvelles règles de pare-feu, vous pouvez vérifier 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é sur votre serveur et que vous ne connaissez pas l’adresse IP publique de votre serveur, vous pouvez le trouver en tapant ce qui suit dans votre terminal:

curl -4 icanhazip.com

Saisissez l'adresse IP obtenue dans la barre d'adresse de votre navigateur Web. La page d'arrivée par défaut de Nginx devrait s'afficher:

http://server_domain_or_IP

Nginx default page

Si vous voyez cette page, vous avez correctement installé Nginx. Avant de continuer, activez le démarrage de Nginx au démarrage à l’aide de la commande suivante:

sudo systemctl enable rh-nginx112-nginx

Le serveur Nginx est maintenant installé et vous pouvez maintenant installer le logiciel de base de données MariaDB.

[[step-3 -—- Installing-mariadb-to-manage-site-data]] == É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, une solution de remplacement pour 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 dernière version 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 à l'aide de la commande suivante:

sudo systemctl start rh-mariadb102-mariadb

Avec cela, MariaDB est installé et fonctionne. Cependant, sa configuration n'est pas encore terminée.

Pour sécuriser l’installation, MariaDB est fournie 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 ce champ vide en appuyant surENTER. Ensuite, l'invite vous demandera si vous souhaitez définir un mot de passe root. Allez-y et entrezY, 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 toucheENTER à 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 racine à distance et chargera ces nouvelles règles afin que MariaDB implémente immédiatement les modifications 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.

[[step-4 -—- installation-and-configuring-php-for-processing]] == Étape 4 - Installation et configuration de PHP pour le traitement

Vous avez maintenant Nginx installé pour servir vos pages et MariaDB installé pour stocker et gérer vos données. Cependant, rien n’est encore installé qui puisse générer du contenu dynamique. C'est là que PHP entre en jeu.

Puisque Nginx ne contient pas de traitement PHP natif comme certains autres serveurs Web, vous devrez installerphp-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 paquet d'aide qui permettra à PHP de communiquer avec votre base de données. L'installation utilisera les fichiers de base de PHP nécessaires. Faites ceci en tapant:

sudo yum install rh-php71-php-fpm rh-php71-php-mysqlnd

Vos composants PHP sont maintenant installés, mais vous devez apporter un léger changement à la configuration pour renforcer la sécurité de votre configuration.

Ouvrez le fichier de configuration principal dephp.ini avec les privilègesroot:

sudo vi /etc/opt/rh/rh-php71/php.ini

Dans ce fichier, recherchez le paramètre qui définitcgi.fix_pathinfo. Ceci sera commenté avec un point-virgule (;) et sera réglé sur «1» par défaut.

Il s'agit d'un paramètre extrêmement peu sécurisé 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. En gros, cela permettrait 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 supprimant la mise en commentaire de la ligne et en la définissant sur «0», comme suit:

71/php.ini’>/etc/opt/rh/rh-php71/php.ini

cgi.fix_pathinfo=0

Enregistrez et fermez le fichier lorsque vous avez terminé (appuyez surESC, entrez:wq, puis appuyez surEnter).

Ensuite, ouvrez le fichier de configuration php-fpmwww.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. Puisque Nginx est installé sur votre serveur, recherchez les lignes qui définissent lesuser etgroup et modifiez leurs valeurs de «apache» à «nginx»:

71/php-fpm.d/www.conf’>/etc/opt/rh/rh-php71/php-fpm.d/www.conf

user = nginx
group = nginx

Puis enregistrez et fermez le fichier.

Ensuite, démarrez votre processeur PHP en tapant:

sudo systemctl start rh-php71-php-fpm

Puis activez php-fpm pour démarrer au démarrage:

sudo systemctl enable rh-php71-php-fpm

Avec cela, vous avez réussi à installer 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.

[[step-5 -—- configuration-nginx-to-use-the-php-processor]] == É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 faire est d'indiquer à Nginx d'utiliser votre processeur PHP pour le contenu dynamique.

Cette modification de configuration est effectuée au niveau du bloc serveur (les blocs serveur sont similaires aux hôtes virtuels 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 bloclocation ~ \.php$ (le segment du fichier qui gère les requêtes PHP, trouvé dans le blocserver) et son contenu en supprimant les symboles dièse (#) du début de chaque ligne. Vous devez également mettre à jour l'optionfastcgi_param versSCRIPT 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 effectué les modifications nécessaires, le blocserver 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;
    #}
}
...

Une fois les modifications apportées, vous pouvez enregistrer le fichier et quitter l'éditeur.

Ensuite, testez les erreurs de syntaxe dans votre fichier de configuration 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 appliquer les modifications 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 en mesure de fournir correctement le contenu aux visiteurs de votre site.

[[step-6 -—- creation-a-php-file-to-test-configuration]] == É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. Ceci est fait en créant un fichier test PHP dans la racine de notre document.

Ouvrez un nouveau fichier appeléinfo.php dans 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 retournera des informations sur votre serveur:

112/root/usr/share/nginx/html/info.php’>/opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php

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 générée par PHP contenant des informations sur votre serveur:

PHP page info

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 rend la page correctement, il est préférable de supprimer le fichier que vous avez créé, car cela peut en réalité donner aux utilisateurs non autorisés des indications sur votre configuration susceptibles de les aider à tenter leur chance. Vous pouvez toujours régénérer ce fichier si vous en avez besoin plus tard.

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 servir du contenu Web à vos visiteurs.

Les SCL sont également utilisés pour installer diverses versions de logiciels et basculer entre elles. Vous pouvez voir la liste de toutes les collections installées sur le système en lançant:

scl --list

Si vous êtes intéressé, vous pouvez trouver plus d'informations sur les collections de logiciels sur lesofficial site.