Modification de main.ts. S'il reçois SIGINT ou SIGTERM, on arrête le programme. @Heargo Si une connexion à une BDD doit être coupé, c'est ici qu'il faut le faire (dit moi si je dois modifier un truc)
Optimisation des fichiers dockers en suivant ce tutoriel spécifique pour nestjs.
.dockerignore prend en compte plus de fichiers
version de Node fixé dans .nvmrc (qui peut être utilisé avec nvm)
Dockerfile multistage :
Version de node fixé (pas d'upgrade sans le vouloir) et paramétré (ARG) pour toute les étapes
Utilisation de l'utilisateur Node plutôt que celui par défaut (root).
Téléchargement des dépendances avant de copier le code (pour profiter du cache de docker). En effet, chaque instruction est mise en cache, et n'est mise à jour que si des fichiers ou de la configuration change. Pas de changement dans package.json, pas de re-téléchargement.
Stage 1 "dev" télécharge les dépendances. Stage 2 "build" va build et supprimer les dépendances de dev. Stage 3 "prod" n'embarque que les fichiers nécessaires. Stage 1 et 2 pourrait être combiné, mais dans la pratique on peut utiliser "dev" seul et monté un volume de notre code dedans, pour tester ou être sûr d'avoir la bonne version de node.
Défini un Github Workflow (utilisant les Github Actions) pour automatiquement build un conteneur, et stocker l'image sur le registry ghcr.io par défaut (bonne intégration avec Github, pas d'inscription supplémentaire).
Pour déclencher un build, il faut créer une version via un tag git. Par exemple, j'utilise git tag -a v1.0.2 -m "v1.0.2" pour créer un tag annoté (plus de précision ici), et je l'envoie avec git push --tags.
On peut ensuite le télécharger en local avec docker pull ghcr.io/<user>/<repo>:v<X.X.X> où X.X.X est la version donné dans le tag git. On peut aussi remplacer vX.X.X par latest pour avoir la dernière version packagé.
TO EDIT: https://www.tomray.dev/nestjs-docker-production + résumé des changements
main.ts
. S'il reçois SIGINT ou SIGTERM, on arrête le programme. @Heargo Si une connexion à une BDD doit être coupé, c'est ici qu'il faut le faire (dit moi si je dois modifier un truc).dockerignore
prend en compte plus de fichiersgit tag -a v1.0.2 -m "v1.0.2"
pour créer un tag annoté (plus de précision ici), et je l'envoie avecgit push --tags
.docker pull ghcr.io/<user>/<repo>:v<X.X.X>
oùX.X.X
est la version donné dans le tag git. On peut aussi remplacervX.X.X
parlatest
pour avoir la dernière version packagé.