# Backend image — FastAPI + SQLAlchemy async (asyncpg) # The PostgreSQL schema is managed by the postgres service (migration.sql + # seed.sql init scripts); this image only runs the API. FROM python:3.13-slim ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 WORKDIR /srv/backend # Dependencies first (layer caching) # PIP_INDEX_URL overridable (e.g. a China mirror) — default is official PyPI. ARG PIP_INDEX_URL=https://pypi.org/simple COPY requirements.txt . RUN pip install --no-cache-dir -i ${PIP_INDEX_URL} -r requirements.txt # Application COPY app ./app COPY tools ./tools EXPOSE 8000 CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]