FROM node:22-alpine AS builder WORKDIR /app # Installer pnpm RUN npm install -g pnpm # Copier les fichiers de dépendances COPY package.json pnpm-lock.yaml ./ COPY patches/ ./patches/ # Installer toutes les dépendances (y compris devDependencies pour le build) RUN pnpm install --frozen-lockfile # Copier les sources COPY . . # Variables d'environnement pour le build Vite (frontend) # Ces valeurs sont overridées par les ARG du docker-compose au moment du build ARG VITE_APP_ID="" ARG VITE_OAUTH_PORTAL_URL="" ARG VITE_APP_TITLE="SONUM" ARG VITE_APP_LOGO="" ARG VITE_ANALYTICS_ENDPOINT="" ARG VITE_ANALYTICS_WEBSITE_ID="" ARG VITE_FRONTEND_FORGE_API_KEY="" ARG VITE_FRONTEND_FORGE_API_URL="" ENV VITE_APP_ID=$VITE_APP_ID ENV VITE_OAUTH_PORTAL_URL=$VITE_OAUTH_PORTAL_URL ENV VITE_APP_TITLE=$VITE_APP_TITLE ENV VITE_APP_LOGO=$VITE_APP_LOGO ENV VITE_ANALYTICS_ENDPOINT=$VITE_ANALYTICS_ENDPOINT ENV VITE_ANALYTICS_WEBSITE_ID=$VITE_ANALYTICS_WEBSITE_ID ENV VITE_FRONTEND_FORGE_API_KEY=$VITE_FRONTEND_FORGE_API_KEY ENV VITE_FRONTEND_FORGE_API_URL=$VITE_FRONTEND_FORGE_API_URL # Build : Vite (frontend → dist/public) + esbuild (serveur → dist/index.js) RUN pnpm build # ── Stage production ────────────────────────────────────────────────────────── FROM node:22-alpine AS production WORKDIR /app RUN npm install -g pnpm # Copier les fichiers nécessaires COPY package.json pnpm-lock.yaml ./ COPY patches/ ./patches/ # Installer toutes les dépendances (vite est requis au runtime par le serveur Express) RUN pnpm install --frozen-lockfile # Copier les artefacts de build COPY --from=builder /app/dist ./dist # Copier les fichiers de configuration et le seed COPY drizzle.config.ts ./ COPY drizzle/ ./drizzle/ COPY seed-admin.mjs ./ COPY shared/ ./shared/ COPY server/ ./server/ EXPOSE 3000 # Démarrer le serveur et exécuter le seed admin CMD node seed-admin.mjs && node dist/index.js