From 0d3ae292dee1c7fdcbe66ccca2b87abee03479a6 Mon Sep 17 00:00:00 2001 From: "Mamadou Khoussa [028918 DSI/DAC/DIF/DS]" Date: Tue, 28 Oct 2025 12:12:59 +0000 Subject: [PATCH] fix build --- .dockerignore | 17 +++++++++++++++ Dockerfile | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..ab984db --- /dev/null +++ b/.dockerignore @@ -0,0 +1,17 @@ +node_modules +npm-debug.log +dist +coverage +.git +.gitignore +.env +.env.* +*.md +.vscode +.idea +test +**/*.spec.ts +**/*.test.ts +.eslintrc.js +.prettierrc +jest.config.js \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..ef629cf --- /dev/null +++ b/Dockerfile @@ -0,0 +1,57 @@ +# Stage 1: Build +FROM node:20-alpine AS builder + +# Définir le répertoire de travail +WORKDIR /app + +# Copier les fichiers de dépendances +COPY package*.json ./ + +# Installer les dépendances avec --legacy-peer-deps pour résoudre les conflits +RUN npm ci --legacy-peer-deps + +# Copier le code source +COPY . . + +# Builder l'application +RUN npm run build + +# Stage 2: Production +FROM node:20-alpine AS production + +# Installer dumb-init pour une meilleure gestion des signaux +RUN apk add --no-cache dumb-init + +# 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 +COPY package*.json ./ + +# Installer UNIQUEMENT les dépendances de production avec --legacy-peer-deps +RUN npm ci --omit=dev --legacy-peer-deps && \ + npm cache clean --force + +# Copier le code buildé depuis le builder +COPY --from=builder --chown=nestjs:nodejs /app/dist ./dist + +# Changer le propriétaire des fichiers +RUN chown -R nestjs:nodejs /app + +# Utiliser l'utilisateur non-root +USER nestjs + +# Exposer le port (ajustez selon votre configuration) +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)})" + +# Démarrer l'application avec dumb-init +ENTRYPOINT ["dumb-init", "--"] +CMD ["node", "dist/main"] \ No newline at end of file