From 161230cf125bfbc444f9cef0392ba8647588e658 Mon Sep 17 00:00:00 2001 From: "Mamadou Khoussa [028918 DSI/DAC/DIF/DS]" Date: Mon, 1 Dec 2025 00:49:58 +0000 Subject: [PATCH] move dockerfile --- Dockerfile | 68 ++++++++++++++++++++++++------------------------------ 1 file changed, 30 insertions(+), 38 deletions(-) diff --git a/Dockerfile b/Dockerfile index 13812d3..f8e9026 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,64 +1,58 @@ -# Stage 1: Build +# ============================================================================ +# Build stage FROM node:20-alpine AS builder -# Définir le répertoire de travail +# Ajouter des dépendances nécessaires pour Prisma +RUN apk add --no-cache libc6-compat openssl + WORKDIR /app # Copier les fichiers de dépendances COPY package*.json ./ - -# Copier le schema Prisma AVANT npm ci COPY prisma ./prisma/ -# Installer les dépendances avec --legacy-peer-deps pour résoudre les conflits -RUN npm ci --legacy-peer-deps +# Installer les dépendances +RUN npm ci + +# Générer le client Prisma +RUN npx prisma generate # Copier le code source COPY . . -# Générer Prisma Client -RUN npx prisma generate - -# Builder l'application +# Build l'application RUN npm run build -# Stage 2: Production +# ============================================================================ +# Production stage +# ============================================================================ FROM node:20-alpine AS production -# Installer dumb-init pour une meilleure gestion des signaux -RUN apk add --no-cache dumb-init +# Ajouter OpenSSL pour Prisma +RUN apk add --no-cache openssl -# Créer un utilisateur non-root -RUN addgroup -g 1001 -S nodejs && \ - adduser -S nestjs -u 1001 - -# Définir le répertoire de travail WORKDIR /app -# Copier package.json et package-lock.json +# Copier package.json COPY package*.json ./ +# Installer uniquement les dépendances de production +RUN npm ci --only=production + # Copier le schema Prisma COPY prisma ./prisma/ -# Installer UNIQUEMENT les dépendances de production avec --legacy-peer-deps -RUN npm ci --omit=dev --legacy-peer-deps && \ - npm cache clean --force - -# 🔥 IMPORTANT: Générer Prisma Client en production +# Générer le client Prisma en production RUN npx prisma generate -# Copier le code buildé depuis le builder -COPY --from=builder --chown=nestjs:nodejs /app/dist ./dist +# Copier les fichiers buildés depuis le builder +COPY --from=builder /app/dist ./dist -# 🔥 IMPORTANT: Copier les fichiers générés de Prisma depuis le builder -COPY --from=builder --chown=nestjs:nodejs /app/node_modules/.prisma ./node_modules/.prisma -COPY --from=builder --chown=nestjs:nodejs /app/node_modules/@prisma ./node_modules/@prisma +# Créer un utilisateur non-root pour la sécurité +RUN addgroup -g 1001 -S nodejs && \ + adduser -S nestjs -u 1001 -# Si vous utilisez un output personnalisé dans schema.prisma, copiez aussi: -# COPY --from=builder --chown=nestjs:nodejs /app/generated ./generated - -# Changer le propriétaire des fichiers +# Changer les permissions RUN chown -R nestjs:nodejs /app # Utiliser l'utilisateur non-root @@ -67,10 +61,8 @@ USER nestjs # Exposer le port EXPOSE 3000 -# Healthcheck -#HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \ -# CMD node -e "require('http').get('http://localhost:3000/health', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})" +# Variable d'environnement +ENV NODE_ENV=production -# Démarrer l'application avec dumb-init -ENTRYPOINT ["dumb-init", "--"] +# Démarrer l'application CMD ["node", "dist/main"] \ No newline at end of file