servidor de NodeJS: Implementar y escalar

servidor de NodeJS

Guía práctica: Implementar y escalar un servidor de NodeJS (Auto Scaling Group, Code Deploy)

La siguiente guía le ayudará a implementar el servidor Nodejs en la instancia EC2 en la nube de AWS:

1. Configuando el grupo de escalado automático y el balanceador de carga de la aplicación para permitir que la aplicación se escale

2. Automatizando la implementación de cambios de código en todos los servidores mediante el servicio CodeDeploy


Paso 1: configurar la instancia EC2

Pasos para lanzar una instancia EC2:

  • Elija Ubuntu 18.04 LTS (recomendado)
servidor de NodeJS
Elija Ubuntu 18.04 LTS AMI
  • Cree un nuevo grupo de seguridad que permita el tráfico en: puerto SSH 22, puerto del servidor de nodo, digamos 8080, por ejemplo
servidor de NodeJS
Crear un nuevo grupo de seguridad y configurar reglas de entrada
  • Cree y adjunte un rol de IAM que permita el acceso a depósitos S3 específicos
servidor de NodeJS
Cree el rol de IAM y adjunte la política
  • Agregue el siguiente script en el campo de datos de usuario. El script instala el agente Code Deploy en todas las instancias de EC2, ya que los datos de usuario se ejecutan en el lanzamiento.
servidor de NodeJS
Script Bash para usar con datos de usuario
  • Después de realizar todos los pasos necesarios anteriores, inicie la instancia EC2. Una vez que la instancia EC2 se esté ejecutando, debería poder acceder a ella mediante SSH desde su máquina host mediante el par de claves.
$ ssh -i <path-to-key.pem> ubuntu@<public ip address of EC2>

  • Configurar el acceso a github en EC2

En la instancia EC2, genere una nueva clave SSH. Copie y pegue la nueva clave SSH en su cuenta de git (configuración) para poder usar git en la nueva instancia de EC2

servidor de NodeJS

Página de configuración de Github para agregar una nueva clave SSH
  • Clone el repositorio del proyecto node.js en la instancia EC2

  • Instalar Nodo y NVM

  • Copie el archivo .env, si existe en su proyecto y ejecute el servidor
$ nano .env
$ yarn run start
  • Compruebe si se puede acceder al servidor en la IP pública de la instancia EC2 en el puerto 8080

Si has llegado hasta aquí, ¡felicidades! 🎉

Ahora tienes una aplicación nodejs accesible a través de internet. Eso es definitivamente algo para celebrar.

Pero sabes que no nos detenemos aquí. ¡Vamos!

  • Instalemos PM2. Nuestro administrador de procesos para preparar la producción del servidor nodejs 💪
$ npm install -g pm2

Ahora asegurémonos de que nuestra aplicación pueda ejecutarse a través de  pm2. Para hacer eso, el servicio pm2 debe convertirse en un proceso systemd para que pueda iniciarse automáticamente si las instancias se reinician/reinician por cualquier motivo.

$ cd node-server
$ pm2 start npm -- start
$ pm2 startup$ sudo env PATH=$PATH:/home/ubuntu/.nvm/versions/node/v18.8.0/bin /home/ubuntu/.nvm/versions/node/v18.8.0/lib/node_modules/pm2/bin/pm2 startup systemd -u ubuntu --hp /home/ubuntu
  • Después de asegurarnos de que el servidor nodejs se está ejecutando, es hora de crear una imagen a partir de esta instancia en (Acciones > Imágenes y plantillas > crear imagen) y nombrarla algo así como node-server-staging. Si se creó correctamente, debería ver la imagen debajo de las AMI en el panel de EC2

Paso 2: crear un grupo de escalado automático

  • Cree una configuración de lanzamiento con la AMI que acabamos de crear arriba
  • Asigne el rol de IAM de acceso de lectura de S3 para que las instancias
  • EC2 recién activadas por el ASG puedan configurarse con el agente Code Deploy
  • Crear grupo de seguridad con reglas de entrada en el puerto 8080 y el puerto 80
  • Cree un nuevo balanceador de carga de aplicaciones y adjunte SG con tráfico entrante permitido en el puerto 80
  • Cree un nuevo grupo objetivo con una configuración de enrutamiento que tenga acceso al tráfico HTTP en el puerto 8080
  • Configurar comprobaciones de estado en /status

Paso 3: Implementación del código de configuración

  • Configure la aplicación Code Deploy con el rol de IAM de la política Code Deploy e intégrela con ASG
  • Cree un grupo de implementación que contenga AutoScalingGroup y EC2 staging instance node-server-staging
  • Otorgue acceso a Code Deploy a su repositorio git
  • Agregue appspec.yml a la raíz del repositorio del proyecto y especifique los campos obligatorios, source , destination

Ejemplo de archivo appspec.yml:

https://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file-example.html

  • Y finalmente, puede crear una nueva implementación especificando  <git-user>/<repo-name> y commit SHA
Code Deploy: eventos del ciclo de vida de la implementación

La implementación puede tardar varios minutos en finalizar y puede comprobar el estado de todos los eventos de la implementación. Una vez que haya terminado con éxito, debería ver los nuevos cambios implementados en todos los objetivos en su Grupo de Auto-Scaling.

Puede optar por automatizar la implementación configurando la implementación del código para activar una implementación, por ejemplo, cuando algo se fusiona en ramas main / stable. Para este proyecto, todavía quiero que sea manual donde voy al panel de Code Deploy y desencadeno una nueva implementación copiando el commit SHA de git.

Espero que esta guía sea útil para sus proyectos 🚀


Gracias por llegar hasta aquí, si encuentras esto útil no olvides aplaudir 👍🏼suscribirse para recibir más contenido.

Si le interesa, puede echar un vistazo a algunos de los otros artículos que he escrito recientemente sobre AWS y Laravel:

Recent Post