# Build stage FROM node:20-slim AS builder WORKDIR /app # Copy dependency manifests COPY package*.json ./ # Install dependencies (including devDependencies for building) RUN npm ci # Copy application source COPY . . # Build production assets and bundle the TypeScript server RUN npm run build # Production runner stage FROM node:20-slim AS runner ENV NODE_ENV=production ENV PORT=7860 WORKDIR /app RUN chown node:node /app # Run as non-root 'node' user (UID 1000) for security and Hugging Face compatibility USER node # Copy built application assets and manifests COPY --chown=node:node --from=builder /app/package*.json ./ COPY --chown=node:node --from=builder /app/dist ./dist # Install production dependencies only RUN npm ci --omit=dev EXPOSE 7860 CMD ["npm", "start"]