FROM python:3.12-slim AS builder ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ UV_LINK_MODE=copy WORKDIR /app COPY --from=ghcr.io/astral-sh/uv:0.5.24 /uv /uvx /bin/ COPY pyproject.toml uv.lock README.md ./ RUN uv sync --frozen --no-dev --no-install-project COPY src ./src COPY prompts ./prompts RUN uv sync --frozen --no-dev FROM python:3.12-slim AS runtime ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PATH="/app/.venv/bin:$PATH" \ PYTHONPATH="/app/src" \ UPLOAD_DIR="/app/uploads" \ PROMPT_DIR="/app/prompts" WORKDIR /app RUN groupadd --system --gid 1001 appgroup \ && useradd --system --uid 1001 --gid appgroup --create-home appuser COPY --from=builder /app/.venv /app/.venv COPY --from=builder /app/src /app/src COPY --from=builder /app/prompts /app/prompts RUN mkdir -p /app/uploads /app/data \ && chown -R appuser:appgroup /app USER appuser EXPOSE 8000 HEALTHCHECK --interval=30s --timeout=3s --start-period=3s --retries=3 \ CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/healthz')" CMD ["uvicorn", "transcription.app:create_app", "--factory", "--host", "0.0.0.0", "--port", "8000", "--proxy-headers"]