Cómo implementar una aplicación en Node.js en producción

Node.js es un entorno de tiempo de ejecución JavaScript de código abierto para crear fácilmente aplicaciones de servidor y de red. La plataforma se ejecuta en Linux, OS X, FreeBSD y Windows. Las aplicaciones Node.js pueden ejecutarse en la línea de comandos, pero nos centraremos en ejecutarlas como un servicio, de modo que se reinicien automáticamente al reiniciarse o se produzcan fallos, y se puedan usar de manera segura en un entorno de producción.

le recomendamos antes de iniciar que pueda instalar git

sudo apt-get update
sudo apt-get install git

Instalar Node.js

Instalaremos node.js usando NVM que nos permite controlar lar versiones de instalación de node.js

sudo apt-get update
sudo apt-get install build-essential libssl-dev

Para ver la instalación correcta podemos ir al repositorio de NVM y leer la documentación que nos indica los requerimientos y las configuraciones necesarias.

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
source ~/.bashrc
nvm ls-remote
nvm install 10.15.2
nvm use 10.15.2
nvm ls

Instalar PM2

Ahora instalaremos PM2, que es un administrador de procesos para las aplicaciones Node.js. PM2 proporciona una manera fácil de administrar y daemonizar las aplicaciones (ejecutarlas en segundo plano como un servicio).

Usaremos npm, un administrador de paquetes para los módulos Node que se instala con Node.js, para instalar PM2 en nuestro servidor. Utilice este comando para instalar PM2:

sudo apt-get install npm
sudo npm install -g pm2

La opción -g le dice a npm que instale el módulo globalmente, para que esté disponible en todo el sistema.

Gestionar la aplicación con PM2

Iniciar aplicación

Lo primero que querrá hacer es usar el comando pm2 start para ejecutar su aplicación, hello.js, en segundo plano:

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:

[PM2] Spawning PM2 daemon
[PM2] PM2 Successfully daemonized
[PM2] Starting hello.js in fork_mode (1 instance)
[PM2] Done.
┌──────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────────────┬──────────┐
│ App name │ id │ mode │ pid  │ status │ restart │ uptime │ memory      │ watching │
├──────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────────────┼──────────┤
│ hello    │ 0  │ fork │ 3524 │ online │ 0       │ 0s     │ 21.566 MB   │ disabled │
└──────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────────────┴──────────┘
 Use `pm2 show <id|name>` to get more details about an app

Como puede ver, PM2 asigna automáticamente un nombre de aplicación (basado en el nombre del archivo, sin la extensión .js) y una identificación de PM2. PM2 también mantiene otra información, como el PID del proceso, su estado actual y el uso de la memoria.

Tambien puede ejecutar una script desde package.json

pm2 start npm --name "{app_name}" -- run {script_name}

Otro uso de PM2 (opcional)

PM2 proporciona muchos subcomandos que le permiten administrar o buscar información sobre sus aplicaciones. Tenga en cuenta que ejecutar PM2 sin ningún argumento mostrará una página de ayuda, incluido el uso de ejemplo, que cubre el uso de PM2 con más detalle que esta sección del tutorial.

Detenga una aplicación con este comando (especifique el nombre o la identificación de la aplicación PM2):

pm2 stop {app_name_or_id}

Reinicie una aplicación con este comando (especifique el nombre o la identificación de la aplicación PM2):

pm2 restart {app_name_or_id}

La lista de aplicaciones actualmente administradas por PM2 también se puede consultar con el subcomando list:

pm2 list

El monitor de proceso PM2 se puede extraer con el subcomando monit. Esto muestra el estado de la aplicación, la CPU y el uso de la memoria:

pm2 monit

Configurar Nginx como un servidor proxy inverso

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

Instalar Nginx

Nginx está disponible en los repositorios predeterminados de Ubuntu, por lo que la instalación es bastante sencilla.

Es recomendable actualizar los paquetes apt para que tengamos acceso a las listas de paquetes más recientes. Luego, podemos instalar nginx :

sudo apt-get update
sudo apt-get install nginx

Después de aceptar el procedimiento, apt-get instalará Nginx y todas las dependencias necesarias en su servidor.

Configurar Nginx

En el tutorial de requisitos previos, configuramos nuestra configuración Nginx en el archivo /etc/nginx/sites-available/default. Abra el archivo para editarlo:

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

Dentro del bloque del servidor debe tener una location / bloque existente. Reemplace los contenidos 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.

. . .
    location / {
        proxy_pass http://localhost:8080;
        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 responder a las solicitudes en su raíz. Asumiendo que nuestro servidor está disponible en example.com, acceda a https://example.com/ a través de un navegador web y enviará la solicitud a hello.js, escuchando en el puerto 8080 en localhost.

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

    location /app2 {
        proxy_pass http://localhost:8081;
        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 y salga.

Asegúrese de no haber introducido ningún error de sintaxis escribiendo:

sudo nginx -t

A continuación, reinicie Nginx:

sudo systemctl restart nginx

Suponiendo que su aplicación Node.js se esté ejecutando y que su aplicación y las configuraciones de Nginx sean 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).

Cerrar menú