FROM python:3.12-slim

COPY --from=ghcr.io/astral-sh/uv:0.11 /uv /uvx /bin/

WORKDIR /app

ENV DATA_FOLDER=/app/data
ENV PYTHONUNBUFFERED=1
ENV PATH="/app/.venv/bin:$PATH"

COPY pyproject.toml uv.lock ./
RUN uv sync --locked --no-dev --no-install-project

COPY . /app
RUN mkdir -p "$DATA_FOLDER"

EXPOSE 8000

# Keep one worker: service lifecycle state is local to the process.
CMD ["gunicorn", "-w", "1", "-b", "0.0.0.0:8000", "main:app"]
