Debian 8 Jessie : installer et configurer la dernière version de Nginx et PHP 7 FPM

Nous allons installer dans cet article la toute dernière version du serveur web NGINX qui sera couplé au tout nouveau PHP7 FPM.

J'ai longtemps été un fan de Apache httpd que j'utilisais systématiquement en tant que serveur web.
Mais depuis que j'ai essayé Nginx, je l'ai adopté : il est super performant et consomme beaucoup moins de ressources.

Pour ce qui est de PHP 7.0, c'est le digne successeur de PHP5 (oui je sais, PHP 6 est passé à la trappe au milieu).

Cette installation de base sera utilisée par la suite pour ajouter le support de HTTPS et du protocole HTTP/2.

 

Ajout des dépôts dotdeb et nginx à votre config

Nous allons installer les dernières versions de Nginx et de PHP 7. Les dépôts Debian n'étant pas vraiment à jour, nous utiliserons ;

  • le déport officiel de Nginx
  • le déport DotDeb pour PHP 7.0

Commençons donc par ouvrir le fichier sources.list utilisé par apt-get.

sudo nano /etc/apt/sources.list

Puis nous ajoutons les 2 lignes suivantes à la fin du fichier.

deb http://packages.dotdeb.org jessie all
deb http://nginx.org/packages/mainline/debian/ jessie nginx

Les paquets de ces 2 dépôts sont signés, il faut donc télécharger puis d'installer les clés de chiffrage.

cd /tmp
 
wget http://www.dotdeb.org/dotdeb.gpg
sudo apt-key add dotdeb.gpg

wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key

Enfin, on actualise la liste des paquets.

sudo apt-get update

 

Installation de nginx et PHP 7.0 FPM

On installe en une fois, Nginx et PHP 7.0 FPM plus quelques modules PHP très utiles, voir indispensables yes

sudo apt-get install nginx php7.0 php7.0-fpm php7.0-gd php7.0-mysql php7.0-cli php7.0-common php7.0-curl php7.0-opcache php7.0-json php7.0-imap

A la fin de l'installation, vous pouvez vérifier les versions installées avec les commandes suivantes :

sudo php -v
PHP 7.0.3-1~dotdeb+8.1 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
sudo nginx -v
nginx version: nginx/1.9.11

Si vous ouvrez votre navigateur Internet à l'adresse IP de votre serveur, vous recevrez une réponse de Nginx

 

Configuration de PHP 7.0 FPM

Nous allons maintenant configurer PHP 7.0 FPM et Nginx pour qu'ils puissent dialoguer.

Commençons par ouvrir le fichier de configuration de PHP 7.0 FPM

sudo nano /etc/php/7.0/fpm/pool.d/www.conf

Puis on s'assure que ce fichier contient la configuration suivante.
En résumé, le mode de communication est un socket UNIX (/run/php/php7.0-fpm.sock) et c'est l'utilisateur www-data, du groupe www-data qui l'exécute.

user = www-data
group = www-data
listen = /run/php/php7.0-fpm.sock
listen.owner = www-data
listen.group = www-data

On ouvre ensuite le fichier de configuration de Nginx

sudo nano /etc/nginx/nginx.conf

Puis on s'assure que ce fichier contient la configuration suivante.
Il y a de grande chance que l'utilisateur soit nginx par défaut, remplacez le par www-data

user www-data;

On doit maintenant indiquer à Nginx comment traiter les fichiers PHP.
Pour cela, on ouvre la configuration du vHost par défaut.

sudo nano /etc/nginx/conf.d/default.conf

Et on ajoute la configuration suivante

    # pass the PHP scripts to FastCGI server listening on /run/php/php7.0-fpm.sock
    #
    location ~ \.php$ {
        root           /usr/share/nginx/html;
        fastcgi_pass   unix:/run/php/php7.0-fpm.sock;
        fastcgi_index  index.php;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }

Reste à redémarrer les services PHP 7.0 FPM et Nginx pour activer les modifications.

sudo systemctl restart php7.0-fpm
sudo systemctl restart nginx

 

Vérification du bon fonctionnement de PHP

L'emplacement des fichiers web publiés par le vHost Nginx par défaut est /usr/share/nginx/html.
On y va et on ajoute le petit fichier phpinfo.php

cd /usr/share/nginx/html
sudo nano phpinfo.php

Puis on ajoute le code suivant dans le fichier phpinfo.php que l'on vient de créer

<?php   phpinfo(); ?>

Reste enfin à ouvrir cette page dans votre navigateur pour obtenir smiley

Si vous souhaitez aller plus loin dans la configuration de Nginx et de PHP 7 FPM, rendez-vous sur l'article suivant.

Commentaires

bonjour, quelque chose de particulier à faire pour installer mariadb? merci

996

Aujourd'hui, en mettant à jour mon serveur avec sudo apt-get update, j'ai eu l'erreur suivante

sudo apt-get update
Hit http://packages.dotdeb.org jessie InRelease
Ign http://ftp.debian.org jessie InRelease
Hit http://security.debian.org jessie/updates InRelease
Ign http://nginx.org jessie InRelease
Get:1 http://nginx.org jessie Release.gpg [287 B]
Hit http://ftp.debian.org jessie Release.gpg
Get:2 http://nginx.org jessie Release [2,331 B]
Hit http://ftp.debian.org jessie Release
Get:3 http://packages.dotdeb.org jessie/all amd64 Packages [86.5 kB]
Err http://nginx.org jessie Release

Hit http://security.debian.org jessie/updates/main amd64 Packages
Hit http://security.debian.org jessie/updates/main Translation-en
Ign http://packages.dotdeb.org jessie/all Translation-en_US
Ign http://packages.dotdeb.org jessie/all Translation-en
Hit http://ftp.debian.org jessie/main amd64 Packages
Hit http://ftp.debian.org jessie/main Translation-en
Fetched 89.1 kB in 1s (67.2 kB/s)
Reading package lists... Done
W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://nginx.org jessie Release: The following signatures were invalid: KEYEXPIRED 1471427554

W: Failed to fetch http://nginx.org/packages/mainline/debian/dists/jessie/Release

W: Some index files failed to download. They have been ignored, or old ones used instead.

Apparemment, la clé NGINX n'est plus valide... J'ai donc lancé la commande sudo apt-key list pour vérifier

sudo apt-key list
....

pub   2048R/7BD9BF62 2011-08-19 [expired: 2016-08-17]
uid                  nginx signing key <signing-key@nginx.com>

....

Et en effet la clé est expirée !!

Il faut donc la réinstaller, comme dans le tuto ci-dessous avec les 3 commandes suivantes :

cd /tmp
wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key

Et c'est tout smiley

La mise à jour du serveur avec sudo apt-get update fonctionne à nouveau.
Et si vous exécutez à nouveau sudo apt-key list, vous constaterez que la date d'expiration est dans le futur...

Bonjour, en suivant votre tuto j'ai ajouté les dépôts dotdeb et nginx. Seulement, lorsque je lance le apt-get install pour php7 et ses modules, je reçois l'erreur suivante:

E: Impossible de trouver le paquet php7.0
E: Impossible de trouver de paquet correspondant à l'expression rationnelle « php7.0 »
E: Impossible de trouver le paquet php7.0-fpm
E: Impossible de trouver de paquet correspondant à l'expression rationnelle « php7.0-fpm »

etc... Pour chacun des paquets. Aucune information n'est disponible sur le site dotdeb et je ne veux pas risquer un conflit entre mes versions de php en téléchargeant n'importe quoi dans la précipitation. Merci de m'éclairer ! Très bon tuto, ce site m'aide bcp dans mes recherches ! Merci

Bonjour, avez-vous bien installé les clés de chiffrage des dépots dotdeb et nginx?

Après avoir lutté plusieurs jours pour installer PHP+MySQL sur mon (tout premier) VPS avec EasyEngine, je suis tombé sur vos tutos. Et là je n'ai qu'un mot à dire : MERCI !!  J'ai enfin le sentiment de voir le bout du tunnel  :-D   J'ai juste un petit souci, j'imagine que j'ai mal fait l'une des manips mais après installation de PHP7 et MariaDB  il me semble que j'arrivais bien à ouvrir les deux pages PHP (www.monsite.com/phpinfo.php et  www.monsite.com/adminer-4.2.4-mysql-en.php). Mais maintenant que je suis arrivé au bout des tutoriaux, que j'ai un joli certificat SSL avec une note de A+, que tout est redirigé sur le https://www ... ben ça ne fonctionne plus :-(  Si j'essaie d'ouvrir une des pages PHP il me la télécharge à la place. Pourtant j'ai bien le bout de code "location ~ \.php$ ... " dans default.conf et par acquit de conscience j'ai même essayé de le coller dans le fichier www.monsite.com.conf mais rien n'y fait. Est-ce que ça pourrait venir du fait que j'ai défini le même root dans ces deux fichiers ? Merci 

Ajouter un commentaire

You must have Javascript enabled to use this form.