# ============================================ # Stage 1: Dependencies # ============================================ ARG NODE_VERSION=24.13.0-slim FROM node:${NODE_VERSION} AS dependencies WORKDIR /app COPY package.json package-lock.json* ./ RUN --mount=type=cache,target=/root/.npm \ npm ci --no-audit --no-fund # ============================================ # Stage 2: Build (standalone output) # ============================================ FROM node:${NODE_VERSION} AS builder WORKDIR /app COPY --from=dependencies /app/node_modules ./node_modules COPY . . ENV NODE_ENV=production # Variables publiques inlinées dans le bundle JS au build — à fournir comme # "Build Variables" dans Coolify (Application > Environment Variables). ARG NEXT_PUBLIC_SUPABASE_URL ARG NEXT_PUBLIC_SUPABASE_ANON_KEY ENV NEXT_PUBLIC_SUPABASE_URL=${NEXT_PUBLIC_SUPABASE_URL} ENV NEXT_PUBLIC_SUPABASE_ANON_KEY=${NEXT_PUBLIC_SUPABASE_ANON_KEY} RUN npm run build # ============================================ # Stage 3: Run # ============================================ FROM node:${NODE_VERSION} AS runner WORKDIR /app ENV NODE_ENV=production ENV PORT=3000 ENV HOSTNAME="0.0.0.0" COPY --from=builder --chown=node:node /app/public ./public RUN mkdir .next && chown node:node .next COPY --from=builder --chown=node:node /app/.next/standalone ./ COPY --from=builder --chown=node:node /app/.next/static ./.next/static USER node EXPOSE 3000 CMD ["node", "server.js"]