Cómo instalar Node.js en Debian 10 y configurar Nginx como servidor proxy frontend

p√°gina Node.js

Node.js es una plataforma de JavaScript gratuita y de código abierto que se puede utilizar para ofrecer contenido del lado del servidor dinámico y con capacidad de respuesta. Se basó en el motor JavaScript V8 de Chrome y puede ejecutar código JavaScript fuera de un navegador web. Se puede ejecutar en varios sistemas operativos, incluidos Linux, FreeBSD, Windows y macOS. Node.js también funciona en otros servidores web como Apache y Nginx.

En este tutorial, aprenderemos cómo instalar y configurar Node.js para manejar solicitudes de back-end y configurar Nginx para manejar solicitudes de front-end en Debian 10.

requisitos previos

  • Un servidor que ejecuta Debian 10.
  • Una contrase√Īa de root est√° configurada en su servidor.

Empezando

Primero, se recomienda actualizar su sistema a la √ļltima versi√≥n. Puedes hacerlo con el siguiente comando:

apt-get update -y
apt-get upgrade -y

Una vez que su servidor esté actualizado, reinícielo para aplicar los cambios.

Instalar Node.js

De forma predeterminada, la √ļltima versi√≥n de Node.js no est√° disponible en el repositorio predeterminado de Debian 10. Por lo tanto, deber√° instalarlo desde el script.

Primero, instala curl con el siguiente comando:

apt-get install curl -y

A continuación, descargue e instale el script de instalación de Node.js con el siguiente comando:

curl -sL https://deb.nodesource.com/setup_12.x | bash -

Una vez que se haya completado la instalación, puede instalar Node.js con el siguiente comando:

apt-get install nodejs -y

Una vez que la instalación se haya completado con éxito, puede verificar la versión de Node.js con el siguiente comando:

nodejs --version

Debería ver la versión de Node.js en el siguiente resultado:

v12.16.1

También puede verificar la versión de NPM ejecutando el siguiente comando:

npm --version

Debería ver la versión de NPM en el siguiente resultado:

6.13.4

Crear aplicación Node.js

Primero, deberá crear un directorio para su aplicación. Puede crearlo ejecutando el siguiente comando:

mkdir nodeapp

A continuación, cambie el directorio a nodeapp e instale express con el siguiente comando:

cd nodeapp
npm install express

A continuación, cree una aplicación Node.js de muestra con express utilizando el editor nano:

nano app.js

Agrega los siguientes contenidos:

var express = require('express');
var app = express();
app.get('/', function(req, res){
   res.send("Nginx as Frontend Server for Node.js!");
});
app.listen(8000, '127.0.0.1');

Guarde y cierre el archivo cuando haya terminado.

A continuación, ejecute su aplicación con el siguiente comando:

node app.js

A continuación, abra otra terminal y verifique la aplicación con el siguiente comando:

netstat -antup | grep 8000

Debería ver que su aplicación Node.js está escuchando en el puerto 8000:

tcp        0      0 127.0.0.1:8000          0.0.0.0:*               LISTEN      26193/node

También puede verificar la aplicación usando el comando curl como se muestra a continuación:

curl http://127.0.0.1:8000

Si todo está bien, debería obtener el siguiente resultado:

Nginx as Frontend Server for Node.js!

Instalar y configurar PM2

PM2 es un administrador de procesos para administrar la aplicación Node.js. Puede iniciar, detener y habilitar fácilmente la aplicación Node.js para que se inicie en el arranque con PM2.

Primero, instale la √ļltima versi√≥n de PM2 usando NPM como se muestra a continuaci√≥n:

npm install pm2 -g

Una vez instalado, cambia el directorio a nodeapp y tu aplicación con el siguiente comando:Publicidad

cd nodeapp
pm2 start app.js

Una vez que se haya iniciado la aplicación, debería obtener el siguiente resultado:

                        -------------

__/\\\\\\\\\\\\\____/\\\\____________/\\\\____/\\\\\\\\\_____
 _\/\\\/////////\\\_\/\\\\\\________/\\\\\\__/\\\///////\\\___
  _\/\\\_______\/\\\_\/\\\//\\\____/\\\//\\\_\///______\//\\\__
   _\/\\\\\\\\\\\\\/__\/\\\\///\\\/\\\/_\/\\\___________/\\\/___
    _\/\\\/////////____\/\\\__\///\\\/___\/\\\________/\\\//_____
     _\/\\\_____________\/\\\____\///_____\/\\\_____/\\\//________
      _\/\\\_____________\/\\\_____________\/\\\___/\\\/___________
       _\/\\\_____________\/\\\_____________\/\\\__/\\\\\\\\\\\\\\\_
        _\///______________\///______________\///__\///////////////__


                          Runtime Edition

        PM2 is a Production Process Manager for Node.js applications
                     with a built-in Load Balancer.

                Start and Daemonize any application:
                $ pm2 start app.js

                Load Balance 4 instances of api.js:
                $ pm2 start api.js -i 4

                Monitor in production:
                $ pm2 monitor

                Make pm2 auto-boot at server restart:
                $ pm2 startup

                To go further checkout:
                http://pm2.io/


                        -------------

[PM2] Spawning PM2 daemon with pm2_home=/root/.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting /root/nodeapp/app.js in fork_mode (1 instance)
[PM2] Done.
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? id  ? name   ? namespace   ? version ? mode    ? pid      ? uptime ? ?    ? status    ? cpu      ? mem      ? user     ? watching ?
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 0   ? app    ? default     ? N/A     ? fork    ? 13202    ? 0s     ? 0    ? online    ? 0%       ? 27.2mb   ? root     ? disabled ?
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

En el resultado anterior, puede ver informaci√≥n muy √ļtil, como el PID de la aplicaci√≥n, el tiempo de actividad, el estado, el uso de la CPU y la memoria.

A continuación, ejecute el siguiente comando para crear y configurar un script de inicio para la aplicación Node.js para que su aplicación Node.js se inicie automáticamente al arrancar.

pm2 startup

Deberías obtener el siguiente resultado:

[PM2] Init System found: systemd
Platform systemd
Template
[Unit]
Description=PM2 process manager
Documentation=https://pm2.keymetrics.io/
After=network.target

[Service]
Type=forking
User=root
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/root/.pm2
PIDFile=/root/.pm2/pm2.pid
Restart=on-failure

ExecStart=/usr/lib/node_modules/pm2/bin/pm2 resurrect
ExecReload=/usr/lib/node_modules/pm2/bin/pm2 reload all
ExecStop=/usr/lib/node_modules/pm2/bin/pm2 kill

[Install]
WantedBy=multi-user.target

Target path
/etc/systemd/system/pm2-root.service
Command list
[ 'systemctl enable pm2-root' ]
[PM2] Writing init configuration in /etc/systemd/system/pm2-root.service
[PM2] Making script booting at startup...
[PM2] [-] Executing: systemctl enable pm2-root...
Created symlink /etc/systemd/system/multi-user.target.wants/pm2-root.service ‚Üí /etc/systemd/system/pm2-root.service.
[PM2] [v] Command successfully executed.
+---------------------------------------+
[PM2] Freeze a process list on reboot via:
$ pm2 save

[PM2] Remove init script via:
$ pm2 unstartup systemd

A continuación, inicie el servicio PM2 con el siguiente comando:

systemctl start pm2-root

A continuación, verifique el estado del servicio de PM2 con el siguiente comando:

systemctl status pm2-root

Deberías obtener el siguiente resultado:

? pm2-root.service - PM2 process manager
   Loaded: loaded (/etc/systemd/system/pm2-root.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-03-26 06:04:28 UTC; 2s ago
     Docs: https://pm2.keymetrics.io/
  Process: 13387 ExecStart=/usr/lib/node_modules/pm2/bin/pm2 resurrect (code=exited, status=0/SUCCESS)
 Main PID: 13191 (PM2 v4.2.3: God)
    Tasks: 0 (limit: 4915)
   CGroup: /system.slice/pm2-root.service
           ? 13191 PM2 v4.2.3: God Daemon (/root/.pm2)

Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: [PM2] Restoring processes located in /root/.pm2/dump.pm2.bak
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: [PM2][ERROR] Failed to read dump file in /root/.pm2/dump.pm2.bak
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: [PM2][ERROR] No processes saved; DUMP file doesn't exist
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ? PM2+ activated | Instance Name: node.myserver.tld-109e | Dash: https://app.pm2.io/#/r/7p66twg
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ????????????????????????????????????????????????????????????????????????????????????????????????
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ? id  ? name   ? namespace   ? version ? mode    ? pid      ? uptime ? ?    ? status    ? cpu   
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ????????????????????????????????????????????????????????????????????????????????????????????????
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ? 0   ? app    ? default     ? N/A     ? fork    ? 13202    ? 8m     ? 0    ? online    ? 0%    
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ????????????????????????????????????????????????????????????????????????????????????????????????
Mar 26 06:04:28 kolab.linuxbuz.com systemd[1]: Started PM2 process manager.

Configurar Nginx como proxy inverso para Node.js

En este punto, su aplicación Node.js se está ejecutando y escuchando en el servidor local. A continuación, deberá configurar Nginx como un servidor proxy front-end para la aplicación Node.js para que cualquier usuario pueda acceder a su aplicación a través de Internet.

Primero, instale el servidor web Nginx con el siguiente comando:

apt-get install nginx -y

Una vez instalado, cree un archivo de configuración de host virtual Nginx para la aplicación Node.js:

nano /etc/nginx/sites-enabled/myapp.conf

Agrega el siguiente contenido:

server {
    listen 80;
    server_name node.myserver.tld;
    location / {
        proxy_pass http://127.0.0.1:8000;
        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 cuando haya terminado. Luego, reinicie el servidor Nginx para aplicar los cambios:

systemctl restart nginx

Puede verificar el estado del servicio Nginx con el siguiente comando:

systemctl status nginx

Debería ver el siguiente resultado:

? nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-03-25 12:42:49 UTC; 5min ago
     Docs: man:nginx(8)
  Process: 26180 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 26182 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Main PID: 26183 (nginx)
    Tasks: 3 (limit: 2359)
   Memory: 5.5M
   CGroup: /system.slice/nginx.service
           ??26183 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           ??26184 nginx: worker process
           ??26185 nginx: worker process

Mar 25 12:42:49 debian10 systemd[1]: Starting A high performance web server and a reverse proxy server...
Mar 25 12:42:49 debian10 systemd[1]: Started A high performance web server and a reverse proxy server.

Una vez que haya terminado, puede continuar con el siguiente paso.

Acceda a su aplicación Node.js

En este punto, Nginx está configurado para servir su aplicación Node.js.

Ahora, abra su navegador web y escriba la URL http://node.myserver.tld. Debería ver su aplicación Node.js en la siguiente pantalla:

p√°gina Node.js

Conclusión

En el artículo anterior, aprendió cómo configurar la aplicación Node.js en Debian 10. También aprendió cómo ejecutar la aplicación Node.js como un demonio y configurar Nginx como un proxy inverso para atender la aplicación. Espero que ahora pueda alojar fácilmente su aplicación Node.js en un entorno de producción.

Deja una respuesta

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