FROM node:20-alpine AS base ENV NEXT_TELEMETRY_DISABLED=1 FROM base AS deps WORKDIR /app RUN apk add --no-cache libc6-compat COPY package.json package-lock.json ./ RUN npm ci --legacy-peer-deps FROM base AS builder WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . . # Hugging Face Space Variables are available as Docker build args. # NEXT_PUBLIC_* values must be present during `next build` for client code. ARG NEXT_PUBLIC_EMAILJS_SERVICE_ID ARG NEXT_PUBLIC_EMAILJS_TEMPLATE_ID ARG NEXT_PUBLIC_EMAILJS_PUBLIC_KEY ENV NEXT_PUBLIC_EMAILJS_SERVICE_ID=${NEXT_PUBLIC_EMAILJS_SERVICE_ID} ENV NEXT_PUBLIC_EMAILJS_TEMPLATE_ID=${NEXT_PUBLIC_EMAILJS_TEMPLATE_ID} ENV NEXT_PUBLIC_EMAILJS_PUBLIC_KEY=${NEXT_PUBLIC_EMAILJS_PUBLIC_KEY} RUN npm run build FROM base AS runner WORKDIR /app ENV NODE_ENV=production ENV NEXT_TELEMETRY_DISABLED=1 ENV PORT=7860 ENV HOSTNAME=0.0.0.0 COPY --from=builder --chown=node:node /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 7860 HEALTHCHECK --interval=30s --timeout=5s --start-period=30s --retries=3 \ CMD wget -qO- http://127.0.0.1:7860/ || exit 1 CMD ["node", "server.js"]