# Docker image for Hugging Face Spaces (Docker SDK) — free, no card, 16GB RAM. # Listens on 7860 (HF default). DB is external (Neon Postgres) via DATABASE_URL. FROM python:3.12-slim ENV PYTHONUNBUFFERED=1 \ PIP_NO_CACHE_DIR=1 \ UV_LINK_MODE=copy \ HF_HOME=/app/.cache/hf \ PORT=7860 # HF Spaces run containers as UID 1000. RUN useradd -m -u 1000 user RUN pip install --no-cache-dir uv WORKDIR /app COPY --chown=user:user pyproject.toml uv.lock ./ RUN uv sync --frozen --no-dev && chown -R user:user /app COPY --chown=user:user . . RUN chown -R user:user /app USER user # Pre-download the embedding model into the image so cold starts are fast. RUN uv run python -c "from app.embeddings import _get_model; _get_model()" EXPOSE 7860 CMD ["sh", "-c", "uv run alembic upgrade head && uv run uvicorn app.main:app --host 0.0.0.0 --port ${PORT:-7860}"]