Bonjour à tous !
Vous avez sûrement vu aux dernières actualités que PHP a sorti sa dernière mouture, j'ai nommé PHP 7.0 ! Apportant son lot d'améliorations en terme de performances ! Nous allons voir comment mettre tout ça à jour sur notre serveur, ça prend quelques minutes pour très peu de problèmes si vous utilisez des applications correctement codées.
Temps pour la migration (constaté sur mon KS) :
15 minutes
Ajout des dépôts Dotdeb :
Si ce n'est pas encore fait :
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 -
apt-get update && apt-get upgrade
Vérification des extensions et des versions installées :
On tape cette commande pour afficher tout les php5 installés
dpkg -l | grep php5
PHP 7.0 n'étant pas encore totalement mature, on va commencer par regarder l'ensemble des paquets PHP5 disponibles sur la machine afin de réinstaller les mêmes mais version 7, personnellement sur un serveur dédié installé à la main grâce aux tutos, je me retrouve avec cette sortie :
php5 5.6.19+dfsg-0+deb8u1 all server-side, HTML-embedded scripting language (metapackage)
php5-cli 5.6.19+dfsg-0+deb8u1 amd64 command-line interpreter for the php5 scripting language
php5-common 5.6.19+dfsg-0+deb8u1 amd64 Common files for packages built from the php5 source
php5-curl 5.6.19+dfsg-0+deb8u1 amd64 CURL module for php5
php5-fpm 5.6.19+dfsg-0+deb8u1 amd64 server-side, HTML-embedded scripting language (FPM-CGI binary)
php5-gd 5.6.19+dfsg-0+deb8u1 amd64 GD module for php5
php5-geoip 1.1.0-2 amd64 GeoIP module for php5
php5-imap 5.6.19+dfsg-0+deb8u1 amd64 IMAP module for php5
php5-intl 5.6.19+dfsg-0+deb8u1 amd64 internationalisation module for php5
php5-json 1.3.6-1 amd64 JSON module for php5
php5-mcrypt 5.6.19+dfsg-0+deb8u1 amd64 MCrypt module for php5
php5-mysql 5.6.19+dfsg-0+deb8u1 amd64 MySQL module for php5
php5-readline 5.6.19+dfsg-0+deb8u1 amd64 Readline module for php5
On sauvegarde précieusement dans un coin, et on peut maintenant supprimer tout ça (sans purger pour garder la configuration)
Suppression de PHP5
On tape cette commande (ajoutez les paquets qui peuvent manquer, j'ai mis un exemple correspondant à la sortie de la commande précédente)
apt-get remove php5 php5-cli php5-common php5-curl php5-fpm php5-gd php5-geoip php5-imap php5-intl php5-json php5-mcrypt php5-mysql php5-readline
Installation de PHP7.0
On va maintenant réinstaller les paquets que l'on avait en version 5 donc la commande passe à :
apt-get install php7.0 php7.0-cli php7.0-common php7.0-curl php7.0-fpm php7.0-gd php7.0-geoip php7.0-imap php7.0-intl php7.0-json php7.0-mcrypt php7.0-mysql php7.0-readline
Configuration de NGinx
Maintenant que notre système est correctement mis à jour et que toutes les extensions sont disponibles, on va dire à NGinx de passer par PHP7-FPM au lieu de la version 5.6.
Il va falloir simplement remplacer dans tous vos fichiers de config Nginx « unix:/var/run/php5-fpm.sock » par « unix:/var/run/php/php7.0-fpm.sock ».
Sur certains systèmes FPM s'installe dans
/run/ et donc la ligne à changer passe à :
« unix:/run/php/php7.0-fpm.sock ».
Pour être sûrs vérifiez simplement l'emplacement de php7.0-fpm.sock avec un petit ls -la dans les dossiers /var/run/php et /run/php
Modification du fichier php.conf
nano /etc/nginx/conf.d/php.conf
Si vous utilisez Seedbox-manager :
nano /etc/nginx/conf.d/php-manager.conf
Et changez la ligne
fastcgi_pass unix:/var/run/php5-fpm.sock;
# à changer en
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
# OU (remarque ci-dessus)
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
Allez vérifiez dans vos vHosts si il ne reste plus d'occurrences à php5-fpm (si vous n'avez pas inclut le fichier php.conf dedans, même ligne à changer normalement)
cd /etc/nginx/sites-enabled
On reload nginx :
service nginx reload
Normalement ça devrait être reparti, allez vérifiez vos différentes applications, tout devrait fonctionner correctement, vous pouvez facilement revenir en arrière en supprimant l'ensemble de Php7.0 puis en remettant les versions PHP5.6 (et en reconfigurant Nginx)
Réinstallation de PhpMyAdmin :
En faisant le apt-get remove de Php5, j'ai remarqué qu'il supprimait en même temps mon PhpMyAdmin, sans me l'avoir demandé.. Eh bien, ce n'est pas si grave, une fois l'installation de Php7.0 réalisée donc on va le réinstaller proprement et sans son tas de dépendances !
On va dans /usr/share (emplacement de phpmyadmin)
cd /usr/share
On récupère la dernière archive sur le site de PhpMyAdmin :
wget https://files.phpmyadmin.net/phpMyAdmin/4.6.0/phpMyAdmin-4.6.0-all-languages.zip
On unzip l'archive récupérée :
unzip phpMyAdmin-4.6.0-all-languages.zip
On renomme le dossier :
mv phpMyAdmin-4.6.0-all-languages phpmyadmin
On applique les bonnes permissions :
chmod -R 0755 phpmyadmin
On supprime le zip :
rm phpMyAdmin-4.6.0-all-languages.zip
Et tout devrait repartir dans la foulée, les configurations et liens étant déjà faits. Maintenant vous pouvez pleinement apprécier le gain constaté sur vos applications/sites personnels, sur Wordpress je dépasse largement ma configuration d'avant
Exemple du gain en requêtes par seconde avec un site Wordpress dans les références (HHVM étant Hack de Facebook)
Références :
PHP7 Performance Zend
Have trouble installing phpmyadmin on PHP7 - StackOverflow
Installer PHP7 sous Debian - Angristan