Comment installer Linux, Nginx, MySQL, PHP (pile LEMP) sur Debian 8

introduction

La pile logicielle LEMP est un groupe de logiciels pouvant servir à gérer des pages Web dynamiques et des applications Web. Cet acronyme décrit un système d’exploitation Linux avec un serveur Web Nginx. Les données de base sont stockées dans la base de données MySQL et le traitement dynamique est géré par PHP.

Dans ce guide, vous allez installer une pile LEMP sur un serveur Debian à l’aide des packages fournis par le système d’exploitation.

Conditions préalables

Pour compléter ce guide, vous aurez besoin de:

  • Un serveur Debian 8 avec un utilisateur non root avec les privilèges + sudo +. Vous pouvez configurer un utilisateur avec ces privilèges dans notre guide Initial Initial Server avec Debian 8.

Étape 1 - Installez le serveur Web Nginx

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

Tous les logiciels que nous utiliserons pour cette procédure proviendront directement des référentiels de paquets par défaut de Debian. Cela signifie que nous pouvons utiliser la suite de gestion de paquets + apt + pour terminer l’installation.

Comme c’est la première fois que nous utilisons + apt + pour cette session, nous devrions commencer par mettre à jour notre index de paquetage local. Nous pouvons alors installer le serveur:

sudo apt-get update
sudo apt-get install nginx

Sur Debian 8, Nginx est configuré pour s’exécuter lors de l’installation.

Si le pare-feu + ufw + est actif, vous devrez autoriser les connexions à Nginx. Vous devez activer le profil le plus restrictif qui autorisera le trafic que vous souhaitez. Comme nous n’avons pas encore configuré SSL pour notre serveur, dans ce guide, nous n’aurons besoin que d’autoriser le trafic sur le port + 80 +.

Vous pouvez l’activer en tapant:

sudo ufw allow 'Nginx HTTP'

Vous pouvez vérifier le changement en tapant:

sudo ufw status

Vous devriez voir le trafic HTTP autorisé dans la sortie affichée:

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx HTTP                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

Maintenant, testez 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 l’un des éléments suivants dans votre terminal:

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

Cela imprimera quelques adresses IP. Vous pouvez essayer chacune d’elles à tour de rôle dans votre navigateur Web.

Au lieu de cela, vous pouvez vérifier quelle adresse IP est accessible telle qu’elle est vue depuis d’autres emplacements sur Internet:

curl -4 icanhazip.com

Tapez l’une des adresses que vous recevez dans votre navigateur Web. Cela devrait vous amener à la page de destination par défaut de Nginx:

http://

image: https: //assets.digitalocean.com/articles/lemp_debian8/THcJfIl.png [page par défaut de Nginx]

Si vous voyez la page ci-dessus, vous avez correctement installé Nginx.

Étape 2 - Installez MySQL pour gérer les données du site

Maintenant que nous avons un serveur Web, nous devons installer MySQL, un système de gestion de base de données, pour stocker et gérer les données de notre site.

Vous pouvez l’installer facilement en tapant:

sudo apt-get install mysql-server

Vous serez invité à fournir un mot de passe root (administratif) à utiliser dans le système MySQL. Vous devrez confirmer ce mot de passe.

Le logiciel de base de données MySQL est maintenant installé, mais sa configuration n’est pas encore complète.

Pour sécuriser l’installation, nous pouvons exécuter un script de sécurité simple qui vous demandera si vous souhaitez modifier certaines valeurs par défaut non sécurisées. Commencez le script en tapant:

sudo mysql_secure_installation

Il vous sera demandé de saisir le mot de passe que vous avez défini pour le compte MySQL * root *. On vous demandera ensuite si vous voulez changer ce mot de passe. Si vous êtes satisfait de votre mot de passe actuel, entrez + N + pour «non» à l’invite:

Using existing password for root.

Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n]
... skipping.

Pour le reste des questions posées par le script, vous devez appuyer sur + Y +, suivi de la touche + ENTER + à chaque invite. 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 MySQL respecte immédiatement les modifications que vous avez apportées.

À ce stade, votre système de base de données est maintenant configuré et sécurisé. Configurons PHP.

Étape 3 - Installer PHP pour le traitement

Nous avons maintenant Nginx installé pour servir nos pages et MySQL installé pour stocker et gérer nos données. Cependant, nous n’avons toujours rien qui puisse générer du contenu dynamique. C’est là que PHP entre en jeu.

Comme Nginx ne contient pas de traitement PHP natif comme certains autres serveurs Web, nous devrons installer + fpm +, qui signifie «gestionnaire de processus fastCGI». Nous dirons à Nginx de transmettre les requêtes PHP à ce logiciel pour traitement. Nous installerons également un paquet d’aide supplémentaire qui permettra à PHP de communiquer avec notre base de données MySQL. L’installation utilisera les fichiers de base PHP nécessaires pour que cela fonctionne.

Ces packages ne sont pas disponibles dans les référentiels par défaut en raison de problèmes de licence. Nous devrons donc modifier les sources du référentiel pour les extraire.

Ouvrez + / etc / apt / sources.list + dans votre éditeur de texte:

sudo nano /etc/apt/sources.list

Ensuite, pour chaque source, ajoutez les référentiels + contrib + et + + non-libres + `à chaque source. Votre fichier devrait ressembler à ceci après que vous ayez apporté ces modifications:

/etc/apt/sources.list

...
deb http://mirrors.digitalocean.com/debian jessie main
deb-src http://mirrors.digitalocean.com/debian jessie main

deb http://security.debian.org/ jessie/updates main
deb-src http://security.debian.org/ jessie/updates main

# jessie-updates, previously known as 'volatile'
deb http://mirrors.digitalocean.com/debian jessie-updates main
deb-src http://mirrors.digitalocean.com/debian jessie-updates main

Enregistrez et quittez le fichier. Puis mettez à jour vos sources:

sudo apt-get update

Puis installez les modules + php5-fpm et` + php 5-mysql`:

sudo apt-get install php5-fpm php5-mysql

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 nano /etc/php5/fpm/php.ini

Recherchez dans le fichier 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 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.

Nous allons changer ces deux conditions en supprimant la mise en commentaire de la ligne et en la plaçant sur «0» comme ceci:

/etc/php5/fpm/php.ini

cgi.fix_pathinfo=0

Enregistrez et fermez le fichier lorsque vous avez terminé.

Maintenant, il suffit de redémarrer votre processeur PHP en tapant:

sudo systemctl restart php5-fpm

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

Étape 4 - Configurez Nginx pour utiliser le processeur PHP

Maintenant, nous avons tous les composants requis installés. Le seul changement de configuration dont nous avons encore besoin consiste à 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 Apache). Ouvrez le fichier de configuration de bloc de serveur Nginx par défaut en tapant:

sudo nano /etc/nginx/sites-available/default

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

/ etc / nginx / sites-available / default

server {
   listen 80 default_server;
   listen [::]:80 default_server;

   root /var/www/html;
   index index.html index.htm index.nginx-debian.html;

   server_name _;

   location / {
       try_files $uri $uri/ =404;
   }
}

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

  • Premièrement, nous devons ajouter + index.php en tant que première valeur de notre directive` + index + afin que les fichiers nommés + index.php` soient servis, le cas échéant, lorsqu’un répertoire est demandé.

  • Nous pouvons modifier la directive + nom_serveur pour qu’elle pointe vers le nom de domaine ou l’adresse IP publique de votre serveur.

  • Pour le traitement PHP proprement dit, il suffit de décommenter un segment du fichier qui traite les requêtes PHP. Ce sera le bloc d’emplacement + location ~ \ .php $ +, le fragment + fastcgi-php.conf + inclus et le socket associé à + ​​php-fpm +.

  • Nous allons également décommenter le bloc d’emplacement concernant les fichiers + .htaccess +. Nginx ne traite pas ces fichiers. Si l’un de ces fichiers se retrouvait dans la racine du document, il ne devrait pas être transmis aux visiteurs.

Les modifications que vous devez apporter sont en rouge dans le texte ci-dessous:

/ etc / nginx / sites-available / default

server {
   listen 80 default_server;
   listen [::]:80 default_server;

   root /var/www/html;
   index  index.html index.htm index.nginx-debian.html;

   server_name ;

   location / {
       try_files $uri $uri/ =404;
   }









}

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

Testez votre fichier de configuration pour les erreurs de syntaxe en tapant:

sudo nginx -t

Si des erreurs sont signalées, revenez en arrière et revérifiez votre fichier avant de continuer.

Lorsque vous êtes prêt, rechargez Nginx pour apporter les modifications nécessaires:

sudo systemctl reload nginx

Étape 5 - Créez un fichier PHP pour tester la configuration

Votre pile LEMP devrait maintenant être complètement configurée. Nous pouvons le tester pour vérifier que Nginx peut correctement transmettre les fichiers + .php + à notre processeur PHP.

Nous pouvons le faire en créant un fichier test PHP dans la racine de votre document. Ouvrez un nouveau fichier appelé + info.php + dans la racine de votre document dans votre éditeur de texte:

sudo nano /var/www/html/info.php

Tapez ou collez les lignes suivantes dans le nouveau fichier. Ceci est un code PHP valide qui retournera des informations sur notre serveur:

/var/www/html/info.php

<?php
 phpinfo();
?>

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

Maintenant, vous pouvez visiter 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:///info.php

Vous devriez voir une page Web générée par PHP avec des informations sur votre serveur:

image: https: //assets.digitalocean.com/articles/lemp_debian8/ZP3DpyX.png [informations de page PHP]

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.

Pour l’instant, supprimez le fichier en tapant:

sudo rm /var/www/html/info.php

Vous pouvez toujours régénérer ce fichier si vous en avez besoin plus tard.

Conclusion

Vous devriez maintenant avoir une pile LEMP configurée sur votre serveur Debian. Cela vous donne une base très flexible pour servir du contenu Web à vos visiteurs.