# Multi-stage production Dockerfile for MedOS Global on HF Spaces # Optimized for Next.js 14 standalone output # Stage 1: Install ALL dependencies (including devDeps for build) FROM node:18-alpine AS deps WORKDIR /app COPY package.json ./ RUN npm install --legacy-peer-deps && npm cache clean --force # Stage 2: Build the application FROM node:18-alpine AS builder WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . . ENV NEXT_TELEMETRY_DISABLED=1 ENV NODE_ENV=production RUN npm run build # Stage 3: Production runner (lean image) FROM node:18-alpine AS runner WORKDIR /app ENV NODE_ENV=production ENV NEXT_TELEMETRY_DISABLED=1 # HF Spaces REQUIRES port 7860 ENV PORT=7860 ENV HOSTNAME=0.0.0.0 RUN addgroup --system --gid 1001 nodejs && \ adduser --system --uid 1001 nextjs # Copy public assets COPY --from=builder /app/public ./public # Copy standalone build (includes server + minimal node_modules) COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static # Copy data files (health topics, medical KB) COPY --from=builder --chown=nextjs:nodejs /app/data ./data USER nextjs EXPOSE 7860 HEALTHCHECK --interval=30s --timeout=10s --start-period=90s --retries=3 \ CMD wget --no-verbose --tries=1 --spider http://localhost:7860/api/health || exit 1 CMD ["node", "server.js"]