Aplicacion Node en producción en Ubuntu

De enunpimpam
Saltar a: navegación, buscar

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

Iniciar node modo producción

Para iniciar la aplicación en modo de producción, hay que ejecutar el comando "npm run start" y para crear la instancia:

pm2 start npm --name NombreAPP -- start

Comandos PM2

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

Configurar Nginx como servidor proxy inverso

La aplicación esta en ejecución pero solo podemos acceder desde el mismo servidor, para que los usuarios accedan a ella, necesitamos configurar el servidor Web de Nginx como proxy inverso.

Editamos o creamos un archivo de configuración en /etc/nginx/sites-available/ y añadimos las siguientes lineas en el apartado de location

 location / {
       proxy_pass http://localhost:8088;
       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection 'upgrade';
       proxy_set_header Host $host;
       proxy_cache_bypass $http_upgrade;
   }

Con esta configuración cuando desde fuera del servidor el usuario haga un petición a prueba.enunpimpam.com por el puerto 80, sera redireccionado al 8088 y servira nustra aplicación

Comprobamos que no se ha cometido ningún error de sintaxis

sudo nginx -t

Reiniciamos nginx

/etc/init.d/nginx restart