# ── Stage 1: Build ───────────────────────────────────────────────────── FROM node:22-alpine AS builder WORKDIR /app ENV NEXT_PUBLIC_SUPABASE_URL="" \ 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 NEXT_PUBLIC_SUPABASE_URL=${NEXT_PUBLIC_SUPABASE_URL} \ NEXT_PUBLIC_SUPABASE_ANON_KEY=${NEXT_PUBLIC_SUPABASE_ANON_KEY} \ next 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 /app/public ./public 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"]