Instalación de Nginx + HHVM + MariaDB + WordPress

Escrito por systeminside en y tuvo 11 comentarios
Redes y Servidores

A continuación explicaré paso por paso, el procedimiento que llevé a cabo para poner en marcha el VPS donde está hospedado SystemInside.

Para dar inicio a este proyecto, a modo de experimento, no necesitaba un servidor con demasiadas prestaciones, por lo menos no en su momento inicial. Es por ello que decidí contratar un VPS con KVM en Crissic, quienes ofertan unos precios bastante razonables.

El punto es que dicho VPS no tiene grandes prestaciones, por lo que necesitaba para poner en marcha este proyecto el mejor software disponible para hacer funcionar un WordPress lo suficientemente estable.

La respuesta era obvia, para servir el sitio la apuesta ideal era NGinx, un pequeño servidor web que ha ganado muchísima popularidad en estos tiempos por su velocidad, poco consumo y excelente rendimiento. El problema de NGinx es que por si mismo no procesa sitios o aplicaciones desarrollados con PHP, por lo que necesitaba un intérprete adecuado para procesar este tipo de contenido.

Tenía 3 opciones:

  1. PHP-FPM
  2. FastCGI
  3. HHVM

Con los dos primeros he tenido más experiencia, sin embargo, HHVM (Hip Hop Virtual Machine) no solo ha ganado mucha popularidad, sino que ha demostrado tener un rendimiento y consumo excelente. Y no es para menos, fue desarrollado para procesar millones de peticiones en Facebook y a cumplido con su tarea.

Por último necesitaba un servidor de base de datos, siendo MariaDB la mejor opción, no solo por ser un fork de MySQL, sino por ser mantenido por el propio creador de MySQL y según algunos benchmarks que he visto, el rendimiento de MariaDB es muchísimo superior. Otro detalle importante es que al final los comandos son similares.

Dicho esto, pasemos a la parte de la instalación y configuración del servidor. Los pasos a continuación serán ejecutados en un VPS con Ubuntu 14.04 sobre 64 bits. Y es importante este último dato, pues HHVM no funciona sobre 32 bits.

Instalando Nginx

NGinx viene por defecto incluido en los repositorios de Ubuntu, por lo tanto solo debemos ejecutar:

$ sudo apt-get install nginx

Una vez que termine la instalación, solo debemos acceder mediante el navegador web a la IP de nuestro servidor y asegurarnos que NGinx está funcionando. Nos debe salir algo como esto:

nginx bienvenida

Hasta ahí NGinx está funcionando, pero debemos hacer algunos cambios para optimizar su trabajo. Lo primero es editar el fichero /etc/nginx/nginx.conf. Los valores de este fichero pueden variar en dependencia de nuestro hardware, pero es importante modificar el parámetro:

worker_processes 4;

Donde sustituimos el 4 por el valor de la cantidad de núcleos que tenga nuestro procesador. Por ejemplo, si tenemos un procesador con dos núcleos lo dejamos así:

worker_processes 2;

ahora debemos crear el Virtual Host para cuando instalemos WordPress. Escribimos:

touch /etc/nginx/sites-available/misitio

y lo editamos poniendo adentro lo siguiente:

server {
        root /usr/share/nginx/html/nuestrositio/;
        index index.php index.html index.htm;

        server_name tudominio.net www.tudominio.net;
        include hhvm.conf;

        access_log /var/log/nginx/sitio_access.log;
        error_log /var/log/nginx/sitio_error.log;

        location / {
                # try_files $uri $uri/ =404;
                try_files $uri $uri/ /index.php?q=$uri&$args;
        }

        if (!-e $request_filename)
        {
         rewrite ^(.+)$ /index.php?q=$1 last;
        }

}

Instalando MariaDB

Ahora le toca el turno al servidor web, para ello ponemos en el terminal:

$ sudo apt-get install mariadb-client mariadb-server

En el proceso nos pedirá una contraseña para el usuario root. Una vez que termine, ejecutamos el comando:

$ mysql_secure_installation

Y nos saldrá un asistente que nos pedirá responder con Si (Y) o No (n) algunas preguntas. Debemos hacerlo de esta forma:

Enter current password for root (enter for none): PRESS ENTER

Set root password? [Y/n] Y
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

La primera pregunta después de poner la contraseña que pusimos en el proceso de instalación, es si queremos cambiar la contraseña de root. Es recomendable hacerlo si la contraseña que escogimos anteriormente es débil o fácil de adivinar.

Ahora accedemos a MariaDB con el comando:

$ mysql -u root -p

Y procedemos a crear el usuario y la base de datos de nuestro sitio:

create database wordpressdb;
create user wpuser@localhost identified by 'wpuser_password';
grant all privileges on wordpressdb.* to wpuser@localhost identified by 'wpuser_password';
flush privileges;
\q

¿Qué fue lo que hicimos acá?

  1. Creamos una base de datos con el nombre wordpressdb.
  2. Creamos el usuario wpuser con la contraseña wpuser_password.
  3. Le otorgamos todos los privilegios al usuario wpuser en la base de datos wordpressdb.
  4. Por último actualizamos los privilegios y salimos de MariaDB.

Es importante que se percaten que al final de cada línea hay un punto y coma (;). Si no lo ponemos nos dará un error.

Instalando HHVM

Ahora pasamos a instalar HHVM. Para ello debemos añadir un repositorio de terceros para tener la última versión disponible para nuestro sistema. Para añadir los repositorios de HHVM a nuestro sources.list ejecutamos en el terminal:

$ wget -O - http://dl.hhvm.com/conf/hhvm.gpg.key | sudo apt-key add -
echo deb http://dl.hhvm.com/ubuntu vivid main | sudo tee /etc/apt/sources.list.d/hhvm.list
sudo apt-get update

Posteriormente lo instalamos con el comando:

$ sudo apt-get install -y hhvm

Cuando termine de instalar ejecutamos un script que configurará nuestro servidor web para que funcione con HHVM:

$ sudo /usr/share/hhvm/install_fastcgi.sh

Como es lógico, vamos a querer que HHVM se inicie cada vez que reiniciemos el sistema, así que ejecutamos:

$ sudo update-rc.d hhvm defaults

y para que HHVM actúe como si tuviésemos instalado php-cli ejecutamos:

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

Ahora vamos a comprobar que está funcionando creamos el típico fichero info.php en el directorio raíz de nuestro servidor web. En el caso de NGnix, ya no se encuentra en /var/www/html, sino en /usr/share/nginx/html/.

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

Adentro le ponemos:

<?php
phpinfo();
?>

Y por si acaso, reiniciamos tanto NGinx como HHVM

$ sudo /etc/init.d/nginx restart
$ sudo /etc/init.d/hhvm restart

Ahora accedemos a http://nuestra_ip/info.php y debe salir algo como esto:

HHVM Info

Esto significa que se están procesando los ficheros .php correctamente.

Instalación de WordPress

Ya por último nos queda hacer la instalación de WordPress. Lo primero que haremos es activar el Virtual Host que creamos para nuestro sitio:

$ sudo ln -s /etc/nginx/sites-available/misitio /etc/nginx/sites-enabled/misitio

ahora descargamos WordPress, lo descomprimimos y renombramos la carpeta resultante de wordpress a misitio y le cambiamos el propietario:

cd /usr/share/nginx/html/
wget wordpress.org/latest.zip
unzip latest.zip
mv wordpress misitio
chown -R www-data:www-data misitio

Ahora le cambiamos el nombre al fichero wp-config-sample.php y lo dejamos como wp-config.php. Si no hacemos esto, de todos modos el asistente de instalación nos pedirá ingresar los datos, pero para ello debemos darle los permisos necesarios a los ficheros de WordPress. Yo prefiero hacerlo a mano.

$ sudo mv wp-config-sample.php wp-config.php

debemos editar los siguientes valores:

/** El nombre de la base de datos */
define('DB_NAME', 'wordpressdb');

/** Usuario de la base de datos */
define('DB_USER', 'wpuser');

/** MySQL database password */
define('DB_PASSWORD', 'wpuser_password');

Guardamos y reiniciamos NGnix para que tome los cambios del Virtual Host:

$ sudo /etc/init.d/nginx restart

Apuntamos en el navegador hacia la URL de nuestro sitio y si todo ha ido bien, debe cargarnos el asistente de instalación de WordPress, lo cual veremos detalladamente en otro artículo.

Muchos de estos pasos fueron vistos en HowToForge.

systeminside

systeminside

Blogger, Melómano, Administrador de Sistemas, Diseñador Web.

¿Ideas? ¿Comentarios?

  1. Muy buena elav, me ha gustao el artículo 😀 creo que haré pruebas con la web de sapphiregd xDD

    Responder
    1. @frk7z:

      Pues yo me he quedado loco con el excelente rendimiento de HHVM, eso si, tampoco es que tenga un tráfico excesivo ahora mismo..

      Responder
      1. @systeminside:

        Jajaja, nosotros tampoco lo tenemos xDD, pero igual, como Amazon te deja el uso de su infraestructura por 1 año gratis, ahí malograré las cosas 😛

        Responder
  2. Esto me lo guardo en mís favoritos. Puede que algún día me dé por hacer una migración a nginx, y me vendrá bien.

    Responder
    1. @tarteka:

      Pues todo tuyo, llévatelo jajaja.

      Responder
  3. Para cuando me daba cuenta un rato despu s me conectaba por SSH y comprobaba que estaba todo funcionando excepto el servicio HHVM, que estaba inexplicablemente parado. Tras lo cual todo volver a la normalidad, pero claro, uno tiene que enterarse de que hay problemas.

    Responder
  4. Para cuando me daba cuenta un rato despu s me conectaba por SSH y comprobaba que estaba todo funcionando excepto el servicio HHVM, que estaba inexplicablemente parado. Tras lo cual todo volver a la normalidad, pero claro, uno tiene que enterarse de que hay problemas.

    Responder
    1. @Matthew Gimble:

      ¿En Ubuntu? Porque tengo entendido que eso pasaba en CentOS.. pero no en Ubuntu…

      Responder

¿...?