Introducción
Las aplicaciones web modernas dependen de un soporte sólido y seguro. Por lo tanto, es fundamental crear aplicaciones escalables, seguras y con una arquitectura compleja que permita su gestión por equipos de desarrolladores, ya sean pequeños o grandes.
Los desarrolladores modernos prefieren usar JavaScript tanto en el front-end como en el back-end. Express.js es un excelente framework de JavaScript utilizado por la mayoría de los desarrolladores. Sin embargo, su arquitectura minimalista lo hace inadecuado para la escalabilidad y el mantenimiento por parte de equipos grandes. Aquí es donde entra en juego Nest.js. Nest.js cuenta con una arquitectura integrada que lo hace muy adecuado para la escalabilidad y la implementación. Además, su compatibilidad nativa con TypeScript lo hace más adecuado para desarrolladores que el JavaScript estándar.
En este tutorial, aprenderá a implementar una aplicación NestJS usando el servidor web Nginx en un VPS. Aprenderá a implementar su aplicación de forma segura en la web.
Requisitos previos
- Un VPS Ubuntu 20.04+ o una máquina Ubuntu física
- Node.js y el administrador de paquetes npm (o yarn).
- Servidor web Nginx
Paso 1: Preparación e implementación de una aplicación NestJS
En esta sección, instalará la CLI de NestJS y creará una aplicación NestJS básica, que aprenderá a implementar usando Nginx en las siguientes secciones.
Instalar NestJS CLI globalmente
Para instalar NestJS CLI en su máquina Ubuntu, abra una terminal y escriba el siguiente comando.
npm i -g @nestjs/cliEsto instalará la interfaz de línea de comandos de NestJS en su equipo. A continuación, aprenderá a crear un nuevo proyecto de NestJS.
Crear un nuevo proyecto NestJS
NestJS ahora ofrece dos maneras de iniciar un nuevo proyecto. Puedes elegir el método que mejor se adapte a tus necesidades.
Para crear un proyecto NestJS con la CLI, escriba el siguiente comando.
nest new <project-name>Output? Which package manager would you ❤️ to use? (Use arrow keys)
❯ npm
yarn
pnpmUna vez completado, recibirás un resultado como el siguiente.
OutputCREATE node_app/.eslintrc.js (663 bytes)
CREATE node_app/.prettierrc (51 bytes)
CREATE node_app/README.md (3340 bytes)
CREATE node_app/nest-cli.json (171 bytes)
CREATE node_app/package.json (1947 bytes)
CREATE node_app/tsconfig.build.json (97 bytes)
CREATE node_app/tsconfig.json (546 bytes)
CREATE node_app/src/app.controller.ts (274 bytes)
CREATE node_app/src/app.module.ts (249 bytes)
CREATE node_app/src/app.service.ts (142 bytes)
CREATE node_app/src/main.ts (208 bytes)
CREATE node_app/src/app.controller.spec.ts (617 bytes)
CREATE node_app/test/jest-e2e.json (183 bytes)
CREATE node_app/test/app.e2e-spec.ts (630 bytes)Esto creará un nuevo proyecto en el directorio de trabajo actual. Puedes usar en su lugar ; Proporcione también la ruta absoluta a otro directorio.
Simulación de plantilla de inicio
NestJS ofrece una forma alternativa de iniciar un nuevo proyecto. Se trata de un repositorio Git que funciona como plantilla. Puedes clonar ese repositorio e iniciar el proyecto con los siguientes comandos.
git clone https://github.com/nestjs/typescript-starter.git <project-directory >Una vez completada la clonación, debes ingresar al directorio del proyecto y luego ejecutar npm install para instalar las dependencias de package.json.
cd <project-directory>
npm installUna vez que el proyecto esté listo, puedes iniciar el servidor de aplicaciones utilizando el siguiente comando:
npm run startEsto ejecutará la aplicación en http://localhost:3000. Ahora, tiene una aplicación NestJS básica lista para ejecutarse en localhost.
Pruebas de aplicaciones
Una vez desarrollada la aplicación, puede ejecutar pruebas para comprobar su rendimiento. NestJS proporciona pruebas Jest predeterminadas que ejecutan pruebas en la aplicación. Puede empezar a probar con el siguiente comando:
npm run testEste programa lo pondrá a prueba y le mostrará resultados similares a los siguientes:
Output> [email protected] test
> jest
PASS src/app.controller.spec.ts
AppController
root
✓ should return "Hello World!" (24 ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 2.895 s
Ran all test suites.En la siguiente sección, aprenderá cómo implementar esta aplicación NestJS usando Nginx como proxy inverso en su servidor web.
Paso 2: Configurar Nginx para servir la aplicación NestJS
Ahora, podemos configurar un servidor web para alojar esta aplicación NestJS. Utilizaremos el proxy inverso. En este método, ejecutamos nuestra aplicación en un puerto específico del host local y luego usamos el servidor Nginx para redirigir cualquier solicitud a la dirección IP pública o al dominio del VPS a la aplicación en el host local. El uso de servidores proxy inversos es una práctica habitual en la industria, ya que aumenta la seguridad del servidor web al crear una barrera entre las solicitudes entrantes y la aplicación backend. Además, los proxies inversos permiten una mejor gestión de la carga en el servidor, especialmente cuando este aloja varias aplicaciones web.
Instalamos el gestor de paquetes pm2 Comenzamos con el que gestiona el programa en tiempo de ejecución.
Instalar pm2 Process Manager
Puede utilizar el siguiente comando para abrir el administrador de procesos. pm2 Instalar.
npm install -g pm2Con este trabajo pm2 Se instala globalmente en su dispositivo.
Creación de la configuración de Nginx para la aplicación NestJS
Ahora, configure Nginx para ejecutar la aplicación. Como se menciona en el tutorial de prerrequisitos, asegúrese de habilitar la aplicación Nginx para HTTP y HTTPS en su firewall. Si usa un firewall ufw, puede hacerlo siguiendo las instrucciones.
ufw enable
ufw allow ‘Nginx Full‘Ahora, creará un bloque de configuración para nuestra aplicación NestJS. Se recomienda crear nuevos bloques de configuración para las nuevas aplicaciones en lugar de editar la configuración predeterminada. Para crear el bloque, escriba el siguiente código en su terminal.
sudo nano /etc/nginx/sites-available/your_domainAquí usamos "your_domain" para la aplicación, pero lo cambiarás por el nombre de tu aplicación. Luego, en el editor, introduce el siguiente código:
server {
server_name your_domain www.your_domain;
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;
}
}Ahora, crea un enlace simbólico que le indica a Nginx que busque aplicaciones web disponibles en la carpeta sites-available:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/Además, debe deshabilitar el enlace predeterminado; de lo contrario, nginx redirigirá todas las solicitudes al sitio predeterminado. Use el siguiente comando para desvincular.
sudo unlink /etc/nginx/sites-enabled/defaultAhora reinicie el servicio Nginx usando el siguiente comando.
sudo systemctl restart nginxImplementación de la aplicación NestJS mediante Nginx
Ahora, iniciará el gestor de paquetes pm2 para gestionar la ejecución de su aplicación NestJS. Cambie el directorio de trabajo al directorio de su aplicación NestJS y escriba el siguiente comando.
pm2 start npm --name "your_domain" – startPuede ejecutar el siguiente comando para configurar pm2 para que se ejecute al reiniciar el servidor.
pm2 startupUna vez que haya terminado de configurar el programa en pm2, continúe y guarde la lista de procesos de pm2 con lo siguiente:
pm2 save
Ahora, hemos configurado la aplicación web para que se ejecute al inicio y hemos configurado Nginx para que actúe como proxy inverso a nuestra aplicación que se ejecuta en el host local.
Pruebas de aplicaciones web
Puede probar la aplicación web desde su consola escribiendo el siguiente comando.
curl http://localhostDado que hemos configurado el proxy inverso en la dirección IP del propio servidor, cualquier solicitud a la dirección IP pública, al dominio o al host local del servidor se reenviará a la aplicación. NestsJS tu_dominio Es guiado.
OutputHello World!En la siguiente sección, aprenderá a agregar SSL a su aplicación, lo que le permitirá utilizar el protocolo HTTPS para sus solicitudes.
Paso 3: Agregar SSL usando Let's Encrypt (opcional)
Hasta ahora, ha aprendido a implementar una aplicación NestJS completamente funcional con el servidor Nginx. Sin embargo, esta implementación utiliza el protocolo HTTP, que no se recomienda en producción debido a vulnerabilidades de explotación. Por lo tanto, desea cambiar al protocolo HTTPS, que es una versión cifrada de HTTP. HTTPS utiliza certificados SSL/TLS emitidos por una autoridad de certificación. Estos certificados son específicos de un sitio web y cifran la comunicación entre el cliente y el servidor.
Instalar Let's Encrypt Certbot CLI
Let's Encrypt proporciona una CLI para administrar y automatizar certificados SSL para consumidores. Puede instalar la herramienta con el siguiente comando:
sudo apt install certbot python3-certbot-nginxEsto instalará el cliente certbot en su VPS Ubuntu.
Obtenga certificados SSL/TLS para su dominio
Ahora puede obtener certificados SSL para su dominio utilizando el siguiente comando
sudo certbot --nginx -d <your_domain> -d <www.your_domain>Usted debe tu_dominio Reemplace certbot con su nombre de dominio. Si es la primera vez que ejecuta certbot en su VPS, se le pedirá que ingrese su correo electrónico y acepte las condiciones de usuario. Proporcione la información necesaria y continúe.
Una vez instalados los certificados, podrá redirigir todas las solicitudes a HTTPS. Se recomienda redirigir todas las solicitudes para garantizar la integridad de su sitio web.
Resultado
En este tutorial, aprendiste a implementar una aplicación NestJS usando el servidor web Nginx en un VPS Ubuntu en producción. También aprendiste a configurar un proyecto NestJS y un proxy inverso para tu aplicación usando Nginx. Finalmente, aprendiste a agregar certificados SSL/TLS para el dominio de tu servidor y a garantizar la integridad de las comunicaciones entre tus clientes y el servidor.









