JusteGeek

Installer PHP 7.0 avec Apache2 sous Debian 8 (Jessie)

Comme je l'ai annoncé sur Twitter il y a quelques jours, j'effectue des opérations de maintenance en ce moment, en ce qui concerne l'hébergement du site. Ces opérations ont été motivées par la panne d'un disque dur du serveur hébergeant le site. Plutôt que d'interrompre le site pendant une heure (le temps de remplacer le disque) puis de resynchroniser le RAID, je me suis dis que j'allais en profiter pour faire quelques modifications sur cet hébergement. Du coup, j'ai temporairement migré le site chez moi, sur un serveur Debian avec le tout récent PHP 7.0 histoire de voir comme cela tourne et de déceler, pourquoi pas, quelques incompatibilités ou problèmes. Et, au passage, j'ai remplacé MySQL par MariaDB. Bon je vous passe tous les détails. Tout ça pour dire que j'ai un peu galéré avec la dernière version de PHP, n'ayant pas trouvé de tutoriel correspondant à ma situation. C'est la raison pour laquelle je vous propose ici un petit tuto.

 

PHP 7.0 : un peu d'histoire...

Quelques explications avant de passer au tutoriel. La version 7.0 de PHP est sortie en 2015. Elle succède à la version 5. La version 6 de PHP a, en effet, été abandonnée après de nombreux reports récurrents. Finalement, les développeurs ont décidé de repartir sur de bonnes bases et ont donc abandonné cette version PHP 6. PHP 7.0 apporte donc de nombreuses optimisations du langage PHP, permettant d'améliorer considérablement les performances de celui-ci. Ainsi, la version 7 de PHP permet de rivaliser avec les produits concurrents et notamment avec HHVM (qui reste légèrement meilleur en terme de performances dans de nombreux benchmarks).

J'avoue que je me suis posé la question pendant un temps : PHP 7 ou HHVM. J'ai finalement retenu PHP car HHVM ne supporte pas toutes les fonctions PHP (même s'il supporte la quasi totalité de celles-ci). Et puis PHP ne m'est pas inconnu contrairement à HHVM. Enfin, étant donné les réelles différences de performances avec la version 5, j'avais vraiment envie de tester cela.


L'environnement de ce tutoriel

Avant de vous lancer, lisez bien ce tutoriel jusqu'au bout afin de ne pas avoir de mauvaises surprises. Pour réaliser ce tutoriel, je me suis appuyé sur un serveur Debian 8.4 "Jessie". Malheureusement, les choses ne sont pas simples car PHP 7.0 est encore très jeune et il n'est donc pas intégré dans les dépôts officiels de Debian. Deux solutions sont alors envisageables : utiliser un dépôt alternatif, ou bien récupérer les sources de PHP 7.0 et les compiler avec les options nécessaires.

Je tiens à attirer votre attention sur l'utilisation de PHP 7.0. Le langage reprend beaucoup de fonctions de PHP 5, mais la compatibilité n'est pas de 100%. Il se peut donc que vous rencontriez des soucis. J'ai, par exemple, lu sur le net que Owncloud ne fonctionnait pas (ou mal) avec cette version de PHP. Il faut également ajouter que si vous utiliser PHPMyAdmin depuis les dépôts officiels, cela ne sera plus possible. PHPMyAdmin est lié à PHP 5 au niveau des paquets. Si vous voulez continuer à utiliser PHPMyAdmin, il vous faudra télécharger les sources et les compiler... Soyez prudent, donc, et testez au préalable PHP 7.0 dans un environnement de recette. Cela vous évitera des surprises !!!

Pour la partie serveur web, je suis resté fidèle à Apache2 (version 2.4.10). Sur le net, on trouve beaucoup de tutoriels concernant Nginx mais peu concernant Apache2. Je me suis dis donc que c'était l'occasion de proposer mon tuto sur le sujet. Certains seraient peut être tentés de me demander pourquoi Apache et pas Nginx ? Et bien tout simplement car la robustesse d'Apache2 n'est plus à démontrer. Ses performances sont largement à la hauteur de mes attentes et les modules sont très nombreux. De plus, on peut recenser quelques avantages d'Apache, comme par exemple l'utilisation des fichiers htaccess, chose que Nginx ne supporte pas. Nginx apporte un plus incontestable pour servir du contenu statique en cas de nombreuses requêtes simultanées (plusieurs milliers par secondes). Le jour où j'arriverai à un tel niveau d'audience sur JusteGeek.fr, je pourrai légitimement me reposer la question... 

Enfin, pour ce qui est des bases de données, j'ai tenté l'expérience MariaDB en remplacement de MySQL. Ok, le changement n'est pas significatif, je vous le concède.


Installer PHP 7.0 avec Apache2

Pour mon test de PHP 7.0, j'ai décidé d'utiliser le dépôt Dotdeb, maintenu par Guillaume Plessis par "simplicité".

En premier lieu, et pour être tranquille, vérifiez que tous vos paquets sont à jour :

apt-get update && apt-get upgrade && apt-get dist-upgrade -y

Ensuite, puisque PHP 7.0 n'est pas dans les dépôts Debian (et ne le sera sans doute pas avant la version 9 de Debian), il va falloir commencer par ajouter ce dépôt Dotdeb aux sources logicielles.

echo "deb http://packages.dotdeb.org jessie all" > /etc/apt/sources.list.d/dotdeb.list

Attention, pensez à remplacer "jessie" par le nom de votre distribution si vous utilisez une autre version de Debian.

wget https://www.dotdeb.org/dotdeb.gpg && apt-key add dotdeb.gpg

On va maintenant mettre à jour les sources logicielles :

apt-get update

Je pars ici d'un serveur fraîchement installé. Si vous utilisez ce tutoriel sur un serveur possédant une autre version de PHP, il est préférable de désinstaller cette ancienne version :

apt-get --purge remove php5*

Nous sommes maintenant prêts pour installer PHP 7.0 :

apt-get install php7.0 php7.0-fpm

Si vous vous contentez de ces paquets, PHP 7.0 sera effectivement installé, mais il ne fonctionnera pas avec Apache2. Il vous faudra installer en plus le module adéquate :

apt-get install  libapache2-mod-php7.0

Installer également tous les modules dont vous aurez besoin. Pour voir les modules disponibles, saisissez la commande suivante dans votre terminal :

apt-cache search PHP7.0*

Pour ma part, j'ai installé les modules suivants :

apt-get install php7.0-gd php7.0-mysql php7.0-bz2 php7.0-json php7.0-curl

Vous pouvez maintenant vérifier que PHP7.0 est bien installé avec la commande :

php -v

Une fois que c'est fait, on va passer à un peu de configuration, car oui, désolé mais il en faut un peu pour que ça marche.

 

Configurer PHP 7.0

À ce stade, PHP 7.0 est installé mais n'est pas encore fonctionnel. On va donc modifier un peu sa config. Ouvrez le fichier php.ini de php7.0-fpm avec votre éditeur de texte préféré (nano, vi...)

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

Localisez la ligne 

cgi.fix_pathinfo=1 

Et modifiez-la pour obtenir :

cgi.fix_pathinfo=0

 On va ensuite modifier le socket d'écoute de php7.0-fpm. Pour cela, utilisez une fois encore votre éditeur de texte préféré :

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

Localisez la ligne :

listen = /run/php/php7.0-fpm.sock

Et remplacez-la par :

listen = 127.0.0.1:9000

 

Voilà. Maintenant PHP 7.0 devrait être opérationnel. On va donc redémarrer les différents services et tester :

service php7.0-fpm restart

service apache2 restart

Pour vérifier que PHP est bien fonctionnel, créez simplement un fichier info.php à la racine de votre site, et collez le code suivant dedans :

<?php
phpinfo();
?>

Rendez-vous ensuite sur votre site : http://votresite/info.php et si vous voyez votre page de configuration PHP, c'est que c'est tout bon 🙂

 

Quitter la version mobile