Cómo instalar HHVM en Ubuntu con Apache
Hace ya tiempo que quería hablaros de Hip Hop Virtual Machine más conocido por su abreviatura HHVM. No se trata de ningún grupo de música sino de una máquina virtual diseñada por Facebook para su propio uso pero que han liberado el código para que todos podamos usarla.
HHVM da soporte a PHP y a Hack, siendo este último un nuevo lenguaje de programación basado en PHP y que nos aporta características nuevas como el uso de colecciones (alternativas a los arrays de PHP), tipado estático, permite el uso de expresiones Lambda, etc… Cómo no es el objetivo del artículo hablar a fondo sobre el lenguaje Hack podéis visitar la página oficial con toda la información (en inglés).
La principal característica de HHVM es que dispone de un compilador JIT (just-in-time). Para explicarlo de forma sencilla, HHVM compila PHP (o lenguaje Hack) en bytecode y después este bytecode es traducido a lenguaje de máquina mediante el compilador JIT. El proceso de compilación descrito permite realizar diversas optimizaciones y así incrementar el rendimiento de nuestras aplicaciones PHP. Si queréis conocer HHVM más a fondo, lo mejor es visitar su web oficial y su página de GitHub.
Antes de continuar también debo aclarar que la configuración que muestro en este tutorial de como instalar HHVM en Ubuntu, no está destinado a servidores en producción.
Guía de instalación de HHVM en Ubuntu 14.04 x64 con Apache
Lo primero va a ser describiros el entorno de trabajo sobre el que estamos trabajando para que podáis replicarlo. Las pruebas han sido realizadas en un VPS de DigitalOcean de 512MB de RAM y con el sistema operativo Ubuntu 14.04 x64. Debo aclarar que HHVM sólo funciona en sistemas operativos x64, asique no uséis un sistema operativo de 32 bits porque no funcionará.
La versión de Apache instalada en el momento de escribir el tutorial es Apache 2.4.7, la que instalamos apt-get por defecto (más adelante describo como hacerlo).
Instalando Hip Hop Virtual Machine desde cero.
Una vez que accedemos a nuestro servidor a través de SSH con PuTTY por ejemplo, tenemos que ejecutar los comandos descritos en la documentación oficial, que son los siguientes para Ubuntu 14.04:
wget -O - http://dl.hhvm.com/conf/hhvm.gpg.key | sudo apt-key add - echo deb http://dl.hhvm.com/ubuntu trusty main | sudo tee /etc/apt/sources.list.d/hhvm.list sudo apt-get update sudo apt-get install hhvm
En este punto ya está HHVM instalado y debemos instalar Apache, para esto ejecutamos el siguiente commando:
sudo apt-get install apache2
Cuando termine el proceso de instalación debemos configurar Apache y HHVM para que trabajen juntos, para conseguir esto ejecutamos los comandos:
sudo /usr/share/hhvm/install_fastcgi.sh sudo /etc/init.d/hhvm restart sudo service apache2 restart
Llegados a este punto vamos a hacer dos pruebas para comprobar que todo ha ido bien. Primero ejecutamos el comando php -v
y nos debería aparecer en pantalla algo similar a:
Compiler: tags/HHVM-3.4.0-0-g817b3a07fc4e509ce15635dbc87778e5b3496663 Repo schema: 0e12aaa31fae66b5591f65603de50c9d62caafac Extension API: 20140829
Lo segundo será acceder a nuestro servidor Apache para comprobar que está funcionando. Para esto hay que poner en nuestro navegador la IP de la siguiente forma: http://ip_servidor
, por ejemplo, http://128.179.37.10
Durante la configuración anterior de HHVM se crea un archivo que provoca un error 404 cuando tratamos de acceder a archivos php. La solución es eliminar este archivo de configuración con el siguiente comando:
sudo rm -rf /etc/apache2/mods-enabled/hhvm_proxy_fcgi.conf
Ahora editamos el archivo de configuración de Apache con el comando:
nano /etc/apache2/apache2.conf
Nos desplazamos hasta la sección de configuración de directorios e introducimos la línea:
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/$1
Tiene que quedar tal y como se ve en la imagen (para configuraciones más avanzadas consultar la documentación oficial).
Reiniciamos Apache y con esto todos los archivos con extensión PHP pasarán a través de HHVM.
sudo service apache2 restart
Para probar que realmente funciona, creamos un archivo php de prueba y luego accedemos a el:
cd /var/www/html nano test.php
Agregamos la línea:
<?php phpinfo(); ?>
Accedemos al archivo php a través del navegador:
Espero que os haya servido de ayuda el tutorial y si os surge alguna duda no dudéis en usar los comentarios.