# Multi-stage Dockerfile for Neural Network Quantizer # Builds frontend and serves with FastAPI backend # ============================================ # Stage 1: Build Frontend # ============================================ FROM node:20-alpine AS frontend-build WORKDIR /app/frontend # Copy package files COPY frontend/package*.json ./ # Install dependencies RUN npm ci # Copy frontend source COPY frontend/ ./ # Build production bundle RUN npm run build # ============================================ # Stage 2: Python Backend + Frontend # ============================================ FROM python:3.11-slim # Set environment variables ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 # Create non-root user first RUN useradd -m -u 1000 user WORKDIR /app # Install system dependencies RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ curl \ && rm -rf /var/lib/apt/lists/* # Copy backend requirements COPY backend/requirements.txt ./requirements.txt # Install Python dependencies RUN pip install --no-cache-dir -r requirements.txt # Copy backend code with ownership COPY --chown=user backend/ ./backend/ # Copy frontend build with ownership COPY --chown=user --from=frontend-build /app/frontend/dist ./frontend/dist # Copy HuggingFace Spaces entry point COPY --chown=user app.py ./ # Switch to non-root user USER user ENV HOME=/home/user ENV PATH=/home/user/.local/bin:$PATH # Expose port EXPOSE 7860 # Health check HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD curl -f http://localhost:7860/api/health || exit 1 # Start the application CMD ["python", "-m", "uvicorn", "backend.api.main:app", "--host", "0.0.0.0", "--port", "7860"]