PM2 (Process Manager 2) es una herramienta imprescindible en el arsenal de cualquier administrador de sistemas que trabaje con aplicaciones Node.js. Proporciona una solución fácil y potente para gestionar y mantener en funcionamiento aplicaciones Node.js en un entorno de producción. PM2 no solo garantiza que su aplicación esté siempre en línea, sino que también ofrece funcionalidades para el monitoreo en tiempo real, la gestión de logs, y la carga automática.
Pasos previos
Para el buen funcionamiento de PM2 es necesario tener instalado NodeJS en tu servidor así como el gestor de paquetes npm
.
Instalación de NodeJS
Para la instalación de NodeJS os dejamos este tutorial que explica su procedimiento:
Instalación de PM2
Para comenzar con PM2, primero debe estar instalado Node.js en su sistema. Con Node.js ya configurado, la instalación de PM2 se realiza a través de npm
(Node Package Manager), lo cual es tan simple como ejecutar el siguiente comando en la terminal:
npm install pm2 -g
Este comando instala PM2 globalmente en su sistema, permitiendo que se ejecute desde cualquier lugar.
Configuración básica de PM2
Para hacer este tutorial, utilizaremos un script sencillo para hacer pruebas, se trata de un script que levanta un servidor web y muestra un título.
Aquí el script que hemos guardado bajo el nombre app.js
:
const http = require('http');
// Crear un servidor HTTP
const server = http.createServer((req, res) => {
// Configurar la respuesta HTTP con encabezados
res.writeHead(200, {'Content-Type': 'text/html'});
// Enviar una respuesta HTML con un título
res.end('<html><body><h1>Mi Titulo en Pantalla</h1></body></html>');
});
// El servidor escucha en el puerto 3000
server.listen(3000, () => {
console.log('Servidor ejecutándose en http://localhost:3000/');
});
Algunos ejemplos de lo que podemos hacer con PM2
Podemos iniciar nuestra aplicación de la siguiente forma:
pm2 start app.js
Y mostrará el siguiente resultado:
# pm2 start app.js
[PM2] Starting /root/app.js in fork_mode (1 instance)
[PM2] Done.
┌────┬──────┬───────────┬──────┬─────┬────────┬────────┬─────┬───────┬──────┐
│ id │ name │ namespace │ mode │ pid │ uptime │ status │ cpu │ mem │ user │
├────┬──────┬───────────┬──────┬─────┬────────┬────────┬─────┬───────┬──────┤
│ 0 │ app │ default │ fork │ 863 │ 0s │ online │ 0% │ 18.3mb│ root │
└────┴──────┴───────────┴──────┴─────┴────────┴────────┴─────┴───────┴──────┘
Con este otro comando podremos mostrar las aplicaciones configuradas:
pm2 ls
pm2 list
Para parar, reiniciar o eliminar una aplicación:
# Para parar
pm2 stop [nombre_app]
# Para reiniciar
pm2 restart [nombre_app]
# Para eliminar
pm delete [nombre_app]
pm2 stop app
pm2 restart app
pm2 delete app
Monitoreo de las aplicaciones y registros
PM2 viene con herramientas integradas para el monitoreo y la gestión de logs. Puede monitorear sus aplicaciones con pm2 monit
y ver los logs con pm2 logs
.
Iniciar aplicaciones al arranque del sistema
Si queremos mantener diferentes aplicaciones, existe la posibilidad de añadir un demonio para que levante el servicio y cargue las aplicaciones directamente. Para ello tendremos que ejecutar este comando:
pm2 startup
Salida del comando:
[PM2] Init System found: systemd
Platform systemd
Template
[Unit]
Description=PM2 process manager
Documentation=https://pm2.keymetrics.io/
After=network.target
[Service]
Type=forking
User=root
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/root/.pm2
PIDFile=/root/.pm2/pm2.pid
Restart=on-failure
ExecStart=/usr/lib/node_modules/pm2/bin/pm2 resurrect
ExecReload=/usr/lib/node_modules/pm2/bin/pm2 reload all
ExecStop=/usr/lib/node_modules/pm2/bin/pm2 kill
[Install]
WantedBy=multi-user.target
Target path
/etc/systemd/system/pm2-root.service
Command list
[ 'systemctl enable pm2-root' ]
[PM2] Writing init configuration in /etc/systemd/system/pm2-root.service
[PM2] Making script booting at startup...
[PM2] [-] Executing: systemctl enable pm2-root...
Created symlink /etc/systemd/system/multi-user.target.wants/pm2-root.service → /etc/systemd/system/pm2-root.service.
[PM2] [v] Command successfully executed.
+---------------------------------------+
[PM2] Freeze a process list on reboot via:
$ pm2 save
[PM2] Remove init script via:
$ pm2 unstartup systemd
Con esto PM2 iniciará durante el arranque, pero para mantener las aplicaciones iniciadas, debemos de iniciar primero nuestra aplicación y luego guardar el listado de aplicaciones iniciadas:
pm2 save
Configuración avanzada
Para una gestión más avanzada, podemos utilizar un archivo de configuración ecosystem.config.js
, que permite definir múltiples aspectos de tu aplicación, como variables de entorno, número de instancias, y más.
module.exports = {
apps : [{
name: 'my-app',
script: 'app.js',
instances: 'max',
autorestart: true,
watch: false,
max_memory_restart: '1G',
env: {
NODE_ENV: 'development'
},
env_production: {
NODE_ENV: 'production'
}
}]
};
Para ejecutar una aplicación con este archivo de configuración, utilizaremos:
pm2 start ecosystem.config.js
Guardamos la configuración:
pm2 save
Conclusión
PM2 es una herramienta vital para cualquier administrador de sistemas que trabaje con Node.js. Facilita la gestión de aplicaciones, asegurando su disponibilidad y facilitando su monitoreo y mantenimiento. Con esta guía básica, usted está listo para comenzar a utilizar PM2 en sus proyectos Node.js.
Comentarios