cover image
Cloud

Cómo Dockerizar una Aplicación Prisma Nest.js

A menudo la gente utiliza Nest.js y Prisma juntos cuando programan una aplicación backend. Luego está la cuestión de cómo desplegar la aplicación con Docker. Este artículo te muestra cómo.

Nest.js

Nest.js es un framework para construir aplicaciones JavaScript y TypeScript del lado del servidor. Proporciona una abstracción sobre Express.js o Fastify. Tiene una buena arquitectura y las aplicaciones del lado del servidor más grandes se pueden programar más rápido que con Express.js o Fastify puros. A menudo, las aplicaciones Nest.js utilizan un ORM (Object-Relational Mapping) y por lo tanto Prisma entra en juego.

Prisma

El uso de un ORM en Node y Nest.js facilita la manipulación y consulta de datos en una base de datos SQL. Debido al desajuste entre un lenguaje de programación orientado a objetos como TypeScript y el modelo de datos relacional, una herramienta como Prisma es muy útil. Prisma tiene una única fuente de verdad para el modelo de datos, lo cual es un buen diseño. Se puede utilizar fácilmente dentro de una aplicación Nest.js. Una vez que desarrolles tu aplicación Nest.js, también tienes que pensar en el despliegue. Aquí es donde los contenedores con Docker brillan.

Docker

Docker se utiliza para automatizar el despliegue de software en paquetes ligeros llamados contenedores. Hoy en día es el estándar de despliegue de software del lado del servidor en la nube. Así que cuando quieres desplegar tu aplicación Nest.js que utiliza Prisma a un servicio en la nube que soporta Docker, necesitas escribir un Dockerfile. El Dockerfile especifica los pasos para crear una imagen Docker.

How to Dockerize

Este es un ejemplo de Dockerfile para una aplicación Nest.js que usa Prisma:

# Esta línea especifica la imagen base para la imagen Docker. En este caso, estamos usando una imagen runtime oficial de Node.js con la versión 18.18 y la 
# distribución Alpine de Linux. 
FROM node:18.18-alpine 

# Esta línea establece el directorio de trabajo dentro del contenedor a /usr/src/app. Aquí es donde copiaremos el código de nuestra aplicación y donde se # ejecutará la aplicación. 
WORKDIR /usr/src/app 

# Esta línea instala el paquete build-base usando el gestor de paquetes Alpine (apk). Este paquete incluye las herramientas necesarias para construir # módulos nativos de Node.js. 
RUN apk add build-base 

# Esta línea instala Python 3 usando el gestor de paquetes Alpine. Python es necesario para algunos módulos Node.js que tienen dependencias nativas. 
RUN apk add python3 

# Esta línea instala el paquete node-gyp globalmente usando npm. node-gyp es una herramienta para construir módulos Node.js nativos. 
RUN npm install -g node-gyp 

# Copia package.json y package-lock.json al contenedor 
COPY package*.json ./ 

# Instala las dependencias de la aplicación 
RUN npm install 

# Copia el resto del código de tu aplicación al contenedor 
COPY . . 

# Esta línea establece una variable de entorno que indica a Prisma ORM que ignore las sumas de comprobación del motor que falten. Esto es útil cuando se despliega en ciertas 
# plataformas como Heroku. 
ENV PRISMA_ENGINES_CHECKSUM_IGNORE_MISSING=1 

# Esta línea genera el código cliente Prisma basado en el esquema definido en la aplicación. RUN npx prisma generate # Expone el puerto en el que se ejecutará tu aplicación (Nest.js por defecto es 3000) 
EXPOSE 3000 

# Define el comando para ejecutar tu aplicación 
CMD ["npm", "start"] 

He incluido comentarios en cada línea del Dockerfile. Ten en cuenta que, debido a Prisma, han sido necesarios más pasos que para una aplicación Nest.js pura. En este Dockerfile usé una imagen Alpine Linux Node porque es más pequeña en tamaño y más segura que la imagen Node estándar.

El siguiente paso es construir la imagen usando Docker. Puedes hacerlo con el siguiente comando:

docker build -t <nombre-de-la-imagen> . 

Luego puedes iniciar la imagen y ejecutarla como un contenedor. Si utilizas una herramienta como Docker Desktop, basta con pulsar el botón de ejecutar. También existe un comando en la línea de comandos:

docker run -p <host-port>:<container-port> <nombre-de-la-imagen> 

En nuestro caso, el container-port es 3000 (comando EXPOSE 3000 en el Dockerfile). Finalmente, deberías poder acceder a tu aplicación desplegada.

Conclusión

Como habrás podido comprobar, las aplicaciones Nest.js no son en principio difíciles de dockerizar. Cuando se utiliza el cliente Prisma, hay una serie de pasos adicionales que deben tomarse. Espero que hayas aprendido algo nuevo.

Referencias

Foto de portada: Michael Dziedzic en Unsplash

Published 25 Oct 2023

Creative Commons License
.
Thomas Derflinger

Escrito por Thomas Derflinger

Soy un empresario visionario y desarrollador de software. En este blog escribo principalmente sobre programación web y temas relacionados como el IoT.