| # ββ Stage 1: Build ββββββββββββββββββββββββββββββββββββββββββββββ | |
| FROM node:20-alpine AS builder | |
| WORKDIR /app | |
| # Copy dependency files first for better layer caching | |
| COPY package.json package-lock.json* ./ | |
| RUN npm ci | |
| # Copy the rest of the source | |
| COPY . . | |
| # NEXT_PUBLIC_ vars must be available at build time | |
| ARG NEXT_PUBLIC_API_URL=https://your-backend.hf.space | |
| ENV NEXT_PUBLIC_API_URL=$NEXT_PUBLIC_API_URL | |
| RUN npm run build | |
| # ββ Stage 2: Runner ββββββββββββββββββββββββββββββββββββββββββββββ | |
| FROM node:20-alpine AS runner | |
| WORKDIR /app | |
| ENV NODE_ENV=production | |
| # Hugging Face Spaces requires the app to listen on port 7860 | |
| ENV PORT=7860 | |
| ENV HOSTNAME=0.0.0.0 | |
| # Only copy what is needed at runtime | |
| COPY --from=builder /app/public ./public | |
| COPY --from=builder /app/.next/standalone ./ | |
| COPY --from=builder /app/.next/static ./.next/static | |
| EXPOSE 7860 | |
| CMD ["node", "server.js"] | |