Correr una aplicación Node.js en producción con PM2
Dedicados & VPS
21

Correr una aplicación Node.js en producción con PM2

Cuando estás desarrollando, lanzas tu app Node con node app.js y listo. Pero eso no sirve en producción: si el proceso se cae, nadie lo levanta; si cierras la sesión SSH, se muere; y si tu servidor reinicia, tu aplicación queda apagada. La solución estándar se llama PM2, un administrador de procesos pensado específicamente para Node.js.

¿Qué hace PM2 por ti?

PM2 mantiene tu aplicación viva como un demonio del sistema. Si tu código lanza una excepción no controlada y el proceso muere, PM2 lo reinicia automáticamente. Además, centraliza los logs, muestra métricas de CPU y memoria en tiempo real, y te permite correr varias instancias de tu app en paralelo para aprovechar todos los núcleos del CPU.

Instalación

PM2 se instala como paquete global con npm:

npm install -g pm2

Si usas NVM, no necesitas sudo. Después comprueba la instalación con pm2 --version.

Lanzar tu aplicación

Para arrancar una app, ve al directorio del proyecto y ejecuta:

pm2 start app.js --name miapp

El flag --name es opcional pero muy útil para identificarla luego. Para ver el estado de todos los procesos administrados por PM2:

pm2 list
pm2 status

Si tu app es un script escrito en TypeScript o necesita variables de entorno, puedes pasarlas directo o usar un archivo de configuración llamado ecosystem.config.js.

Logs y depuración

PM2 captura tanto stdout como stderr. Para ver los logs en vivo:

pm2 logs miapp

Y si quieres solo los últimos 100 renglones: pm2 logs miapp --lines 100. Los archivos de log físicos se guardan en ~/.pm2/logs/. También tienes pm2 flush para vaciarlos cuando crezcan demasiado.

Cluster mode

Si tu VPS tiene varios núcleos, lanza tu app en modo cluster para procesar más requests en paralelo:

pm2 start app.js -i max --name miapp

El -i max arranca tantas instancias como núcleos tengas. PM2 balancea las conexiones entrantes entre ellas automáticamente. Ten presente que tu código debe ser compatible con cluster mode (evita almacenar estado solo en memoria local).

Auto-start al reiniciar el VPS

Para que PM2 vuelva a lanzar tus apps después de un reboot del servidor:

pm2 startup
pm2 save

El comando startup te devolverá una línea que debes copiar y pegar (con sudo) para registrar PM2 como servicio del sistema. Luego pm2 save guarda la lista de procesos actual para que se restauren tras el reinicio.

Comandos de uso diario

Los que vas a usar más seguido:

pm2 restart miapp
pm2 reload miapp
pm2 stop miapp
pm2 delete miapp
pm2 monit

restart reinicia el proceso desde cero; reload hace un reinicio gradual sin downtime en modo cluster; y monit abre un panel interactivo con uso de recursos en tiempo real, muy práctico cuando sospechas de una fuga de memoria.