From 62e93f372df3e44bfd032bdc1a1153db6e887563 Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Wed, 9 Jul 2025 20:25:22 +0000 Subject: [PATCH] Simplify the application setup process within its isolated environment Refactors the Dockerfile to streamline the build process and dependency management. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 91318273-c764-4fd4-be04-bdc12c38af32 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/0715008c-7244-40f4-befc-26c014852236/6e755801-08e8-4492-805e-ac3610de5a2a.jpg --- Dockerfile | 42 +++++------------------- attached_assets/image_1752092607974.png | Bin 0 -> 21876 bytes 2 files changed, 9 insertions(+), 33 deletions(-) create mode 100644 attached_assets/image_1752092607974.png diff --git a/Dockerfile b/Dockerfile index ed8e2e8..b6ad9d6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,29 +1,8 @@ -# Dockerfile multi-stage pour RegisFlow -FROM node:18-alpine AS builder +# Dockerfile pour RegisFlow +FROM node:18-alpine # Installer les dépendances système nécessaires -RUN apk add --no-cache python3 make g++ - -# Créer le répertoire de l'application -WORKDIR /app - -# Copier les fichiers de dépendances -COPY package*.json ./ - -# Installer toutes les dépendances (dev + prod pour la build) -RUN npm ci - -# Copier le code source -COPY . . - -# Construire l'application -RUN npm run build - -# Stage de production -FROM node:18-alpine AS production - -# Installer les dépendances système pour la production -RUN apk add --no-cache dumb-init postgresql-client +RUN apk add --no-cache dumb-init postgresql-client wget python3 make g++ # Créer un utilisateur non-root RUN addgroup -g 1001 -S nodejs @@ -35,14 +14,11 @@ WORKDIR /app # Copier les fichiers de dépendances COPY package*.json ./ -# Installer seulement les dépendances de production -RUN npm ci --only=production && npm cache clean --force +# Installer toutes les dépendances +RUN npm ci && npm cache clean --force -# Copier les fichiers construits depuis le stage builder -COPY --from=builder --chown=regisflow:nodejs /app/dist ./dist -COPY --from=builder --chown=regisflow:nodejs /app/server ./server -COPY --from=builder --chown=regisflow:nodejs /app/shared ./shared -COPY --from=builder --chown=regisflow:nodejs /app/drizzle.config.ts ./drizzle.config.ts +# Copier le code source +COPY --chown=regisflow:nodejs . . # Copier le script d'entrée COPY --chown=regisflow:nodejs docker-entrypoint.sh /usr/local/bin/ @@ -64,5 +40,5 @@ ENV PORT=5000 # Utiliser dumb-init pour gérer les signaux ENTRYPOINT ["dumb-init", "--"] -# Démarrer l'application avec le script d'entrée -CMD ["docker-entrypoint.sh", "node", "dist/index.js"] \ No newline at end of file +# Démarrer l'application avec tsx pour éviter les problèmes de build +CMD ["docker-entrypoint.sh", "npx", "tsx", "server/index.ts"] \ No newline at end of file diff --git a/attached_assets/image_1752092607974.png b/attached_assets/image_1752092607974.png new file mode 100644 index 0000000000000000000000000000000000000000..769781c155d51b535c1b3b3614bf4b0c41964850 GIT binary patch literal 21876 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 u%(x9t