Cómo configurar la aplicación Node.js en producción en Ubuntu 18.04 LTS

27 feb 2021 5 min di lettura
Cómo configurar la aplicación Node.js en producción en Ubuntu 18.04 LTS
Indice dei contenuti

Introducción

Node.js es un entorno de ejecución de JavaScript de código abierto para crear aplicaciones de red y del lado del servidor.

En este tutorial veremos cómo instalar y configurar Aplicaciones Node.js en producción en Ubuntu 18.04 LTS usando PM2. Ejecutaremos una aplicación Node.js administrada por PM2 utilizando Nginx como proxy inverso.

Si su intención es instalar y configurar Node.js y PM2 en un servidor remoto, continúe leyendo; de lo contrario, si desea instalar Node.js y PM2 en su computadora local, omita el primer párrafo "Conexión al servidor" y lea el próximo.

Prerrequisitos

Antes de comenzar con esta guía, debe tener:

Conexión al servidor

Para acceder al servidor, necesita conocer la dirección IP. También necesitará la contraseña para la autenticación.

Para conectarse al servidor como root, escriba este comando:

ssh root@IP_DEL_SERVER

A continuación, se le pedirá que ingrese la contraseña del usuario root.

Si no usa el usuario root, puede iniciar sesión con otro nombre de usuario usando el mismo comando, luego cambie el primer parámetro:

ssh VOSTRO_UTENTE@IP_DEL_SERVER

Luego se le pedirá que ingrese su contraseña de usuario.

Ahora está conectado a su servidor, está listo para comenzar a instalar Node.js y PM2.

Instalación de Node.js usando un PPA

Para instalar la última versión de Node.js, agregue un Archivo de paquete personal (PPA) administrado por NodeSource. Asegurémonos de estar en nuestra casa e instalemos el PPA. Reemplace 8.x con la versión correcta.

cd ~
curl -sL https://deb.nodesource.com/setup_8.x -o nodesource_setup.sh

Después de descargar el script, comencemos así:

sudo bash nodesource_setup.sh

Se instalará el PPA y se actualizará la caché de paquetes local. En este punto, dé el siguiente comando:

sudo apt install nodejs

Para verificar la versión de nodejs recién instalada:

nodejs -v

El paquete nodejs también contendrá el Administrador de paquetes NPM, por lo que no necesitará instalarlo por separado. Sin embargo, recomiendo instalar el paquete build-essential para permitir que algunos paquetes NPM funcionen correctamente.

sudo apt install build-essential

Crea una aplicación Node.js

Cree una aplicación simple con Node.js para aprender a usar PM2.

Desde la terminal damos el siguiente comando para crear nuestra aplicación:

cd ~
nano hello.js

Dentro del archivo inserte el siguiente código:


const http = require('http');

 const hostname = '127.0.0.1';
 const port = 3000;

 const server = http.createServer((req, res) => {
 res.statusCode = 200;
 res.setHeader('Content-Type', 'text/plain');
 res.end('Hello, World!\n');
 });

 server.listen(port, hostname, () => {
 console.log(`Server running at http://${hostname}:${port}/`);
 });

Guarde y cierre los archivos.

Esta aplicación Node.js escucha en la dirección especificada (localhost) y el puerto (3000) y devuelve "¡Hola mundo!"

Para probar la aplicación, escriba:

node hello.js

Recibirá un mensaje de salida similar al siguiente:

Server running at http://localhost:3000/

Para detener la aplicación presione CTRL + C.

Para probar la aplicación, abra otra terminal en el servidor y conéctese a localhost usando curl:

curl http://localhost:3000

Recibirá un mensaje de salida similar al siguiente:

Hello World!

Instalar PM2

Instale PM2, un administrador de procesos para aplicaciones Node.js. PM2 hace posible que las aplicaciones se ejecuten en segundo plano como un servicio.

Utilice npm para instalar la última versión de PM2 en su servidor:

sudo npm install pm2@latest -g

La opción -g le permite instalar el módulo globalmente, de modo que esté disponible para todo el sistema.

Usamos el comando de inicio pm2 para iniciar la aplicación en segundo plano:

pm2 start hello.js

Recibirá un mensaje de salida similar al siguiente:


[PM2] Spawning PM2 daemon with pm2_home=/home/noviello/.pm2
 [PM2] PM2 Successfully daemonized
 [PM2] Starting /home/noviello/hello.js in fork_mode (1 instance)
 [PM2] Done.
 ┌──────────┬────┬─────────┬──────┬─────┬────────┬─────────┬────────┬─────┬───────────┬──────┬──────────┐
 │ App name │ id │ version │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
 ├──────────┼────┼─────────┼──────┼─────┼────────┼─────────┼────────┼─────┼───────────┼──────┼──────────┤
 │ hello │ 0 │ N/A │ fork │ 842 │ online │ 0 │ 0s │ 0% │ 15.5 MB │ root │ disabled │
 └──────────┴────┴─────────┴──────┴─────┴────────┴─────────┴────────┴─────┴───────────┴──────┴──────────┘
 Use `pm2 show <id|name>` to get more details about an app

PM2 asigna automáticamente un nombre de aplicación (según el nombre del archivo) y una identificación de PM2. PM2 también retiene otra información, como el PID del proceso, su estado actual y el uso de la memoria.

Las aplicaciones que se ejecutan en PM2 se reiniciarán automáticamente si la aplicación falla o se termina, pero puede dar un paso adicional para iniciar la aplicación al iniciar el sistema utilizando el subcomando de inicio. Este subcomando genera y configura un script de inicio para iniciar PM2 y sus procesos administrados en los inicios del servidor:

pm2 startup systemd

La última línea de la salida resultante incluirá un comando para ejecutar con privilegios de superusuario para configurar PM2 para que se inicie 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 noviello --hp /home/noviello

Ejecute el comando de salida, con su nombre de usuario en lugar de noviello:

sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u noviello --hp /home/noviello

Como paso adicional, podemos guardar la lista de procesos de PM2 y los entornos correspondientes:

pm2 save

Hemos creado una unidad systemd que ejecuta PM2 para el usuario al iniciar el sistema. Esta unidad ejecutará hello.js.

Inicie el servicio con systemctl:

systemctl start pm2-noviello

Verifique el estado de la unidad systemd:

systemctl status pm2-noviello

Para detener la aplicación: (especifique el nombre o ID de la aplicación PM2, en nuestro caso hola):

pm2 stop hello

Para reiniciar la aplicación:

pm2 restart hello

Para ver la lista de aplicaciones administradas por PM2:

pm2 list

Para obtener información específica de la aplicación:

pm2 info hello

Para monitorear los procesos de solicitud:

pm2 monit

La ejecución de PM2 sin argumentos también mostrará una página de ayuda con ejemplos de uso.

Ahora que la aplicación Node.js se está ejecutando y administrada por PM2.

Configurar Nginx como proxy inverso

La aplicación se está ejecutando y escuchando en localhost, configuraremos el servidor web Nginx como un proxy inverso para permitir que los usuarios accedan a él.

Abra este archivo para editarlo:

sudo nano /etc/nginx/sites-available/default

Dentro del bloque del servidor, debe tener una ubicación / sección. Reemplace el contenido de esa sección con la siguiente configuración. Si la aplicación está configurada para escuchar en un puerto diferente, actualice el parámetro proxy_pass al número de puerto correcto:


server {...
 location /{
 proxy_pass http://localhost:3000;
 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;
 }...
 }

Guarde y cierre el archivo.

Suponiendo que nuestro servidor está disponible en example.com, acceder a https://example.com/a través de un navegador web enviaría la solicitud a hello.js, escuchando en el puerto 3000 en localhost.

OPCIONAL: Se pueden agregar bloques de ubicación adicionales al mismo bloque de servidor para proporcionar acceso a otras aplicaciones en el mismo servidor. Por ejemplo, si estaba ejecutando otra aplicación Node.js en el puerto 3001, podría agregar este bloque de ubicación para permitir el acceso a él a través de https://example.com/app2:


server {...
 location /app2 {
 proxy_pass http://localhost:3001;
 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;
 }...
 }

Asegúrese de no haber cometido ningún error de sintaxis:

sudo nginx -t

Reinicie Nginx:

sudo systemctl restart nginx

Suponiendo que la aplicación Node.js se esté ejecutando y que la aplicación y las configuraciones de Nginx sean correctas, ahora debería poder acceder a su aplicación. Pruébelo accediendo a la URL de su servidor (su dirección IP pública o nombre de dominio).

La instalación y configuración de Node.js y PM2 en Ubuntu 18.04 LTS ha finalizado.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.