Data-Science-Agent / Dockerfile.spaces
Pulastya B
feat: Migrate to HuggingFace Spaces for 16GB free RAM
09cd93c
# ===============================
# HuggingFace Spaces Dockerfile
# ===============================
# Optimized for 16GB RAM, Port 7860
# ===============================
# Stage 1: Build Frontend
# ===============================
FROM node:20-alpine AS frontend-builder
WORKDIR /frontend
COPY FRRONTEEEND/package*.json ./
RUN npm install
COPY FRRONTEEEND/ ./
RUN npm run build
# ===============================
# Stage 2: Build Python environment
# ===============================
FROM python:3.12-slim AS builder
# Install build dependencies (needed for ML wheels)
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc \
g++ \
make \
&& rm -rf /var/lib/apt/lists/*
# Create virtual environment
RUN python -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
# Upgrade pip tooling
RUN pip install --upgrade pip setuptools wheel
# Install Python dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# ===============================
# Stage 3: Runtime environment
# ===============================
FROM python:3.12-slim
# Install runtime shared libraries
RUN apt-get update && apt-get install -y --no-install-recommends \
libgomp1 \
libstdc++6 \
&& rm -rf /var/lib/apt/lists/*
# Copy virtual environment
COPY --from=builder /opt/venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
# Create non-root user for HuggingFace Spaces
RUN useradd -m -u 1000 user
USER user
# App working directory
WORKDIR /home/user/app
# Copy backend code (as user)
COPY --chown=user:user src/ ./src/
COPY --chown=user:user examples/ ./examples/
# Copy frontend build
COPY --from=frontend-builder --chown=user:user /frontend/dist ./FRRONTEEEND/dist
# HuggingFace Spaces directories (user-writable)
RUN mkdir -p \
/home/user/app/data \
/home/user/app/outputs/models \
/home/user/app/outputs/plots \
/home/user/app/outputs/reports \
/home/user/app/outputs/data \
/home/user/app/cache_db
# Environment variables for HuggingFace Spaces
ENV PYTHONUNBUFFERED=1
ENV PORT=7860
ENV OUTPUT_DIR=/home/user/app/outputs
ENV CACHE_DB_PATH=/home/user/app/cache_db/cache.db
ENV ARTIFACT_BACKEND=local
# HuggingFace Spaces uses port 7860 by default
EXPOSE 7860
# Start FastAPI on port 7860
CMD ["uvicorn", "src.api.app:app", "--host", "0.0.0.0", "--port", "7860"]