Cómo configurar una aplicación Node.js para producción en Ubuntu 22.04

Introducción

Índice
  1. Introducción
  • Prerrequisitos
  • Paso 1: creación de una aplicación Node.js
  • Paso 2: Instalación de PM2
  • Paso 3: Configuración de Nginx como servidor proxy inverso
  • Conclusión
  • Node.js es un entorno de ejecución de código abierto de JavaScript para crear aplicaciones de red y del lado del servidor. La plataforma funciona en Linux, macOS, FreeBSD y Windows. Aunque puedes ejecutar aplicaciones Node.js en la línea de comandos, este tutorial se centrará en ejecutarlas como un servicio. Esto significa que se reiniciarán al reiniciar o si falla el sistema y son seguras para su uso en un entorno de producción.

    En este tutorial, configurará un entorno Node.js listo para producción en un solo servidor Ubuntu 22.04. Este servidor ejecutará una aplicación Node.js administrada por PM2 y brindará a los usuarios acceso seguro a la aplicación a través de un proxy inverso Nginx. El servidor Nginx ofrecerá HTTPS mediante un certificado gratuito proporcionado por Let’s Encrypt .

    Prerrequisitos

    Esta guía asume que usted tiene lo siguiente:

    • Una configuración de servidor Ubuntu 22.04, como se describe en la guía de configuración inicial de servidor para Ubuntu 22.04 . Debe tener un usuario que no sea root con privilegios sudo y un firewall activo.
    • Un nombre de dominio que apunta a la IP pública de su servidor . En este tutorial se utilizará el nombre de dominio example.com .
    • Nginx instalado, como se explica en Cómo instalar Nginx en Ubuntu 22.04 .
    • Nginx configurado con SSL mediante certificados Let’s Encrypt. Cómo proteger Nginx con Let’s Encrypt en Ubuntu 22.04 lo guiará a través del proceso.
    • Node.js instalado en tu servidor. Cómo instalar Node.js en Ubuntu 22.04

    Cuando haya completado los requisitos previos, tendrá un servidor que servirá la página de marcador de posición predeterminada de su dominio en .https://example.com/

    Paso 1: creación de una aplicación Node.js

    Escribamos una aplicación Hola mundo que devuelva “Hola mundo” a cualquier solicitud HTTP. Esta aplicación de ejemplo te ayudará a empezar a trabajar con Node.js. Puedes reemplazarla con tu propia aplicación, solo asegúrate de modificarla para que escuche en las direcciones IP y puertos adecuados.

    Primero, usando nanosu editor de texto favorito, cree una aplicación de muestra llamada hello.js:

    1. nano hello.js

    Inserte el siguiente código en el archivo:

    ~/hola.js

    const http = require('http');const hostname = 'localhost';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 el archivo y salga del editor. Si está utilizando nano, presione Ctrl+X, luego, cuando se le solicite, Yy luego Enter.

    Esta aplicación Node.js escucha en la dirección ( localhost) y el puerto ( 3000) especificados, y devuelve “¡Hola mundo!” con un 200código HTTP de éxito. Dado que estamos escuchando en localhost, los clientes remotos no podrán conectarse a nuestra aplicación.

    Para probar su aplicación, escriba:

    1. node hello.js

    Recibirá el siguiente resultado:

    OutputServer running at http://localhost:3000/

    Nota: ejecutar una aplicación Node.js de esta manera bloqueará comandos adicionales hasta que se cierre la aplicación presionando CTRL+C.

    Para probar la aplicación, abra otra sesión de terminal en su servidor y conéctese localhostcon curl:

    1. curl http://localhost:3000

    Si obtiene el siguiente resultado, la aplicación está funcionando correctamente y escuchando en la dirección y el puerto correctos:

    OutputHello World!

    Si no obtiene el resultado esperado, asegúrese de que su aplicación Node.js esté ejecutándose y configurada para escuchar en la dirección y el puerto adecuados.

    Una vez que esté seguro de que funciona, cierre la aplicación (si aún no lo ha hecho) presionando CTRL+C.

    Paso 2: Instalación de PM2

    A continuación, instalaremos PM2, un administrador de procesos para aplicaciones Node.js. PM2 permite convertir aplicaciones en daemon para que se ejecuten en segundo plano como un servicio.

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

    1. sudo npm install pm2@latest -g

    La -gopción indica npmque se debe instalar el módulo globalmente , para que esté disponible en todo el sistema.

    Primero, usemos el pm2 startcomando para ejecutar su aplicación, hello.js, en segundo plano:

    1. pm2 start hello.js

    Esto también agrega su aplicación a la lista de procesos de PM2, que se genera cada vez que inicia una aplicación:

    Output...[PM2] Spawning PM2 daemon with pm2_home=/home/sammy/.pm2[PM2] PM2 Successfully daemonized[PM2] Starting /home/sammy/hello.js in fork_mode (1 instance)[PM2] Done.┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐│ id │ name               │ mode     │ ↺    │ status    │ cpu      │ memory   │├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤│ 0  │ hello              │ fork     │ 0    │ online    │ 0%       │ 25.2mb   │└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘

    Como se indicó anteriormente, PM2 asigna automáticamente un App name(según el nombre del archivo, sin la .jsextensión) y un PM2 id. PM2 también mantiene otra información, como el PIDdel proceso, su estado actual y el uso de memoria.

    Las aplicaciones que se ejecutan en PM2 se reiniciarán automáticamente si fallan o se eliminan, pero podemos realizar un paso adicional para que la aplicación se inicie al iniciar el sistema mediante el startupsubcomando. Este subcomando genera y configura un script de inicio para iniciar PM2 y sus procesos administrados al iniciar el servidor:

    1. 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 arranque:

    Output[PM2] Init System found: systemdsammy[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 sammy --hp /home/sammy

    Ejecute el comando desde la salida, con su nombre de usuario en lugar de sammy:

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

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

    1. pm2 save

    Ahora ha creado una unidad systemd que se ejecuta pm2para su usuario durante el arranque. Esta pm2instancia, a su vez, ejecuta hello.js.

    Inicie el servicio con systemctl:

    1. sudo systemctl start pm2-sammy

    Verifique el estado de la unidad systemd:

    1. systemctl status pm2-sammy

    Para obtener una descripción detallada de systemd, revise Systemd Essentials: Working with Services, Units, and the Journal .

    Además de los que hemos cubierto, PM2 proporciona muchos subcomandos que le permiten administrar o buscar información sobre sus aplicaciones.

    Detenga una aplicación con este comando (especifique PM2 App nameo id​​):

    1. pm2 stop app_name_or_id

    Reiniciar una aplicación:

    1. pm2 restart app_name_or_id

    Enumere las aplicaciones administradas actualmente por PM2:

    1. pm2 list

    Obtenga información sobre una aplicación específica utilizando su App name:

    1. pm2 info app_name

    El monitor de procesos PM2 se puede abrir con el monitsubcomando. Esto muestra el estado de la aplicación, la CPU y el uso de la memoria:

    1. pm2 monit

    Tenga en cuenta que ejecutar pm2sin ningún argumento también mostrará una página de ayuda con ejemplos de uso.

    Ahora que su aplicación Node.js está ejecutándose y administrada por PM2, configuremos el proxy inverso.

    Paso 3: Configuración de Nginx como servidor proxy inverso

    Su aplicación se está ejecutando y escuchando en localhost, pero necesita configurar una forma para que sus usuarios puedan acceder a ella. Configuraremos el servidor web Nginx como un proxy inverso para este propósito.

    En el tutorial de requisitos previos, configuraste tu configuración de Nginx en el archivo. Abre este archivo para editarlo:/etc/nginx/sites-available/example.com

    1. sudo nano /etc/nginx/sites-available/example.com

    Dentro del serverbloque, debería haber un location /bloque existente. Reemplace el contenido de ese bloque con la siguiente configuración. Si su aplicación está configurada para escuchar en un puerto diferente, actualice la parte resaltada al número de puerto correcto:

    /etc/nginx/sitios-disponibles/example.com

    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;    }...}

    Esto configura el servidor para que responda a las solicitudes en su raíz. Suponiendo que nuestro servidor está disponible en example.com, el acceso a través de un navegador web enviaría la solicitud a , que escucha en el puerto en .https://example.com/hello.js3000localhost

    Puedes agregar locationbloques adicionales al mismo bloque de servidor para brindar acceso a otras aplicaciones en el mismo servidor. Por ejemplo, si también estuvieras ejecutando otra aplicación Node.js en el puerto 3001, podrías agregar este bloque de ubicación para permitir el acceso a ella mediante :https://example.com/app2

    /etc/nginx/sites-available/example.com — Opcional

    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;    }...}

    Una vez que haya terminado de agregar los bloques de ubicación para sus aplicaciones, guarde el archivo y salga de su editor.

    Asegúrate de no haber introducido ningún error de sintaxis al escribir:

    1. sudo nginx -t

    Reiniciar Nginx:

    1. sudo systemctl restart nginx

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

    Conclusión

    ¡Felicitaciones! Ahora tiene su aplicación Node.js ejecutándose detrás de un proxy inverso Nginx en un servidor Ubuntu 22.04. Esta configuración de proxy inverso es lo suficientemente flexible como para brindar a sus usuarios acceso a otras aplicaciones o contenido web estático que desee compartir.

    A continuación, es posible que desees consultar Cómo crear una aplicación Node.js con Docker .

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion