29 Mar

Upgrader en PHP 7 sur Debian

PHP 7 vient de sortir en décembre dernier et promet des gains importants de performance. La tentation étant trop forte, j’ai upgradé mon serveur durant le week-end. Et effectivement, sur WordPress, pas besoin de tests pour sentir la différence.

Ce post va donc expliquer comment migrer de manière assez « safe » son serveur Debian vers cette nouvelle version de PHP en s’appuyant sur les packages mis à disposition par Dotdeb.

Quelques Précisions et Warning

Le repository de dotdeb ne fournit PHP 7 que pour la dernière version de Debian Jessie. Il faudra donc faire une mise à niveau pour les serveurs sous Wheezy, ou utiliser une autre méthode.

PHP 7 n’est pas encore si mature que ça. Le PHP Group en est déjà à la version 7.0.4 en 3 mois corrigeant essentiellement des failles de sécurité. Même chose pour le support des extensions PECL (memcache, etc.).

Et tout les applicatifs PHP ne sont pas forcément 100% compatible avec PHP 7. WordPress marche très bien, c’est loin d’être le cas de tous les plug-ins. D’ailleurs, je recommande fortement de désactiver l’utilisation de memcache par W3TC.

Ceci dit, utiliser un repository permet un retour arrière simple et rapide. 🙂 Pas de risque donc de casser quoique ce soit. Testez juste bien tous vos applicatifs après la mise à jour.

Installer Dotdeb

Pour installer Dotdeb, il suffit de rajouter le fichier suivant à vos sources :

Suivi d’une synchronisation de l’index des packages avec éventuelle mise à jour :

Attention, Dotdeb fournit aussi des mises à jour pour Nginx, MySQL entre autre. Normalement pas de soucis, mais vérifiez bien quand même le bon fonctionnement après les mises-à-jour.

Identifier ses packages PHP 5

Ici, il s’agit juste d’identifier les packages PHP 5 utilisés par le système. On pourra alors les remplacer, normalement, par leur équivalent PHP 7.

Désinstaller PHP 5

Officiellement, les packages PHP 5 et PHP 7 sont maintenant co-installables. Mais dans le doute, il me semble mieux de les enlever avec un simple apt-get remove sur la liste des packages précédemment identifiés.
Sur mon serveur cela donne :

Évitez l’option purge afin de conserver les configurations en cas de retour arrière. Et bien évidemment, il s’agit ici de la liste des packages qui étaient présents sur mon serveur, adaptez la à votre environnement.

Installer PHP 7

Le package dh-php7.0 n’est pas oublié ! Il n’est tout simplement pas encore (?) disponible dans le repository. J’espère que vous n’aviez pas l’intention de compiler des packages php! 🙁

Reconfigurer Nginx

Si vous avez configuré Nginx pour utiliser php5-fpm avec un socket unix, il va falloir remplacer dans tous vos fichiers de config Nginx « unix:/var/run/php5-fpm.sock » par « unix:/var/run/php/php7.0-fpm.sock ».
Si vous suivez la bonne pratique consistant à centraliser les éléments de config PHP dans un seul fichier php_params, c’est simple.

Si vous utilisez un socket tcp, par exemple « fastcgi_pass 127.0.0.1:9000 », normalement, il n’y a rien à changer.

Il ne reste plus qu’à recharger la nouvelle configuration :

Et pour Apache ? Honnêtement, je n’en sais rien comme je ne l’utilise plus. J’imagine que la librairie libapache2-mod-php7.0 suffit, mais je n’ai pas du tout testé.

Quelques Vérifications

Voilà, c’est fini ! Il ne reste plus qu’à vérifier que tous vos sites en PHP fonctionnent toujours correctement et à déboguer si ce n’est pas le cas.
Au moins un premier test générique :

Ensuite, affichez la page classique de phpinfo(). Le fichier info.php suivant est à placer à la racine du serveur web.

Ce qui donne quelque chose comme cela :
php_info
N’oubliez pas d’enlever le fichier info.php après les tests pour des raisons de sécurité !

Quelques Mots pour Conclure

Comme mentionné initialement, toute cette procédure est complètement réversible. Peu de risque, surtout si vous n’utilisez pas d’obscurs plug-ins mal codés ou plus maintenus depuis 3 ans.

Et si malheureusement vous rencontriez des problèmes, essayez d’identifier le code/plug-in PHP responsable. Ensuite, soit vous attendez une mise-à-jour, soit vous le remplacez par un équivalent.

Mais si tout marche bien, « enjoy » ! 🙂

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

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