NathanPereira's picture
Upload 7 files
9ccd45c verified
Raw
History Blame Contribute Delete
1.63 kB
# ---- Frontend build stage (React -> static files) ----
FROM node:20-slim AS frontend
WORKDIR /frontend
# Copy only manifest first for layer caching
COPY frontend/package*.json ./
RUN npm ci
COPY frontend/ ./
# Produces /frontend/dist (Vite) — change to build/ if you use CRA
RUN npm run build
# ---- Runtime stage (CUDA for imaging models on T4) ----
FROM nvidia/cuda:12.4.1-cudnn-runtime-ubuntu22.04
# System deps as root BEFORE creating the non-root user
RUN apt-get update && apt-get install -y --no-install-recommends \
python3.11 python3-pip python3.11-venv \
build-essential curl git ffmpeg libgl1 libglib2.0-0 \
&& rm -rf /var/lib/apt/lists/*
RUN ln -sf /usr/bin/python3.11 /usr/bin/python
# Spaces runs your container as UID 1000 — create the matching user
RUN useradd -m -u 1000 user
ENV HOME=/home/user \
PATH=/home/user/.local/bin:$PATH \
# Model/cache dir. Ephemeral on free tier — fine, models re-download on boot.
HF_HOME=/home/user/.cache/huggingface \
PYTHONUNBUFFERED=1
WORKDIR /app
# Python deps (do NOT run any GPU/nvidia-smi command here — no GPU at build time)
COPY --chown=user requirements.txt ./
RUN pip install --no-cache-dir --upgrade pip \
&& pip install --no-cache-dir -r requirements.txt
# App code
COPY --chown=user backend/ ./backend/
COPY --chown=user startup.sh ./startup.sh
# Built React static files from stage 1
COPY --chown=user --from=frontend /frontend/dist ./static
RUN chmod +x ./startup.sh && chown -R user:user /app
USER user
# Spaces exposes a single public port; must match app_port in README
EXPOSE 7860
CMD ["./startup.sh"]