# ── Stage 1: Build ───────────────────────────────────────────────────── FROM node:22-alpine AS builder WORKDIR /app ARG NEXT_PUBLIC_SUPABASE_URL ARG NEXT_PUBLIC_SUPABASE_ANON_KEY ENV NEXT_PUBLIC_SUPABASE_URL=${NEXT_PUBLIC_SUPABASE_URL} \ NEXT_PUBLIC_SUPABASE_ANON_KEY=${NEXT_PUBLIC_SUPABASE_ANON_KEY} COPY package.json package-lock.json* yarn.lock* pnpm-lock.yaml* ./ RUN corepack enable && \ if [ -f pnpm-lock.yaml ]; then \ corepack prepare pnpm@latest --activate; \ pnpm install --frozen-lockfile; \ elif [ -f yarn.lock ]; then \ yarn install --frozen-lockfile; \ else \ npm ci; \ fi COPY . . RUN npm run build # ── Stage 2: Production runtime ──────────────────────────────────────── FROM node:22-alpine AS runner WORKDIR /app ENV NODE_ENV=production \ NEXT_TELEMETRY_DISABLED=1 \ PORT=3000 \ HOSTNAME="0.0.0.0" 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"]