Comment installer HHVM avec Nginx sur Ubuntu 14.04

introduction

HHVM est une machine virtuelle open source permettant d’exécuter du code PHP et Hack. HHVM est développé et supporté par Facebook, un fait qui attire de plus en plus l’attention sur HHVM ces derniers temps.

HHVM est différent des autres moteurs PHP en raison de son approche de compilation juste à temps (JIT). HHVM compile le code PHP en un code d’octet intermédiaire, puis directement en instructions machine x64. Cela permet davantage d’optimisations et de performances supérieures à celles des autres moteurs.

HHVM est puissant et rapide, mais il est également exigeant en termes de ressources, tout comme toute autre machine virtuelle (par exemple, JVM). Ainsi, HHVM nécessite plus de mémoire vive et de ressources processeur que d’autres interpréteurs PHP plus légers tels que PHP-FPM. Nos tests ont montré qu’une performance décente nécessite une Droplet d’au moins 1 Go de RAM.

Dans cet article, nous allons vous montrer comment installer HHVM et l’intégrer à Nginx.

Conditions préalables

Ce guide a été testé sur Ubuntu 14.04. L’installation et la configuration décrites seraient similaires sur d’autres systèmes d’exploitation ou versions du système d’exploitation, mais les commandes et l’emplacement des fichiers de configuration peuvent varier.

Pour ce tutoriel, vous aurez besoin de:

Toutes les commandes de ce didacticiel doivent être exécutées en tant qu’utilisateur non root. Si un accès root est requis pour la commande, il sera précédé de + sudo +.

Installation

Pour Ubuntu 14.04, il existe un référentiel HHVM officiellement pris en charge. Pour ajouter ce référentiel, vous devez importer ses clés publiques GnuPG avec la commande:

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449

Après cela, vous pouvez installer en toute sécurité le référentiel HHVM avec la commande:

sudo add-apt-repository "deb http://dl.hhvm.com/ubuntu $(lsb_release -sc) main"

Une fois que vous avez ajouté le référentiel, vous devez créer apt, le gestionnaire de logiciels d’Ubuntu, sachant que vous pouvez installer de nouveaux paquets. Cela peut être fait en mettant à jour le cache d’apt avec la commande:

sudo apt-get update

Enfin, vous pouvez installer HHVM avec la commande:

sudo apt-get install hhvm

La commande ci-dessus installe HHVM et le démarre pour la première fois. Pour vous assurer que HHVM démarre et s’arrête automatiquement avec Droplet, ajoutez HHVM aux niveaux d’exécution par défaut à l’aide de la commande suivante:

sudo update-rc.d hhvm defaults

Configuration

HHVM est livré avec un script qui rend l’intégration avec Nginx très facile. Si vous avez une installation Nginx par défaut, vous pouvez exécuter le script sans aucun argument comme celui-ci:

sudo /usr/share/hhvm/install_fastcgi.sh

Lorsqu’il est exécuté, ce script ajoute le fichier de configuration + / etc / nginx / hhvm.conf + à la configuration de bloc du serveur Nginx par défaut + / etc / nginx / sites-enabled / default +. Cela fonctionne uniquement avec une configuration Nginx par défaut sans aucune configuration FastCGI.

Si vous avez déjà modifié votre bloc de serveur par défaut avec une configuration FastCGI personnalisée, telle que celle de PHP-FPM, vous devrez alors remplacer manuellement votre configuration FastCGI précédente par celle-ci:

/ etc / nginx / sites-enabled / default

location ~ \.(hh|php)$ {
   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;
}

Ce qui précède signifie que Nginx devrait utiliser HHVM pour traiter n’importe quel fichier demandé '+ .php + ou + .hh + `(hack).

Vous devrez également redémarrer Nginx pour activer le changement:

sudo service nginx restart

Cela suppose également que vous n’avez pas modifié la configuration HHVM par défaut rendant le service accessible à «127.0.0.1: 9000 +». Ce paramètre provient du fichier de configuration principal HHVM ` / etc / hhvm / server.ini +` qui contient:

/etc/hhvm/server.ini

; php options

pid = /var/run/hhvm/pid

; hhvm specific

hhvm.server.port = 9000
hhvm.server.type = fastcgi
hhvm.server.default_document = index.php
hhvm.log.use_log_file = true
hhvm.log.file = /var/log/hhvm/error.log
hhvm.repo.central.path = /var/run/hhvm/hhvm.hhbc

Dans la configuration ci-dessus, vous remarquerez peut-être la variable + hhvm.server.port + qui détermine que HHVM sera à l’écoute sur le port TCP 9000. De plus, sauf indication contraire, il écoutera par défaut sur localhost.

HHVM étant considéré pour les environnements soumis à une charge de travail importante, le premier changement de configuration que vous pouvez faire consiste à faire en sorte que HHVM écoute un socket au lieu d’un port TCP. Ainsi, la communication entre Nginx et HHVM nécessitera moins de processeur et de mémoire.

Pour configurer HHVM afin qu’il écoute sur un socket, ouvrez le fichier + / etc / hhvm / server.ini + dans votre éditeur favori, par exemple avec + vim +:

sudo vim /etc/hhvm/server.ini

Ensuite, supprimez la ligne commençant par + hhvm.server.port + et ajoutez-la à sa place:

/etc/hhvm/server.ini

hhvm.server.file_socket=/var/run/hhvm/hhvm.sock

Enregistrez le fichier de configuration et redémarrez HHVM avec la commande:

sudo service hhvm restart

Ensuite, vous devez informer Nginx de ce changement. Ouvrez pour cela le fichier + / etc / nginx / hhvm.conf +:

sudo vim /etc/nginx/hhvm.conf

Dans ce fichier, assurez-vous que la directive + fastcgi_pass + pointe vers le socket HHVM et ressemble à ceci:

fastcgi_pass ;

Vous devrez également redémarrer Nginx pour que cette modification soit prise en compte. Pour cela, utilisez la commande:

sudo service nginx restart

Le script + / usr / share / hhvm / install_fastcgi.sh + peut vous faire gagner du temps, mais il y a des choses que vous devez adapter manuellement, en particulier en ce qui concerne vos blocs de serveur Nginx. Par exemple, la configuration de bloc de serveur par défaut s’ouvre en tant que fichiers d’index uniquement les fichiers + index.html + et + index.htm + lorsque la liste des répertoires est interdite. C’est une chose que vous devriez sûrement changer et inclure également les fichiers + index.php + en tant que fichiers d’index. Pour ce faire, ouvrez à nouveau le fichier de configuration du bloc serveur par défaut avec votre éditeur favori:

sudo vim /etc/nginx/sites-enabled/default

Ensuite, allez dans la partie + server + et ajoutez + index.php + à la ligne avec les index pour qu’il ressemble à ceci:

/ etc / nginx / sites-enabled / default

index index.html index.htm index.php;

Redémarrez à nouveau Nginx pour que ce paramètre prenne effet:

sudo service nginx restart

Tester et peaufiner HHVM

Le premier test que vous pouvez effectuer est avec l’interface de ligne de commande PHP (cli) + / usr / bin / php + qui pointe vers + / etc / alternatives / php +, ce qui en bout point pointe vers le binaire HHVM `+ / usr / bin / hhvm + `.

/usr/bin/php --version

Lorsque vous exécutez la commande ci-dessus, vous devriez voir les informations imprimées de la version de HHVM et du référentiel, comme suit:

HipHop VM 3.8.1 (rel)
Compiler: tags/HHVM-3.8.1-0-g3006bc45691762b5409fc3a510a43093968e9660
Repo schema: 253b3802ce1bcd19e378634342fc9c245ac76c33

Si vous avez déjà installé PHP avant HHVM, vous pouvez toujours voir le résultat de l’ancien PHP. Pour changer cela et le faire pointer sur HHVM, exécutez la commande:

sudo /usr/bin/update-alternatives --install /usr/bin/php php /usr/bin/hhvm 60

Ensuite, vous pouvez utiliser la fonction bien connue + phpinfo () + pour voir les paramètres et les options de HHVM. Pour ce faire, créez un nouveau fichier nommé + info.php + à la racine de votre document par défaut - + / usr / share / nginx / html + avec votre éditeur favori.

sudo vim /usr/share/nginx/html/info.php

Le nouveau fichier doit contenir:

/usr/share/nginx/html/info.php

<?php
phpinfo();
?>

Il est toujours recommandé de s’assurer que tous les fichiers Web Nginx sont détenus par l’utilisateur Nginx + www-data +. Ceci change la propriété de ce fichier en + www-data avec la commande:

sudo chown www-data: /usr/share/nginx/html/info.php

Maintenant, essayez d’accéder à ce fichier à l’adresse IP de votre Droplet. L’URL à mettre dans votre navigateur devrait ressembler à + ​​http: /// info.php +.

Le résultat dans votre navigateur devrait ressembler à ceci:

image: https: //assets.digitalocean.com/articles/HHVM_ubuntu1404/HHVMinfo.png [informations PHP de HHVM]

Si vous ne voyez pas une page similaire, assurez-vous d’abord que vous avez bien suivi les instructions d’installation décrites dans les prérequis. Deuxièmement, recherchez les erreurs dans le journal des erreurs de Nginx (+ / var / log / nginx / error.log +) et HHVM (+ / var / log / hhvm / error.log +).

En revenant sur votre navigateur, vous remarquerez peut-être que cette page est similaire à celle produite par + phpinfo () + avec le PHP habituel. En fait, la plupart des variables sont identiques à celles de PHP habituel à l’exception des variables spécifiques à HHVM commençant par le préfixe + hhvm. +.

En explorant les variables, notez que + memory limit + est égal à 17179869184 octets, soit un peu plus de 17 Go. Une telle limite de ressources mémoire va certainement tuer un Droplet avec quelques Go de RAM, le rendant insensible. Vous devez réduire cette valeur à une valeur inférieure à la RAM disponible de votre Droplet pour vous assurer que les autres services de Droplet ne souffriront pas d’un manque de RAM.

Par exemple, si votre Droplet dispose de 2 Go de RAM, vous pouvez dédier environ 1,2 Go à HHVM. Pour ce faire, éditez le fichier + / etc / hhvm / php.ini + avec votre éditeur favori (+ sudo vim / etc / hhvm / php.ini +) et ajoutez une nouvelle variable après le `+; options php + section `:

/etc/hhvm/php.ini

memory_limit =

De la même manière, vous pouvez modifier n’importe quel paramètre et variable PHP selon vos besoins et vos goûts. Assurez-vous simplement de redémarrer HHVM après chaque modification avec la commande:

sudo service hhvm restart

Ensuite, vous pouvez effectuer un test plus complexe avec une application Web commune. Il est important de savoir que HHVM n’est pas compatible à 100% avec le PHP habituel, ni avec tous les frameworks PHP courants. Nos tests lors de la rédaction de cet article ont montré que de nombreuses applications Web PHP, telles que WordPress, semblent bien fonctionner. Cependant, officiellement, le nombre de supported frameworks est limité.

Lorsque vous testez avec une application web / framework complète, il ne devrait y avoir aucune considération spécifique à HHVM. Les instructions d’installation et d’utilisation doivent être les mêmes que pour une pile LEMP standard. En effet, par défaut, HHVM est fourni avec la plupart des modules PHP offrant une bonne compatibilité.

Néanmoins, dans certains cas assez rares, vous devrez peut-être installer un module supplémentaire pour HHVM. Par exemple, si vous utilisez PostgreSQL en tant que serveur de base de données, vous aurez besoin du module + pgsql. Dans ce cas, consultez d’abord HHVM documentation officielle même s’il peut vous renvoyer à une ressource tierce, comme dans le cas de + pgsql +.

Conclusion

Comme le montre cet article, HHVM peut être facilement installé, configuré et intégré à Nginx. Si vous avez suffisamment de ressources, vous devriez absolument essayer et voir comment le compilateur JIT unique de HHVM fonctionne pour vous en termes de performances et de stabilité. Il doit exister une bonne raison pour qu’un site comme Facebook doté de fonctionnalités complexes et d’un trafic inégalé lui fasse confiance. Toutefois, pour les sites plus petits avec moins de trafic, une solution d’empreinte mémoire plus faible telle que PHP-FPM peut constituer un meilleur choix.

Related