que-es-como-usar-pm2

Cómo gestionar procesos de Node.js con PM2

  • 3 min

PM2 es un gestor de procesos para aplicaciones Node.js que permite administrar, monitorear y mantener aplicaciones en producción.

Generalmente, cuando desarrollamos aplicaciones Node.js, las ejecutamos directamente con:

node app.js

Pero esto tiene varios problemas en producción. Por ejemplo, si la aplicación falla no se reiniciará, no tenemos forma fácil de monitorizar el estado, etc etc.

PM2 resuelve todos estos problemas proporcionando:

  • Auto-reinicio de aplicaciones cuando fallan
  • Monitorización y logs en tiempo real
  • Balanceo de carga entre múltiples instancias

Aviso sobre licencia AGPLv3:
PM2 se distribuye bajo licencia AGPLv3 (GNU Affero General Public License). Podrían surgir obligaciones potenciales si:

  • Integras profundamente PM2 en tu aplicación (creando obra derivada)
  • Ofreces PM2 como servicio SaaS público (requeriría liberar modificaciones)

Instalación de PM2

Para usar PM2 lo instalamos globalmente usando NPM:

npm install -g pm2

Ahora podemos verificar que se ha instalado correctamente haciendo:

pm2 --version

Uso básico de PM2

Iniciar una aplicación

El comando básico para iniciar una aplicación con PM2 es:

pm2 start app.js

También podemos especificar un nombre para la aplicación:

pm2 start app.js --name "mi-api"

PM2 automáticamente daemoniza el proceso (lo ejecuta en segundo plano)

Comandos esenciales

Aquí tenéis un listado con los principales comandos que tenemos disponibles en PM2.

ComandoDescripción
pm2 listLista todas las aplicaciones gestionadas
`pm2 show <idnombre>`
`pm2 stop <idnombre>`
`pm2 restart <idnombre>`
`pm2 delete <idnombre>`
pm2 logsMuestra logs en tiempo real
pm2 monitMonitor interactivo

Y aquí un ejemplo de su uso,

# Iniciar aplicación
pm2 start server.js --name "api-server"

# Ver estado
pm2 list

# Ver logs
pm2 logs api-server

# Detener aplicación
pm2 stop api-server

# Eliminar aplicación
pm2 delete api-server

Startup script

Para asegurar que PM2 se inicie automáticamente al reiniciar el sistema podemos hacer,

pm2 startup
pm2 save

Esto creará un script de inicio apropiado para tu sistema operativo.

En sistemas Linux, el comando pm2 startup debe ejecutarse con los permisos adecuados, generalmente a traves de sudo

Cluster mode

Node.js es single-threaded por defecto. PM2 permite crear un cluster de procesos fácilmente:

pm2 start app.js -i max

Esto creará una instancia por cada CPU disponible, compartiendo el mismo puerto.

El modo cluster solo funciona para aplicaciones stateless. Si usas sesiones en memoria, necesitarás una solución como Redis.

Monitorización y logs

PM2 incluye un monitor integrado:

pm2 monit

pm2-monitor

Además PM2 gestiona automáticamente los logs:

  • ~/.pm2/logs/app-out.log: Logs estándar
  • ~/.pm2/logs/app-error.log: Logs de error

Algunos comandos

# Ver logs en tiempo real
pm2 logs

# Vaciar logs
pm2 flush

# Logs específicos de una app
pm2 logs app-name

Configuración avanzada con archivos ecosystem

Para configuraciones más complejas, PM2 soporta archivos de configuración (ecosystem.config.js):

module.exports = {
  apps: [{
    name: "api",
    script: "./src/index.js",
    instances: 2,
    exec_mode: "cluster",
    env: {
      PORT: 3000,
      NODE_ENV: "development"
    },
    env_production: {
      PORT: 80,
      NODE_ENV: "production"
    }
  }]
}
  • instances: Número de instancias (puede ser un número o “max” para usar todos los CPUs)
  • exec_mode: “cluster” o “fork”
  • env: Variables de entorno
  • watch: Reiniciar automáticamente al detectar cambios
  • error_file y out_file: Rutas para los logs