PM2, también llamado "Módulo de Gestión de Procesos", es un gestor de procesos que se utiliza para gestionar aplicaciones en Node.js. Es gratuito, de código abierto y tiene un equilibrador de carga incorporado. Reinicia automáticamente el servidor Node.js cuando un proceso deja de funcionar. Es multiplataforma y se puede ejecutar en Windows, Linux y macOS. Te permite ejecutar la aplicación Node.js en modo de clúster sin realizar ningún cambio en el código.
En este tutorial te mostramos cómo ejecutar y administrar aplicaciones Node.js usando PM2.
Requisitos Previos
- Un servidor corriendo con Ubuntu 20.04.
- Una contraseña root configurada en el servidor.
Instala Node.js
Antes de empezar, debes instalar Node.js en tu servidor. Primero, añade el repositorio de origen de Node con el siguiente comando:
# curl -sL https://deb.nodesource.com/setup_14.x | bash - Después, instala Node.js con el siguiente comando:
# apt-get install nodejs -yUna vez que la instalación esté completa, verifica la versión de Node.js utilizando el comando que indicamos más abajo:
# node --versionDeberías obtener el siguiente resultado:
v14.17.1Crea una Aplicación de muestra de Node.js
Para el propósito de este tutorial, necesitarás crear una aplicación de muestra de Node.js.
Primero, crea un directorio para tu app con el siguiente comando:
# mkdir myappPara continuar, crea una aplicación hello.js con el siguiente comando:
# nano myapp/hello.jsAñade las siguientes líneas:
const http = require('http');
const hostname = 'your-server-ip';
const port = 8000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('This is My First Nodejs App!\n');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});Recuerda que debes cambiar 'your-server-ip' por la IP Pública del servidor. Guarda y cierra el archivo cuando hayas terminado.
También deberás de abrir el puerto 8000 en el Firewall de tu servidor.
Instala PM2
Puedes instalar PM2 fácilmente utilizando el comando NPM como se muestra más abajo:
# npm i -g pm2 Una vez que PM2 esté instalado, inicia tu aplicación utilizando PM2:
# pm2 start myapp/hello.jsDeberías ver el siguiente resultado:
__/\\\\\\\\\\\\\____/\\\\____________/\\\\____/\\\\\\\\\_____
_\/\\\/////////\\\_\/\\\\\\________/\\\\\\__/\\\///////\\\___
_\/\\\_______\/\\\_\/\\\//\\\____/\\\//\\\_\///______\//\\\__
_\/\\\\\\\\\\\\\/__\/\\\\///\\\/\\\/_\/\\\___________/\\\/___
_\/\\\/////////____\/\\\__\///\\\/___\/\\\________/\\\//_____
_\/\\\_____________\/\\\____\///_____\/\\\_____/\\\//________
_\/\\\_____________\/\\\_____________\/\\\___/\\\/___________
_\/\\\_____________\/\\\_____________\/\\\__/\\\\\\\\\\\\\\\_
_\///______________\///______________\///__\///////////////__
Runtime Edition
PM2 is a Production Process Manager for Node.js applications
with a built-in Load Balancer.
Start and Daemonize any application:
$ pm2 start app.js
Load Balance 4 instances of api.js:
$ pm2 start api.js -i 4
Monitor in production:
$ pm2 monitor
Make pm2 auto-boot at server restart:
$ pm2 startup
To go further checkout:
http://pm2.io/
-------------
[PM2] Spawning PM2 daemon with pm2_home=/root/.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting /root/myapp/hello.js in fork_mode (1 instance)
[PM2] Done.
┌─────┬──────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼──────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ hello │ default │ N/A │ fork │ 2788 │ 0s │ 0 │ online │ 0% │ 28.0mb │ root │ disabled │
└─────┴──────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴───────Cómo usar PM2
Para listar todas tus aplicaciones corriendo con Node.js, hazlo con el siguiente comando:
# pm2 listDeberías obtener el siguiente resultado:
┌─────┬──────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼──────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ hello │ default │ N/A │ fork │ 2788 │ 26s │ 0 │ online │ 0% │ 37.5mb │ root │ disabled │
└─────┴──────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
Para reiniciar la aplicación, utiliza el siguiente comando:
# pm2 restart myapp/hello.jsPara iniciar tu aplicación con Node.js en modo cluster, hazlo con el siguiente comando:
# pm2 start myapp/hello.js -i 2Deberías ver el siguiente resultado:
[PM2] Starting /root/myapp/hello.js in cluster_mode (2 instances)
[PM2] Done.
┌─────┬──────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼──────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ hello │ default │ N/A │ cluster │ 3228 │ 0s │ 0 │ online │ 0% │ 35.6mb │ root │ disabled │
│ 1 │ hello │ default │ N/A │ cluster │ 3235 │ 0s │ 0 │ online │ 0% │ 30.0mb │ root │ disabled │
└─────┴──────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
Para monitorizar tu aplicación, utiliza el siguiente comando:
# pm2 monitDeberías ver la siguiente pantalla:
Para comprobar los logs de la aplicación, hazlo con el siguiente comando:
# pm2 logs Deberías obtener el siguiente resultado:
/root/.pm2/logs/hello-error-0.log last 15 lines:
/root/.pm2/logs/hello-out-0.log last 15 lines:
0|hello | Server running at http://your-server-ip:8000/
/root/.pm2/logs/hello-out-1.log last 15 lines:
1|hello | Server running at http://your-server-ip:8000/
Para eliminar todos los logs, utiliza el siguiente comando:
# pm2 flushPara mostrar información detallada de tu aplicación, utiliza el siguiente comando:
# pm2 show 0Deberías ver la siguiente pantalla:
Gestiona la aplicación Node.js con PM2
Para iniciar tu aplicación Node.js con un reinicio del sistema, utiliza el siguiente comando:
# pm2 startupDeberías ver el siguiente resultado:
[ '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
Para eliminar el proceso de iniciar con un reinicio, hazlo con el siguiente comando:
# pm2 unstartupPara guardar el proceso de iniciar con un reinicio del sistema, hazlo con el siguiente comando:
# pm2 savePara actualizar PM2, utiliza el siguiente comando:
# pm2 updateDeberías obtener el siguiente resultado:
Be sure to have the latest version by doing `npm install pm2@latest -g` before doing this procedure.
[PM2] Applying action deleteProcessId on app [all](ids: [ 0, 1 ])
[PM2] [hello](0) ✓
[PM2] [hello](1) ✓
[PM2] [v] All Applications Stopped
[PM2] [v] PM2 Daemon Stopped
[PM2] Spawning PM2 daemon with pm2_home=/root/.pm2
[PM2] Restoring processes located in /root/.pm2/dump.pm2
[PM2] Process /root/myapp/hello.js restored
[PM2] Process /root/myapp/hello.js restored
>>>>>>>>>> PM2 updated
┌─────┬──────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼──────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ hello │ default │ N/A │ cluster │ 3445 │ 0s │ 0 │ online │ 0% │ 37.9mb │ root │ disabled │
│ 1 │ hello │ default │ N/A │ cluster │ 3446 │ 0s │ 0 │ online │ 0% │ 37.9mb │ root │ disabled │
└─────┴──────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
Para parar todos los procesos de Node.js, utiliza el siguiente comando:
# pm2 stop all Para parar el proceso de Node.js con id 0, hazlo con el siguiente comando:
# pm2 stop 0Para reiniciar todos los procesos de la aplicación de Node.js, utiliza el siguiente comando:
# pm2 restart all Para eliminar todos los procesos, hazlo con el siguiente comando:
# pm2 delete all Para eliminar un proceso con id 1, hazlo con el siguiente comando:
# pm2 delete 1Accede a la aplicación de Node.js
Ahora abre tu navegador web y accede a tu aplicación de Node.js con la URL http://your-server-ip:8000. Deberías ver tu aplicación en la siguiente imagen:
Conclusión
Con este tutorial has aprendido cómo instalar y usar PM2 para gestionar la aplicación con Node.js.
¡Esperamos que PM2 te ayude a gestionar tus aplicaciones Node.js de forma fácil!