Tuto : Linux, nginx, MySQL, PHP7 (LEMP)

Header LEMP

Nous allons voir dans ce tutoriel, comment mettre en place un stack LEMP. Derrière ce nom se cache en fait l’association de Linux, nginx, MySQL et PHP qui sont les essentiels pour la plupart des services web.

[box type= »info »]Un serveur LEMP est le pré-requis à la mise en place de la plupart de nos tutoriels.[/box]

Ajout des dépôts Dotdeb

Nous allons commencer par ajouter les dépôt complémentaires Dotdeb pour Debian. Ces dépôts proposent des versions plus récentes des paquets que nous allons utiliser dans ce tutoriel.

echo "deb http://packages.dotdeb.org jessie all" > /etc/apt/sources.list.d/dotdeb.list
wget -O- https://www.dotdeb.org/dotdeb.gpg | apt-key add -

Puis nous allons actualiser la liste des paquets et effectuer les mises à jour usuelles.

apt-get update && apt-get upgrade

Nous sommes maintenant prêt à installer tous les paquets nécessaires à la mise en place de notre serveur LEMP.

Installation de MySQL

Nous allons maintenant installer le serveur SQL.

apt-get install mysql-server

Vous allez devoir définir le mot de passe root de votre installation MySQL, notez le bien, il sera nécessaire à chaque fois que vous souhaiterez modifier votre configuration dans les différents tutoriels que nous vous proposons.

lemp_mysql

Maintenant que MySQL est installé, nous lançons un script qui permet de mettre en place quelques options pour augmenter la sécurité de votre installation. Répondez non à la première question et oui à toutes les suivantes.

mysql_secure_installation

L’installation du serveur MySQL est maintenant terminée.

Installation de PHP7

Maintenant que le serveur SQL est installé, nous allons mettre en place PHP7. C’est un des pré-requis principal à la plupart des sites et applications web. Nous installons ici la version 7, qui est la plus récente à l’heure actuelle.

On commence par installer les paquets nécessaires (liste complète « volée » chez Angristan).

apt-get install php7.0 php7.0-fpm php7.0-mysql php7.0-curl php7.0-json php7.0-gd php7.0-mcrypt php7.0-msgpack php7.0-memcached php7.0-intl php7.0-sqlite3 php7.0-gmp php7.0-geoip php7.0-mbstring php7.0-xml php7.0-zip

Il y a quelques paramètres à modifier dans la configuration de base de PHP histoire d’être clean niveau sécurité et informations de base. Nous allons pour cela modifier le fichier /etc/php/7.0/fpm/php.ini.

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

Cherchez ces valeurs et modifiez-les comme ceci (pensez à enlever le « ; ») :

upload_max_filesize = 50M
date.timezone = Europe/Paris
cgi.fix_pathinfo = 0

Le premier paramètre augmente la taille maximum des fichiers uploadés. Le second permet de définir la timezone de php pour que nos applications affichent la bonne date. Enfin, le dernière paramètre permet de bloquer un fonctionnement dangereux de php qui pourrait potentiellement proposer une faille de sécurité. On oublie pas de redémarrer php :

service php7.0-fpm restart

L’installation et la configuration de base de PHP7 est maintenant terminée. Nous allons maintenant installer nginx, notre serveur web.

Installation et configuration de nginx

Attaquons maintenant la dernière partie de ce tutoriel. Nous allons installer nginx et le configurer pour qu’il interagisse correctement avec php.

apt-get install nginx

Le fichier de configuration par défaut de nginx mérite quelques modifications. Voici donc un exemple que vous pouvez utiliser pour remplacer le contenu de votre fichier existant.

nano /etc/nginx/nginx.conf
user www-data;
worker_processes auto;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;
    use epoll; # gestionnaire d'évènements epoll (kernel 2.6+)
}

http {
    include /etc/nginx/mime.types;
    default_type  application/octet-stream;

    access_log /var/log/nginx/access.log combined;
    error_log /var/log/nginx/error.log error;

    sendfile on;
    keepalive_timeout 15;
    keepalive_disable msie6;
    keepalive_requests 100;
    tcp_nopush on;
    tcp_nodelay off;
    server_tokens off;

    gzip on;
    gzip_comp_level 5;
    gzip_min_length 512;
    gzip_buffers 4 8k;
    gzip_proxied any;
    gzip_vary on;
    gzip_disable "msie6";
    gzip_types
        text/css
        text/javascript
        text/xml
        text/plain
        text/x-component
        application/javascript
        application/x-javascript
        application/json
        application/xml
        application/rss+xml
        application/vnd.ms-fontobject
        font/truetype
        font/opentype
        image/svg+xml;

    include /etc/nginx/sites-enabled/*.conf;
}

Nous créons ensuite le fichier de configuration php que nous appellerons pour la plupart de nos applications php :

nano /etc/nginx/conf.d/php.conf

Et nous y collons le contenu suivant :

location ~ \.php$ {
    fastcgi_index index.php;
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include /etc/nginx/fastcgi_params;
}

Nous terminons ensuite par la création de notre premier vhost qui permettra d’accéder aux fichiers présents dans /var/www

rm /etc/nginx/sites-enabled/default
nano /etc/nginx/sites-enabled/default.conf
server {
    listen 80 default_server;

    root /var/www;
    index index.php index.html index.htm;

    server_name domain.tld;

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

    location ~ \.php$ {
        include /etc/nginx/conf.d/php.conf;
    }

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

N’oublions pas de redémarrer nginx :

service nginx restart

Validation de l’installation

Nous avons maintenant installé tous les services nécessaires au fonctionnement de notre serveur LEMP. Nous pouvons vérifier que php et notre serveur web nginx fonctionnement correctement d’une manière très simple. Pour cela, nous allons créer un fichier appelant la fonction phpinfo.

nano /var/www/info.php

Nous y collons le contenu suivant :

<?php
phpinfo();
?>

Vous pouvez maintenant vous rendre sur la page en question via http://domain.tld/info.php. Vous devriez voir la page suivante :

LEMP PHPINFO

Si vous tombez sur cette page, félicitations, votre serveur LEMP est fonctionnel ! Pensez quand même à supprimer le fichier :

rm /var/www/info.php

Ce tutoriel est maintenant terminé. Vous avez donc maintenant la base pour suivre la plupart de nos tutoriels. N’hésitez pas à utiliser les commentaires si vous avez la moindre question ou remarque concernant ce guide.

5 Commentaires

  1. Excellent tuto. Fonctionne impeccablement sur un Raspberry Pi sous ubuntu Mate. A noter que je n’ais pas ajouté le dépôt Dotdeb car ubuntu mate 16.04 les propose (PHP7.0-cli + ajouter les autres manuellement). Dans cette distribution le chemin ROOT est /usr/hare/nginx/html (au lieu de /var/www. J’aime bien ce tuto qui sépare la config propre à nginx et php. Je trouve que l’on y voit plus clair comparé à d’autres tuto. Reste à voir le tuto suivant : nextcloud en SSL. Pour l’installation nextcloud pas de problemes. C’est le côté SSL qui me fait peur. Je n’ais jamais réussit à l’installer convenablement. J’aimerai donc utiliser l’option « –staging » de letsencrypt, comment faire ?

    • Merci pour ce commentaire très pertinent et plein de bonnes intentions.
      Merci de mettre en avant une erreur de balise qui n’entache en rien le bon fonctionnement de la méthodologie expliquée ici.
      Merci d’apporter votre pierre à l’édifice d’un tutoriel vieux de deux ans.

      Si vous êtes si bon, pourquoi recherchez-vous un tutoriel ?

LAISSER UN COMMENTAIRE

Merci d'entrer votre commentaire !
Merci d'entrer votre nom

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.