En esta sección aprenderá cómo configurar NGINX con HHVM y MongoDB. Sin embargo, este tutorial no pretende ser una guia exclusiva de cómo ejecutar NGINX y HHVM en un entorno de producción.
En este tutorial emplearemos un sistema Debian con NGINX instalado
a través de apt-get
y HHVM instalado desde el código fuente o desde
paquetes preconstruidos a /usr/local/hhvm/3.9.1
(con los binarios ubicados
en /usr/local/hhvm/3.9.1/bin/hhvm
).
Simplemente instalamos NGINX ejecutando apt-get install nginx-full
.
Si NGINX no se iniciase después de su instalación, probablemente sea porque ya se
tenga otro servidor web (p.ej. Apache) ejecutándose en el mismo puerto. En este daso,
se podrán ver las siguientes líneas en /var/log/nginx/error.log
:
2015/09/29 10:19:27 [emerg] 22445#22445: bind() to 0.0.0.0:80 failed (98:Address already in use) 2015/09/29 10:19:27 [emerg] 22445#22445: bind() to [::]:80 failed (98: Address already in use)
Para solucionar este problema, se puede o bien cambiar el puerto predeterminado para NGINX o Apache,
o bien detener el proceso de Apache con service apache2 stop
, o bien eliminar
Apache por completo con apt-get remove apache2
.
Este tutorial está escrito desde la perspectiva de un desarrollador de extensiones, por lo que hemos instalado HHVM desde el código fuente para facilitar el desarrollo de parches y asegurar la disponibilidad de los símbolos de depuración. Dicho esto, los de Facebook también proporcionan paquetes preconstruidos, que es lo que probablemente usted utilice en producción y desarrollo. Se pueden encontrar las instrucciones de instalación de esto paquetes en la » Wiki de HHVM.
Será necesario instalar los paquetes hhvm
y hhvm-dev
. Este último es necesario
para poder compilar la extensión MongoDB HHVM después.
Si está compilando HHVM desde el código fuente, será necesario crear
/var/run/hhvm
:
sudo mkdir -p /var/run/hhvm sudo chown www-data.www-data /var/run/hhvm sudo mkdir /etc/hhvm sudo touch /etc/hhvm/php.ini # Así no tendrá que hacer ``sudo`` para editar el fichero sudo chown derick /etc/hhvm/php.ini # Para ver si realmente funciona echo "date.timezone=Europe/London" >> /etc/hhvm/php.ini
HHVM debería iniciarse como el usuario www-data
. Para los propósitos de
este tutorial, lo podremos ejecutar en segundo plano en el modo
server como sigue:
sudo -u www-data -s /usr/local/hhvm/3.9.1/bin/hhvm \ --mode server \ -vServer.Type=fastcgi \ -vServer.FileSocket=/var/run/hhvm/sock
Una vez se esté ejecutando HHVM, necesitamos indicar a NGINX cómo comunicarse con HHVM para ejecutar
ficheros .php
. Aunque esta no sea la estrategia más limpia,
se puede añadir el siguiente código a
/etc/nginx/sites-enabled/default
, justo depués de la
sección location / { … }
:
location ~ \.php$ { fastcgi_pass unix:/var/run/hhvm/sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
Después de añadir este código se debe reiniciar NGINX:
sudo service nginx restart
Para confirmar que todo funciona bien, crearemos un directorio de proyecto
con un fichero index.php
que llame a phpinfo()
:
Crear el directorio de proyecto:
sudo mkdir -p /var/www/html/mi-primer-proyecto
Cambiar los permisos a su usuario y al grupo www-data
:
sudo chown derick.www-data /var/www/html/mi-primer-proyecto
Crear el fichero /var/www/html/mi-primer-proyecto/index.php
.
Desde ahora, no incluiré la ruta completa
/var/www/html/mi-primer-proyecto/
al mencionar nombres de ficheros.
Poner el siguiente contenido en este fichero:
<?php
phpinfo();
?>
Ahora, en el navegador, solicite la página
http://gargleblaster/mi-primer-proyecto/index.php
(ajustando el
nombre del host). Se debería mostrar una página comenzando con "HHVM Version 3.9.1"
seguido de varias tablas con información.
El controlador de MongoDB es la parte que conecta el PHP de HHVM con el servidor de bases de datos. Para instalar y registrar el controlador con HHVM, es necesario seguir los pasos de Instalación manual de Controlador de MongoDB para HHVM.
Después de haber instalado y habilitado la extensión, HHVM necesitará reiniciarse. Si se tenía HHVM ejecutándose en el «shell» anteriormente, detnéngalo con Ctrl-C y reinicielo de nuevo como antes:
sudo -u www-data -s /usr/local/hhvm/3.9.1/bin/hhvm \ --mode server \ -vServer.Type=fastcgi \ -vServer.FileSocket=/var/run/hhvm/sock
Para porbar que el controlador está cargado, edite el fichero index.php
y reemplace su contenido con:
<?php
var_dump(phpversion("mongodb"));
?>
Esto debería mostrar algo similar a:
string(5) "x.y.z"
Continúe este tutorial en Empleo de la biblioteca de PHP para MongoDB (PHPLIB)