Crear aplicaciones nodejs de alta disponibilidad con pm2

Antes de leer mi siguiente artículo, podemos empezar por repasar el concepto de [ alta disponibilidad en aplicaciones](/aplicacion-alta-disponibilidad) PM2 es un administrador de procesos para aplicaciones Node.js con un balanceador de carga incorporado. Con él podéis construir aplicaciones nodejs de alta disponibilidad con unos sencillos pasos que os detallaré a continuación.

Instalación

Instalaremos pm2 de forma global, vía gestor de paquetes de node, con el siguiente comando :
npm install pm2 -g

Actualización

Con la siguiente instrucción conseguiremos mantener pm2 actualizado:
npm install pm2 -g && pm2 update

Autocompletado

Por defecto, esta utilidad no viene instalada.
pm2 completion install

Iniciar aplicaciones

Arrancar vuestra aplicación nodejs es muy sencillo, usando el siguiente comando:
pm2 start app.js
Este comando hará que Pm2 lance vuestra aplicación en background.

Guardar lista de procesos

Para poder restaurar nuestras aplicaciones entre reinicios de sistema, es necesario tener guardada nuestra lista de procesos. Esto lo podemos hacer con el siguiente comando:
pm2 save

Startup hook

El objetivo de este hook no es más que mantener vuestra lista de procesos entre reinicios del sistema, incluso aquellos inesperados.
pm2 startup

Balanceo de carga

Aquí comienza la parte interesante de pm2, la posibilidad de balancear la carga de trabajo, escalando vuestra aplicación mediante procesos del sistema. Esta funcionalidad depende del número de procesadores disponibles en vuestra máquina, por ejemplo, si vuestro pc tiene 4, podrá correr vuestra aplicación en 4 procesos diferentes balanceando las peticiones entre los mismos. El comando que debemos utilizar es el siguiente :
pm2 start app.js -i max 
Después de -i indicaremos el número de cpus a utilizar o también si queremos, la posiblidad de escalar la aplicación entre el máximo disponible al utilizar "max".

Declaración mediante archivo ecosystem

Podemos hacer que nuestra aplicación se arranque mediante una configuración definida en un archivo js, llamado ecosystem.config.js. En este archivo podremos declarar el comportamiento o incluso variables de entorno. Para crear una plantilla de archivo ecosystem.config.js, ejecutamos el comando:
pm2 init
Esto nos generará un archivo con la siguiente estructura:
module.exports = {
  apps : [{
    name: "app",
    script: "./app.js",
    env: {
      NODE_ENV: "development",
    },
    env_production: {
      NODE_ENV: "production",
    }
  }]
}
Una vez creado, lo ubicáis en el directorio de vuestro código fuente y podréis ejecutar las aplicaciones definidas en el mismo, con el siguiente comando:
pm2 start
También podréis cargar este fichero desde otro directorio, de la siguiente forma:
pm2 start /path/to/file.js

OTROS COMANDOS IMPORTANTES:

  • pm2 list: Listar aplicaciones disponibles via pm2.
  • pm2 stop 'appName | appId': Para una aplicación, indicando su nombre o identificador.
  • pm2 restart 'appName | appId' : Reinicia una aplicación, indicando su nombre o identificador.
  • pm2 save: Guarda la lista de procesos que queremos arrancar y la mantiene entre reinicios del sistema