Comment installer Linux, Nginx, MySQL, PHP (pile LEMP) dans Ubuntu 16.04

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, nous montrerons comment installer une pile LEMP sur un serveur Ubuntu 16.04. Le système d'exploitation Ubuntu répond à la première exigence. Nous allons décrire comment mettre en marche le reste des composants.

Conditions préalables

Avant de terminer ce didacticiel, vous devez disposer d'un compte d'utilisateur non root sur votre serveur avec les privilègessudo. Vous pouvez apprendre comment configurer ce type de compte en complétant nosUbuntu 16.04 initial server setup.

Une fois que vous avez votre utilisateur disponible, connectez-vous à votre serveur avec ce nom d'utilisateur. Vous êtes maintenant prêt à commencer les étapes décrites dans ce guide.

É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 d’Ubuntu. Cela signifie que nous pouvons utiliser la suite de gestion de paquetsapt pour terminer l'installation.

Puisque c'est la première fois que nous utilisonsapt pour cette session, nous devrions commencer par mettre à jour notre index de paquet local. Nous pouvons alors installer le serveur:

sudo apt-get update
sudo apt-get install nginx

Sur Ubuntu 16.04, Nginx est configuré pour s'exécuter lors de l'installation.

Si vous avez le pare-feu deufw en cours d'exécution, comme indiqué dans notre guide de configuration initiale, vous devrez autoriser les connexions à Nginx. Nginx s'enregistre avecufw lors de l'installation, donc la procédure est plutôt simple.

Il est recommandé d'activer le profil le plus restrictif permettant 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)

Avec la nouvelle règle de pare-feu ajoutée, vous pouvez vérifier si le serveur est opérationnel en accédant au nom de domaine de votre serveur ou à l’adresse IP publique de 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://server_domain_or_IP

Nginx default page

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

Il vous sera demandé de fournir un mot de passe root (administratif) à utiliser dans le système MySQL.

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:

mysql_secure_installation

Il vous sera demandé de saisir le mot de passe que vous avez défini pour le compte racine MySQL. Ensuite, il vous sera demandé si vous souhaitez configurer lesVALIDATE PASSWORD PLUGIN.

[.warning] #Warning: L'activation de cette fonction est une sorte de jugement. Si activé, les mots de passe qui ne correspondent pas aux critères spécifiés seront rejetés par MySQL avec une erreur. Cela causera des problèmes si vous utilisez un mot de passe faible en conjonction avec un logiciel qui configure automatiquement les informations d'identification des utilisateurs MySQL, tels que les packages Ubuntu pour phpMyAdmin. Il est prudent de laisser la validation désactivée, mais vous devez toujours utiliser des mots de passe forts et uniques pour les informations d'identification de la base de données.
#

Répondez ày pour oui, ou toute autre chose pour continuer sans activer.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

Si vous avez activé la validation, il vous sera demandé de sélectionner un niveau de validation du mot de passe. Gardez à l'esprit que si vous entrez2, pour le niveau le plus fort, vous recevrez des erreurs lorsque vous tenterez de définir un mot de passe qui ne contient pas de chiffres, de lettres majuscules et minuscules et de caractères spéciaux, ou qui est basé sur un dictionnaire commun mots.

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

Si vous avez activé la validation du mot de passe, le niveau de mot de passe du mot de passe root existant vous sera indiqué. Il vous sera demandé si vous souhaitez modifier ce mot de passe. Si vous êtes satisfait de votre mot de passe actuel, entrezn pour «non» à l'invite:

Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n

Pour le reste des questions, vous devez appuyer surY et appuyer sur la toucheEnter à 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 nous avons apportées.

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

Étape 3: Installez 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. Nous pouvons utiliser PHP pour cela.

Puisque Nginx ne contient pas de traitement PHP natif comme certains autres serveurs Web, nous devrons installerphp-fpm, qui signifie «gestionnaire de processus fastCGI». Nous dirons à Nginx de transmettre les requêtes PHP à ce logiciel pour traitement.

Nous pouvons installer ce module et nous allons également récupérer un paquet d'aide supplémentaire qui permettra à PHP de communiquer avec notre base de données. L'installation utilisera les fichiers de base de PHP nécessaires. Faites ceci en tapant:

sudo apt-get install php-fpm php-mysql

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 dephp-fpmavec les privilèges root:

sudo nano /etc/php/7.0/fpm/php.ini

Ce que nous recherchons dans ce fichier est 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.

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/7.0/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 php7.0-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 d’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.

  • Tout d'abord, nous devons ajouterindex.php comme première valeur de notre directiveindex afin que les fichiers nommésindex.php soient servis, s'ils sont disponibles, lorsqu'un répertoire est demandé.

  • Nous pouvons modifier la directiveserver_name pour qu'elle pointe vers le nom de domaine ou l'adresse IP publique de notre serveur.

  • Pour le traitement PHP proprement dit, il suffit de décommenter un segment du fichier qui gère les requêtes PHP en supprimant les symboles dièse (#) situés devant chaque ligne. Ce sera le bloc d'emplacementlocation ~\.php$, l'extrait de codefastcgi-php.conf inclus et le socket associé àphp-fpm.

  • Nous décommenterons également le bloc d'emplacement traitant des fichiers.htaccess en utilisant la même méthode. 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.php index.html index.htm index.nginx-debian.html;

    server_name server_domain_or_IP;

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

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

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 valider que Nginx peut correctement remettre 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

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

Désormais, 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://server_domain_or_IP/info.php

Vous devriez voir une page Web générée par PHP avec 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.

Pour l'instant, supprimez le fichier en tapant:

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

Conclusion

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