cover image
Cloud

Comment dockeriser une application Prisma Nest.js

Nest.js

Nest.js est un framework pour construire des applications JavaScript et TypeScript côté serveur. Il fournit une abstraction au dessus d'Express.js ou de Fastify. Il a une bonne architecture et des applications côté serveur plus importantes peuvent être programmées plus rapidement qu'avec Express.js ou Fastify. Souvent, les applications Nest.js utilisent un ORM (Object-Relational Mapping) et c'est ainsi que Prisma entre en jeu.

Prisma

L'utilisation d'un ORM dans une application Node et Nest.js facilite la manipulation et l'interrogation de données dans une base de données SQL. En raison du décalage entre un langage de programmation orienté objet comme TypeScript et le modèle de données relationnel, un outil comme Prisma est très utile. Prisma a une seule source de vérité pour le modèle de données, ce qui est une bonne conception. Il peut facilement être utilisé dans une application Nest.js. Une fois que vous avez développé votre application Nest.js, vous devez également penser au déploiement. C'est là que les conteneurs avec Docker brillent.

Docker

Docker est utilisé pour automatiser le déploiement de logiciels dans des paquets légers appelés conteneurs. C'est aujourd'hui la norme pour le déploiement de logiciels côté serveur dans le nuage. Ainsi, lorsque vous souhaitez déployer votre application Nest.js qui utilise Prisma vers un service de nuage qui prend en charge Docker, vous devez écrire un Dockerfile. Le Dockerfile spécifie les étapes de création d'une image Docker.

Comment Dockeriser

Voici un exemple de Dockerfile pour une application Nest.js qui utilise Prisma :

# Utiliser un runtime Node.js officiel comme image de base # Cette ligne spécifie l'image de base pour l'image Docker. Dans ce cas, nous utilisons une image officielle du runtime Node.js avec la version 18.18 et la 
# distribution Linux Alpine. 
FROM node:18.18-alpine 

# Cette ligne définit le répertoire de travail à l'intérieur du conteneur à /usr/src/app. C'est là que nous copierons le code de notre # application et que celle-ci s'exécutera. 
WORKDIR /usr/src/app 

# Cette ligne installe le paquet build-base en utilisant le gestionnaire de paquets Alpine (apk). Ce paquet comprend les outils nécessaires pour 
# construire des modules Node.js natifs. 
RUN apk add build-base 

# Cette ligne installe Python 3 en utilisant le gestionnaire de paquets Alpine. Python est nécessaire pour certains modules Node.js qui ont des dépendances natives. 
RUN apk add python3 

# Cette ligne installe le paquet node-gyp globalement en utilisant npm. node-gyp est un outil pour construire des modules Node.js 
# natifs. 
RUN npm install -g node-gyp 

# Copier package.json et package-lock.json dans le conteneur 
COPY package*.json ./ 

# Installer les dépendances de l'application 
RUN npm install 

# Copier le reste du code de votre application dans le conteneur 
COPY . . 

# Cette ligne définit une variable d'environnement qui indique à Prisma ORM d'ignorer les sommes de contrôle manquantes du moteur. Ceci est utile lors du déploiement sur certaines 
# plateformes comme Heroku. 
ENV PRISMA_ENGINES_CHECKSUM_IGNORE_MISSING=1 

# Cette ligne génère le code client Prisma basé sur le schéma défini dans l'application. 
RUN npx prisma generate 

# Expose le port sur lequel votre application s'exécutera (Nest.js par défaut est 3000) 
EXPOSE 3000 

# Définit la commande pour exécuter votre application 
CMD ["npm", "start"] 

J'ai inclus des commentaires à chaque ligne du Dockerfile. Veuillez noter qu'à cause de Prisma, il y a eu plus d'étapes nécessaires que pour une application Nest.js pure. Dans ce Dockerfile, j'ai utilisé une image Alpine Linux Node parce qu'elle est plus petite en taille et plus sûre que l'image Node standard. L'étape suivante est de construire l'image en utilisant Docker. Vous pouvez le faire avec la commande suivante :

bash docker build -t <image-name> .

Ensuite, vous pouvez démarrer l'image et l'exécuter en tant que conteneur. Si vous utilisez un outil comme Docker Desktop, il suffit de cliquer sur le bouton run. Il existe également une commande en ligne de commande :

bash docker run -p <host-port>:<container-port> <image-name>

Dans notre cas, le container-port est 3000 (commande EXPOSE 3000 dans le Dockerfile).

Enfin, vous devriez pouvoir accéder à votre application déployée.

Conclusion

Comme vous avez pu le constater, les applications Nest.js ne sont pas difficiles à dockeriser. Lorsque vous utilisez le client Prisma, il y a un certain nombre d'étapes supplémentaires à suivre. J'espère que vous avez appris quelque chose de nouveau.

Références

Photo de couverture : Michael Dziedzic sur Unsplash

Publié le 24 octobre 2023

Creative Commons License
Cette œuvre est soumise à une licence Creative Commons Attribution 4.0 International License.
Thomas Derflinger

Écrit par Thomas Derflinger

Je suis un entrepreneur visionnaire et un développeur de logiciels. Dans ce blog, j'écris principalement sur la programmation web et des sujets connexes comme l'IdO.