| # Stage 1: Build the full application | |
| FROM node:20-bookworm AS builder | |
| # Set build-time directory | |
| WORKDIR /app | |
| # Copy all source files | |
| COPY . . | |
| # Install all dependencies and build | |
| RUN npm ci && npm run build | |
| # Stage 2: Final Runtime Image | |
| FROM node:20-bookworm-slim | |
| # Install runtime dependencies: Redis, Java, and Python | |
| RUN apt-get update && apt-get install -y \ | |
| python3 \ | |
| openjdk-17-jdk \ | |
| redis-server \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # Set runtime working directory | |
| WORKDIR /app | |
| # Copy EVERYTHING from builder (including dist and node_modules) | |
| # to ensure workspace symlinks and dependencies are preserved exactly. | |
| COPY --from=builder /app . | |
| # Ensure the startup script is executable | |
| RUN chmod +x ./scripts/start-hf.sh | |
| # Environment variables for Hugging Face | |
| ENV NODE_ENV=production | |
| # Hugging Face usually provides PORT, but we default to 7860 | |
| ENV PORT=7860 | |
| ENV CLIENT_URL=* | |
| ENV REDIS_URL=redis://localhost:6379 | |
| # Expose the HF port | |
| EXPOSE 7860 | |
| # Use the robust startup script | |
| CMD ["./scripts/start-hf.sh"] | |