diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1c0b55f --- /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/api/v1/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