Cómo instalar Node.js en Debian 10 y configurar Nginx como servidor proxy frontend
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:
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.