Installer HHVM avec fallback PHP-FPM sous Debian 8 et Nginx
Après avoir lu l'article de l'ami Seboss666, et plus récemment celui de Freddy de memo-linux, j'ai été tenté de tester HHVM pour remplacer PHP-FPM sur mon serveur. Mais tout d'abord, qu'est-ce que HHVM ?
HHVM signifie "HipHop Virtual Machine" . C'est un logiciel open-source développé par Facebook (et utilisé sur le réseau social) qui est capable d'exécuter du PHP et du Hack. HHVM est de plus en plus utilisé aujourd'hui, de part sa compatibilité avec la quasi-totalité des fonctions de PHP. Par exemple, il est entièrement compatible avec WordPress.
C'est très bien tout ça, mais à quoi bon l'utiliser me direz-vous ? Et bien sa grande force réside dans son compilateur JIT (Just-In-Time). Alors que son ancêtre, HPHPc (HipHop for PHP) compilait le PHP en C++, HHVM le compile en bytecode intermédiaire, le HHBC (HipHop ByteCode), qui est traduit dynamiquement en code x64, optimisé et exécuté nativement. En gros : HHVM est plus rapide.
Nous allons voir comment l'installer sous Debian 8 avec Nginx, et nous allons le configurer pour que PHP-FPM prenne le relais si jamais il n'est pas opérationnel ou s'il renvoie une erreur. Je considère donc que vous avez déjà installé PHP-FPM.
Je vous rappelle que HHVM n'est pas 100% compatible avec PHP, vous devez donc faire des tests avant de l'utiliser dans un environnement de production.
Installation
Ajout du dépôt HHVM :
echo
"deb http:
//dl
.hhvm.com
/debian
jessie main" > /etc/apt/sources.list.d/hhvm.list
Ajout de la clé du dépôt :
wget -O- http:
//dl
.hhvm.com
/conf/hhvm
.gpg.key | apt-key add -
Mise à jour et installation
apt update apt install hhvm
On active HHVM au boot :
systemctl enable hhvm
Configuration
Un fichier de configuration est dispo dans /etc/nginx/hhvm.conf
Dans mon cas, je faisais un include de ma conf de PHP-FPM dans mon server-block.
Nous allons donc créer le fichier /etc/nginx/hhvm-fallback.conf et y mettre ceci :
location ~ .(hh|php)$ { fastcgi_intercept_errors on; error_page 502 = @fallback; try_files $uri =404; fastcgi_keep_conn on; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location @fallback { try_files $uri =404; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_intercept_errors on; fastcgi_ignore_client_abort off; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffers 4 256k; fastcgi_buffer_size 128k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; }
Dans la première partie, nous avons la configuration de HHVM, à laquelle on ajoute une détection d'erreur. Si c'est le cas, Nginx va utiliser la conf @fallback, c'est à dire celle de PHP-FPM qui se trouve dans la deuxième partie de notre fichier. Libre à vous de personnaliser cet exemple, il suffit d'avoir compris le fonctionnement du fallback.
Ainsi, vous pouvez ajouter cette conf dans votre server block avec :
include /etc/nginx/hhvm-fallback.conf
Les tests
HHVM ajoute un header HTTP lors de son exécution. On peut donc vérifier qu'il fonctionne avec la commande :
curl -I http://monsite.com/
Ce qui doit retourner ça :
Si l'on arrête HHVM, PHP-FPM prends le relais et le header disparaît :
On peut mesurer les performances de PHP avec le script php-benchmark. Voici ce que ça donne avec PHP-FPM :
HHVM est presque 4x plus performant ici !
Utilisation
Personnellement, je n'utilise HHVM qu'avec mon blog WordPress, parce que je sais que c'est compatible, et que les performances sont importantes pour moi ici. Après, je m'en fiche que mon lecteur RSS charge plus vite. :-P
Vous pouvez néanmoins tester avec vos services. Pour l'instant, il y a des bugs avec ownCloud, qui semble se concentrer sur la prochaine version de PHP, ou encore phpMyAdmin.
À voir si PHP 7 rattrape son retard en terme de rapidité, en attendant, je garde le HipHop ! :D
Ressources :
- http://hhvm.com/
- http://hacklang.org/
- https://en.wikipedia.org/wiki/HipHop_Virtual_Machine
- http://blog.seboss666.info/2015/02/tester-les-performances-de-php-ou-pourquoi-hhvm-cest-bien/
- http://memo-linux.com/debian-installer-un-serveur-web-hyper-performant-lnhm-nginx-hhvm-mariadb/
L'article Installer HHVM avec fallback PHP-FPM sous Debian 8 et Nginx a été publié sur Angristan