Aplicacion Node en producción en Ubuntu
Sumario
Crear una aplicación simple
nano heey.js
const http = require('http'); const port = 8088; const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Heeeeey que pasa!\n'); }); server.listen(port, hostname, () => { console.log(`El servidor esta funcionando en: http://localhost:${port}/`); });
Coprobamos el funcionamiento
node heyy.js
El servidor esta funcionando en: http://localhost:8088/
Nota: Node bloquea la posibilidad introducir comandos para detener node, pulsamos CTRL + C
Instalar PM2
PM2 es un administrador de procesos para aplicaciones de Node.js, permite implementar daemon, que funcionaran como servicios.
sudo npm install pm2@latest -g
Ejecutar y añadir la aplicación, con la opción --name indicamos el nombre con el que se va a ejecutar.
pm2 start heyy.js --name 'prueba'
[PM2] Starting /root/hello.js in fork_mode (1 instance) [PM2] Done. ┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐ │ id │ name │ mode │ ↺ │ status │ cpu │ memory │ ├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤ │ 3 │ notas │ fork │ 2 │ online │ 0% │ 56.4mb │ │ 4 │ prueba │ fork │ 0 │ online │ 0% │ 25.2mb │ └────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘
Las aplicaciones que se ejecutan en PM2 se reiniciarán de forma automática si la aplicación se bloquea o se detiene, pero podemos dar un paso adicional para que se cargue en el inicio del sistema usando el subcomando startup. Este subcomando genera y configura una secuencia de comandos de inicio para iniciar PM2 y sus procesos administrados al iniciarse el servidor:
pm2 startup systemd
En la última línea del resultado obtenido se incluirá un comando que se ejecutará con privilegios de superusuario a fin de configurar PM2 para que se cargue en el inicio:
[PM2] Init System found: systemd [PM2] To setup the Startup Script, copy/paste the following command: sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u root --hp /root
Ahora guardamos la lista de procesos de PM2
pm2 save
iniciamos el servicio
sudo systemctl start pm2-root
comprobamos el estado de la unidad de sytemd
systemctl status pm2-root
Comandos MP2
Detener una aplicación por el nombre o id
pm2 stop app_name_or_id
Reiniciar una aplicación
pm2 restart app_name_or_id
Listar las aplicaciones
pm2 list
Obtener información de las aplicaciones
pm2 info app_name_or_id
Borrar una aplicación
pm2 delete app_name_or_id
Monitorizar todas las aplicaciones
pm2 monit