Comment installer une pile Linux, Nginx, MySQL, PHP (LEMP) sur CentOS 7

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.

Dans ce guide, une pile LEMP sera installée sur un VPS CentOS 7. CentOS remplira notre première exigence: un système d'exploitation Linux.

[.note] #Note: La pile LEMP peut être installée automatiquement sur votre Droplet en ajoutantthis script à ses données utilisateur lors de son lancement. Consultezthis tutorial pour en savoir plus sur les données utilisateur Droplet.
#

Conditions préalables

Avant de commencer avec ce guide, vous devez avoir un compte utilisateur distinct, non root, configuré sur votre serveur. Vous pouvez apprendre comment faire cela en effectuant les étapes 1 à 4 dans lesinitial server setup for CentOS 7.

Note about SELinux: Si vous rencontrez des problèmes avec Nginx qui ne fonctionne pas, assurez-vous que le contexte SELinux de vos fichiers de configuration Nginx est correct ou changez le mode SELinux enpermissive oudisabled.

[[step-one -—- install-nginx]] == Première étape - Installer Nginx

Pour afficher les pages Web destinées aux visiteurs de notre site, nous allons utiliser Nginx, un serveur Web moderne et efficace.

Pour ajouter le référentiel CentOS 7 EPEL, ouvrez le terminal et utilisez la commande suivante:

sudo yum install epel-release

Puisque nous utilisons une commandesudo, ces opérations sont exécutées avec les privilèges root. Il vous demandera le mot de passe de votre utilisateur régulier pour vérifier que vous êtes autorisé à exécuter des commandes avec les privilèges root.

Maintenant que le référentiel Nginx est installé sur votre serveur, installez Nginx à l'aide de la commandeyum suivante:

sudo yum install nginx

Ensuite, votre serveur Web est installé.

Une fois installé, vous pouvez démarrer Nginx sur votre VPS:

sudo systemctl start nginx

Vous pouvez immédiatement effectuer une vérification ponctuelle pour vérifier que tout s'est passé comme prévu en visitant l'adresse IP publique de votre serveur dans votre navigateur Web (voir la note sous le titre suivant pour savoir quelle est votre adresse IP publique si vous ne disposez pas de ces informations.) déjà):

Open in a web browser:http://server_domain_name_or_IP/

Vous verrez la page Web par défaut de CentOS 7 Nginx, qui est là à des fins d’information et de test. Ça devrait ressembler a quelque chose comme ca:

CentOS 7 Nginx Default

Si vous voyez cette page, votre serveur Web est maintenant correctement installé.

Avant de continuer, vous voudrez que Nginx puisse démarrer au démarrage. Utilisez la commande suivante pour le faire:

sudo systemctl enable nginx

Comment trouver l’adresse IP publique de votre serveur

Si vous ne connaissez pas l’adresse IP publique de votre serveur, vous pouvez la trouver de différentes façons. Il s’agit généralement de l’adresse que vous utilisez pour vous connecter à votre serveur via SSH.

A partir de la ligne de commande, vous pouvez trouver ceci de plusieurs manières. Tout d'abord, vous pouvez utiliser les outilsiproute2 pour obtenir votre adresse en tapant ceci:

ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

Cela vous donnera une ou deux lignes en arrière. Ce sont toutes deux des adresses correctes, mais votre ordinateur ne peut en utiliser qu’une, alors n'hésitez pas à les essayer.

Une autre méthode consiste à utiliser un tiers pour vous dire commentit voit votre serveur. Vous pouvez le faire en demandant à un serveur spécifique quelle est votre adresse IP:

curl http://icanhazip.com

Quelle que soit la méthode utilisée pour obtenir votre adresse IP, vous pouvez la saisir dans la barre d'adresse de votre navigateur Web pour accéder à votre serveur.

[[step-two -—- install-mysql-mariadb]] == Deuxième étape - Installer MySQL (MariaDB)

Maintenant que notre serveur Web est opérationnel, il est temps d'installer MariaDB, une solution de remplacement MySQL. MariaDB est une plate-forme développée par la communauté du système de gestion de base de données relationnelle MySQL. Fondamentalement, il organisera et fournira un accès aux bases de données sur lesquelles notre site peut stocker des informations.

Encore une fois, nous pouvons utiliseryum pour acquérir et installer notre logiciel. Cette fois-ci, nous installerons également d’autres packages «auxiliaires» qui nous aideront à faire communiquer nos composants:

sudo yum install mariadb-server mariadb

Une fois l'installation terminée, vous devez démarrer MariaDB avec la commande suivante:

sudo systemctl start mariadb

Maintenant que notre base de données MySQL est en cours d’exécution, nous souhaitons exécuter un simple script de sécurité permettant de supprimer certaines valeurs par défaut dangereuses et de verrouiller un peu l’accès à notre système de base de données. Démarrez le script interactif en exécutant:

sudo mysql_secure_installation

L'invite vous demandera votre mot de passe root actuel. Comme vous venez d’installer MySQL, vous n’en aurez probablement pas. Par conséquent, laissez le champ vide en appuyant sur Entrée. Ensuite, l'invite vous demandera si vous souhaitez définir un mot de passe root. Allez-y et entrezY, et suivez les instructions:

mysql_secure_installation prompts: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 authorisation.

New password: password
Re-enter new password: password
Password updated successfully!
Reloading privilege tables..
 ... Success!

Pour le reste des questions, vous devez simplement appuyer sur la touche «Entrée» à travers chaque invite pour accepter les valeurs par défaut. Cela supprimera des exemples d'utilisateurs et de bases de données, désactivera les connexions à la racine distante et chargera ces nouvelles règles afin que MySQL respecte immédiatement les modifications que nous avons apportées.

La dernière chose que vous voudrez faire est de permettre à MariaDB de démarrer au démarrage. Utilisez la commande suivante pour le faire:

sudo systemctl enable mariadb

À ce stade, votre système de base de données est maintenant configuré et nous pouvons continuer.

[[step-three -—- install-php]] == Troisième étape - Installer PHP

PHP est le composant de notre configuration qui traitera le code pour afficher le contenu dynamique. Il peut exécuter des scripts, se connecter à nos bases de données MySQL pour obtenir des informations et transmettre le contenu traité à notre serveur Web.

Nous pouvons à nouveau tirer parti du systèmeyum pour installer nos composants. Nous allons aussi inclure les paquets php-mysql et php-fpm:

sudo yum install php php-mysql php-fpm

Configurer le processeur PHP

Nos composants PHP sont maintenant installés, mais nous devons apporter une légère modification à la configuration pour rendre notre configuration plus sécurisée.

Ouvrez le fichier de configuration principal php-fpm avec les privilèges root:

sudo vi /etc/php.ini

Ce que nous recherchons dans ce fichier est le paramètre qui définit cgi.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 un fichier PHP ne correspond pas exactement. 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.

Nous allons modifier ces deux conditions en supprimant la mise en commentaire de la ligne et en la réglant sur «0», comme suit:

/etc/php.ini excerpt

cgi.fix_pathinfo=0

Enregistrez et fermez le fichier lorsque vous avez terminé.

Ensuite, ouvrez le fichier de configuration php-fpmwww.conf:

sudo vi /etc/php-fpm.d/www.conf

Trouvez la ligne qui spécifie le paramètrelisten et modifiez-la pour qu'elle ressemble à ce qui suit:

/etc/php-php.d/www.conf — 1 of 3

listen = /var/run/php-fpm/php-fpm.sock

Ensuite, trouvez les lignes qui définissent leslisten.owner etlisten.group et décommentez-les. Ils devraient ressembler à ceci:

/etc/php-php.d/www.conf — 2 of 3

listen.owner = nobody
listen.group = nobody

Enfin, recherchez les lignes qui définissent lesuser etgroup et modifiez leurs valeurs de «apache» à «nginx»:

/etc/php-php.d/www.conf — 3 of 3

user = nginx
group = nginx

Puis enregistrez et quittez.

Maintenant, nous avons juste besoin de démarrer votre processeur PHP en tapant:

sudo systemctl start php-fpm

Cela mettra en œuvre le changement que nous avons fait.

Ensuite, activez php-fpm pour qu'il démarre au démarrage:

sudo systemctl enable php-fpm

[[step-four -—- configure-nginx-to-process-php-pages]] == Étape 4 - Configurer Nginx pour traiter les pages PHP

Maintenant, nous avons tous les composants requis installés. Le seul changement de configuration que nous devons encore faire est de dire à Nginx d’utiliser notre processeur PHP pour le contenu dynamique.

Nous faisons cela 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/nginx/conf.d/default.conf

Actuellement, avec les commentaires supprimés, le bloc serveur par défaut de Nginx se présente comme suit:

/etc/nginx/conf.d/default.conf — original

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

Nous devons apporter quelques modifications à ce fichier pour notre site.

  • Premièrement, nous devons ajouter une option index.php en tant que première valeur de notre directive index pour permettre aux fichiers d'index PHP d'être servis lorsqu'un répertoire est demandé.

  • Nous devons également modifier la directive nom_serveur pour qu'elle pointe vers le nom de domaine ou l'adresse IP publique de notre serveur.

  • Le fichier de configuration actuel comprend des lignes commentées qui définissent les routines de traitement des erreurs. Nous allons décommenter ceux qui incluent cette fonctionnalité

  • Pour le traitement PHP actuel, nous devrons décommenter une partie d’une autre section. Nous devrons également ajouter une directive try_files pour nous assurer que Nginx ne transmet pas de mauvaises requêtes à notre processeur PHP.

Les modifications que vous devez apporter sont en rouge dans le texte ci-dessous. Si vous préférez, vous pouvez simplement copier et coller tout, puis remplacer la valeur deserver_name par le nom de domaine ou l'adresse IP appropriés:

/etc/nginx/conf.d/default.conf — updated

server {
    listen       80;
    server_name  server_domain_name_or_IP;

    # note that these lines are originally from the "location /" block
    root   /usr/share/nginx/html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

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

Lorsque vous avez apporté les modifications ci-dessus, vous pouvez enregistrer et fermer le fichier.

Redémarrez Nginx pour apporter les modifications nécessaires:

sudo systemctl restart nginx

[[step-five -—- test-php-processing-on-your-web-server]] == Étape cinq - Tester le traitement PHP sur votre serveur Web

Afin de vérifier que notre système est correctement configuré pour PHP, nous pouvons créer un script PHP très basique.

Nous appellerons ce scriptinfo.php. Pour qu'Apache trouve le fichier et le serve correctement, il doit être enregistré dans un répertoire très spécifique, appelé "racine Web".

Dans CentOS 7, ce répertoire est situé à/usr/share/nginx/html/. Nous pouvons créer le fichier à cet emplacement en tapant:

sudo vi /usr/share/nginx/html/info.php

Cela ouvrira un fichier vierge. Nous voulons mettre le texte suivant, qui est un code PHP valide, dans le fichier:

Tester le script PHP

Lorsque vous avez terminé, enregistrez et fermez le fichier.

Nous pouvons maintenant vérifier si notre serveur Web peut afficher correctement le contenu généré par un script PHP. Pour essayer cela, il suffit de visiter cette page dans votre navigateur Web. Vous aurez à nouveau besoin de l’adresse IP publique de votre serveur.

L'adresse que vous souhaitez visiter sera:

Open in a web browser:http://your_server_IP_address/info.php

La page à laquelle vous venez devrait ressembler à ceci:

CentOS 7 default PHP info

Cette page vous fournit essentiellement des informations sur votre serveur du point de vue de PHP. C'est utile pour le débogage et pour vous assurer que vos paramètres sont appliqués correctement.

Si cela réussit, votre PHP fonctionne comme prévu.

Vous voudrez probablement supprimer ce fichier après ce test, car il pourrait en fait fournir des informations sur votre serveur à des utilisateurs non autorisés. Pour ce faire, vous pouvez taper ceci:

sudo rm /usr/share/nginx/html/info.php

Vous pouvez toujours recréer cette page si vous devez accéder aux informations ultérieurement.

Conclusion

Maintenant que vous avez installé une pile LEMP, vous avez beaucoup de choix pour ce qu'il faut faire ensuite. En gros, vous avez installé une plate-forme qui vous permettra d’installer la plupart des types de sites Web et de logiciels Web sur votre serveur.