PM2 para JavaScript (Node.js): guía completa con ejemplos prácticos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

PM2 para JavaScript (Node.js): guía completa con ejemplos prácticos

1. ¿Qué es PM2 y por qué usarlo?

PM2 (Process Manager 2) es un potente gestor de procesos para aplicaciones Node.js, diseñado para entornos de producción. Permite iniciar, detener, reiniciar y monitorear aplicaciones Node.js, garantizando alta disponibilidad y tolerancia a fallos. PM2 reinicia automáticamente los procesos que fallan, distribuye la carga entre múltiples instancias (clustering), incluye un balanceador de carga integrado y soporta reinicios sin tiempo de inactividad (graceful reload).

En producción, las aplicaciones Node.js suelen enfrentar errores inesperados, fugas de memoria o sobrecargas. PM2 resuelve estos problemas actuando como un "demonio guardián": supervisa el estado de cada proceso, registra stdout/stderr, proporciona métricas de rendimiento (CPU, memoria) y permite gestionar la aplicación desde la línea de comandos o mediante una API. Sin PM2, los desarrolladores tendrían que escribir scripts manuales para reinicios, monitoreo y escalado; PM2 automatiza todas estas tareas.

Las funcionalidades clave de PM2 incluyen: clustering (ejecución de varios workers en todos los núcleos de la CPU), reinicios sin tiempo de inactividad, gestión de entornos (desarrollo/producción), monitoreo integrado (pm2 monit), soporte para archivos de configuración (ecosystem.config.js) e integración con sistemas de inicio (systemd, upstart) para arranque automático al iniciar el servidor.

2. Instalación

PM2 se instala globalmente a través de npm (Node Package Manager). El comando exacto es:

npm install -g pm2

Para instalar una versión específica:

npm install -g pm2@5.3.0

Después de la instalación, verifica la versión:

pm2 --version

3. Inicio rápido — ejemplo mínimo funcional

Crea una aplicación Node.js simple llamada app.js:

// app.js
const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('¡Hola desde PM2!\n');
});

const PORT = process.env.PORT || 3000;
server.listen(PORT, () => {
  console.log(`Servidor corriendo en el puerto ${PORT}`);
});

Ejecuta la aplicación con PM2:

pm2 start app.js --name mi-app

Verifica el estado:

pm2 status

Detén la aplicación:

pm2 stop mi-app

4. Métodos principales

4.1. pm2.start() — Iniciar una aplicación

Firma: pm2.start(script, options, callback)

Qué hace: Inicia el script especificado como un proceso de PM2 con las opciones indicadas (nombre, número de instancias, variables de entorno).

Ejemplo de código funcional:

const pm2 = require('pm2');

pm2.connect((err) => {
  if (err) {
    console.error(err);
    process.exit(2);
  }

  pm2.start({
    script: 'app.js',
    name: 'mi-app',
    instances: 2, // ejecutar 2 instancias
    exec_mode: 'cluster', // modo cluster
    env: {
      NODE_ENV: 'production',
      PORT: 3000
    }
  }, (err, apps) => {
    if (err) {
      console.error(err);
      return pm2.disconnect();
    }
    console.log('Aplicación iniciada:', apps);
    pm2.disconnect();
  });
});

4.2. pm2.stop() — Detener un proceso

Firma: pm2.stop(process, callback)

Qué hace: Detiene el proceso especificado (por nombre, ID o todos los procesos).

Ejemplo de código funcional:

const pm2 = require('pm2');

pm2.connect((err) => {
  if (err) {
    console.error(err);
    process.exit(2);
  }

  // Det                    

Recommendations