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)
- Cree un nuevo grupo de seguridad que permita el tráfico en: puerto SSH 22, puerto del servidor de nodo, digamos 8080, por ejemplo
- Cree y adjunte un rol de IAM que permita el acceso a depósitos S3 específicos
- 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.
- 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
-
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>
ycommit SHA
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: