Creación y acoplamiento de una aplicación Node.js con arquitectura sin estado con la ayuda de Kinsta

Dockerizar sus aplicaciones Node.js puede conducir a un éxito rotundo: ofrece coherencia, depuración sencilla y gestión de dependencias sin complicaciones. Cuando aloja este contenedor en Kinsta, también se beneficia de un rendimiento de alta velocidad, una seguridad sólida y una escalabilidad de primer nivel. Al combinar estos dos, seguramente te lo pasarás en grande mientras navegas sin problemas por los mares del desarrollo.
Este artículo ha sido apoyado amablemente por nuestros queridos amigos de Kinsta , quienes están comprometidos con la mejor experiencia para desarrolladores y empresas, creando rendimiento y facilidad de uso. ¡Gracias!
En este artículo, intentaremos crear una aplicación Node.js sin estado y acoplarla, haciendo que nuestro entorno de desarrollo sea limpio y eficiente. A lo largo del camino, exploraremos los beneficios de alojar contenedores en plataformas como Kinsta, que ofrece un entorno de alojamiento administrado y al mismo tiempo admite contenedores Docker, así como alojamiento de aplicaciones y bases de datos, lo que permite a los usuarios implementar y escalar sus aplicaciones con más flexibilidad y facilidad.
Creando una aplicación Node.js
En caso de que sea nuevo en el código, Node.js es una plataforma construida sobre el motor JavaScript de Chrome que permite a los desarrolladores crear aplicaciones del lado del servidor usando JavaScript. Es popular por su naturaleza liviana, rendimiento eficiente y capacidades asincrónicas.
Las aplicaciones sin estado no almacenan ninguna información sobre la sesión del usuario, lo que proporciona una forma limpia y eficiente de administrar sus aplicaciones. Exploremos cómo crear una aplicación Node.js de esta manera.
Paso 1: Inicialice el proyecto Node.js
Primero, cree un nuevo directorio y navegue hasta él:
mkdir smashing-app cd smashing-app
A continuación, inicialice un nuevo proyecto Node.js:
npm init -y
Paso 2: Instalar Express
Express es un marco de aplicación web Node.js mínimo y flexible que proporciona un conjunto sólido de funciones para aplicaciones web y móviles. Instale Express con el siguiente comando:
npm install express
Paso 3: crea tu aplicación sin estado
Cree un nuevo archivo llamado "app.js" y agregue el siguiente código:
const express = require("express");const app = express();const port = process.env.PORT || 3000;app.get("/", (req, res) = { res.send("Welcome to our smashing stateless Node.js app!");});app.listen(port, () = { console.log(`Smashing app listening at http://localhost:${port}`);});
Exploremos esto un poco. Esto es lo que hace cada línea:
const express = require("express");
Esta línea importa el marco Express.js al código, haciéndolo disponible para su uso.const app = express();
Esta línea crea una instancia del marco Express.js llamada aplicación. Esta instancia de aplicación es donde definimos las rutas y configuraciones de nuestro servidor.const port = process.env.PORT || 3000;
Esta línea establece el número de puerto para el servidor. Busca un número de puerto establecido en una variable de entorno llamada PORT. Si esa variable no está configurada, el valor predeterminado es el puerto 3000.app.get("/", (req, res) = {}
Esta línea define una ruta para el servidor cuando se realiza una solicitud GET a la URL raíz (“/”).res.send("Welcome to our smashing stateless Node.js app!");
Esta línea envía la cadena "¡Bienvenido a nuestra espectacular aplicación Node.js sin estado!" como respuesta a la solicitud GET realizada a la URL raíz.app.listen(port, () = {})
Esta línea inicia el servidor y escucha en el número de puerto especificado anteriormente.
Ahora, ejecuta la aplicación con:
node app.js
Su aplicación Node.js ahora se está ejecutando en http://localhost:3000.
Arquitectura sin estado
La arquitectura sin estado significa que el servidor no almacena ninguna información sobre la sesión del usuario, lo que genera varios beneficios:
- Escalabilidad
Las aplicaciones sin estado pueden escalar horizontalmente fácilmente agregando más instancias sin preocuparse por los datos de la sesión. - Simplicidad
Sin datos de sesión que administrar, la lógica de la aplicación se vuelve más simple y fácil de mantener. - Tolerancia a fallos
Las aplicaciones sin estado pueden recuperarse rápidamente de fallos porque no hay ningún estado de sesión que perder o recuperar.
Bien, tenemos nuestro servidor Node.js ejecutándose localmente, pero ¿cómo podemos empaquetarlo para que cualquiera pueda ejecutarlo? ¿Incluso las personas que no tienen Node.js instalado y lo ejecutan en cualquier plataforma? Ahí es donde entra Docker.
Dockerizando la aplicación
Docker es una herramienta que ayuda a los desarrolladores a crear, enviar y ejecutar aplicaciones en un entorno en contenedores. Simplifica el proceso de implementación de aplicaciones en diferentes plataformas y entornos.
Paso 1: instale Docker
Primero, asegúrese de tener Docker instalado en su máquina. Puedes descargarlo aquí .
Paso 2: crea un archivo Docker
Cree un nuevo archivo llamado Dockerfile en el directorio de su proyecto y agregue el siguiente código:
FROM node:18-alpineWORKDIR /usr/src/appCOPY package*.json ./RUN npm installCOPY . .ENV PORT=3000CMD [ "node", "app.js" ]
Una vez más, echemos un vistazo a lo que esto hace con un poco más de detalle:
FROM node:18-alpine
Esta línea especifica la imagen base para esta imagen de Docker. En este caso se trata de la imagen oficial de Node.js Docker basada en la distribución Alpine Linux. Esto le da Node.js al contenedor Docker, que es como una “máquina virtual” pero más liviana y eficiente.WORKDIR /usr/src/app
Esta línea establece el directorio de trabajo dentro del contenedor Docker en/usr/src/app.COPY . .
Esta línea copia todos los archivos del directorio local al directorio de trabajo en el contenedor Docker.RUN npm install
Esta línea instala las dependencias especificadas en elpackage.jsonarchivo.ENV PORT=3000
Usando esta directiva, hacemos que la aplicación sea más configurable usando la variable de entorno PORT. Este enfoque proporciona flexibilidad y permite a los proveedores de alojamiento como Kinsta conectar la aplicación a su infraestructura sin problemas.CMD [ "node", "app.js" ]
Esta línea especifica el comando que se ejecutará cuando se inicie el contenedor Docker. En este caso, ejecuta el comando node con app.js como argumento, que iniciará la aplicación Node.js.
Entonces, este Dockerfile crea una imagen de Docker que configura un directorio de trabajo, instala dependencias, copia todos los archivos en el contenedor, expone el puerto 3000 y ejecuta la aplicación Node.js con el comando node.
Paso 3: construir y ejecutar el contenedor Docker
Ahora construyamos esto y lo ejecutamos localmente para asegurarnos de que todo funcione bien.
docker build -t smashing-app
Cuando esto tenga éxito, ejecutaremos el contenedor:
docker run -p 3000:3000 smashing-app
Analicemos esto porque -p 3000:3000puede parecer confuso. Esto es lo que está pasando:
docker runes un comando utilizado para ejecutar un contenedor Docker.-p 3000:3000es una opción que asigna el puerto3000en el contenedor Docker al puerto3000en la máquina host. Esto significa que3000se podrá acceder al puerto del contenedor desde la máquina host en el puerto3000. El primer número de puerto es el número de puerto de la máquina host (la nuestra) y el segundo número de puerto es el número de puerto del contenedor.- Podemos
1234asignar el puerto de nuestra máquina al puerto3000del contenedor y luegolocalhost:1234señalaremoscontainer:3000y seguiremos teniendo acceso a la aplicación. smashing-appes el nombre de la imagen de Docker en la que se basa el contenedor, la que acabamos de crear.
Su aplicación Dockerized Node.js ahora debería estar ejecutándose en http://localhost:3000.
Al ejecutar el contenedor Docker, también podemos pasar un valor de PUERTO personalizado como variable de entorno:
docker run -p 8080:5713 -d -e PORT=5713 smashing-app
Este comando asigna el puerto 5713 del contenedor al puerto 8080 del host y establece la variable de entorno PORT en 5713 dentro del contenedor.
El uso de la variable de entorno PORT en Dockerfile permite una mayor flexibilidad y adaptabilidad al implementar la aplicación Node.js en varios proveedores de alojamiento, incluido Kinsta .
Más ventajas sorprendentes de acoplar una aplicación Node.js
Dockerizar una aplicación Node.js aporta varias ventajas a los desarrolladores y al ciclo de vida general de la aplicación. A continuación se muestran algunos beneficios clave adicionales con ejemplos de código:
Gestión de dependencia simplificada
Docker le permite encapsular todas las dependencias dentro del propio contenedor, lo que facilita su administración y uso compartido entre los miembros del equipo. Por ejemplo, digamos que tiene un archivo package.json con una versión específica de un paquete:
{ "dependencies": { "lodash": "4.17.21" }}
Al incluir esto en su Dockerfile, la versión específica de lodash se instala y empaqueta automáticamente dentro de su contenedor, lo que garantiza un comportamiento consistente en todos los entornos.
Fácil control de versiones de la aplicación
Docker le permite etiquetar y versionar las imágenes de su aplicación, lo que facilita volver a versiones anteriores o implementar diferentes versiones en paralelo. Por ejemplo, si desea crear una nueva versión de su aplicación, puede etiquetarla usando el siguiente comando:
docker build -t smashing-app:v2 .
Luego puedes ejecutar varias versiones de tu aplicación simultáneamente:
docker run -p 3000:3000 -d smashing-app:v1docker run -p 3001:3000 -d smashing-app:v2
Variables de entorno
Docker facilita la administración de variables de entorno, que se pueden pasar a su aplicación Node.js para modificar su comportamiento según el entorno (desarrollo, preparación, producción). Por ejemplo, en su archivo app.js:
const express = require('express');const app = express();const port = process.env.PORT || 3000;const env = process.env.NODE_ENV || 'development';app.get('/', (req, res) = { res.send(`Welcome to our smashing stateless Node.js app running in ${env} mode!`);});app.listen(port, () = { console.log(`Smashing app listening at http://localhost:${port}`);});
En su Dockerfile, puede configurar la NODE_ENVvariable:
FROM node:18-alpineWORKDIR /usr/src/appCOPY package*.json ./RUN npm installCOPY . .ENV NODE_ENV=productionCMD [ "node", "app.js" ]
O puedes pasarlo al ejecutar el contenedor:
docker run -p 3000:3000 -d -e NODE_ENV=production smashing-app
El TL;DR de esto es que a través de Dockerizing aplicaciones de nodo, podemos eliminar toda una clase de problemas de "funciona en mi máquina" y al mismo tiempo aumentar la reutilización, capacidad de prueba y portabilidad de nuestras aplicaciones Node.js.
Alojamiento de contenedores con Kinsta
Ahora que tenemos nuestra aplicación Node.js sin estado Dockerizada, es posible que se pregunte dónde alojarla. Kinsta es ampliamente conocido por su alojamiento de aplicaciones y bases de datos. Exploremos cómo haríamos esto con Kinsta paso a paso.
- Inicie sesión o regístrese en su cuenta de Kinsta.
- Desde allí, deberías estar en tu panel de control.
- Usando la barra lateral, navegue hasta Aplicaciones.
- Desde aquí, debería poder agregar un servicio de tipo aplicación .
- Una vez que agregue una aplicación, se le invitará a conectar su cuenta de GitHub a Kinsta para que Kinsta pueda implementar automáticamente su aplicación cuando se le envíen actualizaciones.
- Ahora puede elegir el repositorio que contiene el código que desea implementar, además de configurar algunos detalles básicos como el nombre de la aplicación y las variables de entorno.
- A continuación, especificamos el entorno de compilación de nuestra aplicación. Es aquí donde especificamos la ubicación del Dockerfile en nuestro repositorio que acabamos de crear.
- Finalmente, asignamos recursos informáticos para nuestro contenedor, ingresamos nuestra información de pago y ¡estamos listos para comenzar!
Kinsta ahora construirá e implementará nuestra aplicación y nos brindará un enlace público y seguro desde donde será accesible. ¡Nuestra aplicación ya está publicada en la web!
Conclusión
En este tutorial, creamos una aplicación Node.js y la acoplamos a Docker, lo que facilita su implementación en varios entornos. También exploramos los beneficios de la arquitectura sin estado y mencionamos algunas excelentes opciones para alojar contenedores, como Kinsta .
(yk, il)Explora más en
- Nodo.js
- Aplicaciones
- Apátrida
- javascript

Deja un comentario