| FROM python:3.11-slim AS builder |
|
|
| ENV PYTHONDONTWRITEBYTECODE=1 \ |
| PYTHONUNBUFFERED=1 \ |
| PIP_NO_CACHE_DIR=1 \ |
| UV_LINK_MODE=copy \ |
| UV_PROJECT_ENVIRONMENT=/opt/venv |
|
|
| RUN apt-get update && apt-get install -y --no-install-recommends \ |
| build-essential \ |
| curl \ |
| && rm -rf /var/lib/apt/lists/* |
|
|
| COPY --from=ghcr.io/astral-sh/uv:0.5.11 /uv /usr/local/bin/uv |
|
|
| WORKDIR /app |
|
|
| COPY pyproject.toml uv.lock ./ |
| COPY src ./src |
|
|
| RUN uv sync --frozen --no-dev |
|
|
|
|
| FROM python:3.11-slim AS runtime |
|
|
| ENV PYTHONDONTWRITEBYTECODE=1 \ |
| PYTHONUNBUFFERED=1 \ |
| PATH="/opt/venv/bin:$PATH" \ |
| SADAR_PROCESSED_DIR=/app/data/processed \ |
| SADAR_MODELS_DIR=/app/models \ |
| SADAR_REPORTS_DIR=/app/reports \ |
| SADAR_SERVE_CONFIG=/app/configs/serve.yaml |
|
|
| RUN apt-get update && apt-get install -y --no-install-recommends \ |
| libgomp1 \ |
| curl \ |
| && rm -rf /var/lib/apt/lists/* \ |
| && groupadd --system --gid 1000 sadar \ |
| && useradd --system --uid 1000 --gid sadar --create-home sadar |
|
|
| WORKDIR /app |
|
|
| COPY --from=builder /opt/venv /opt/venv |
| COPY --from=builder /app/src /app/src |
|
|
| COPY configs ./configs |
| COPY pyproject.toml ./ |
|
|
| RUN mkdir -p /app/data/processed /app/models /app/reports \ |
| && chown -R sadar:sadar /app |
|
|
| USER sadar |
|
|
| EXPOSE 8000 |
|
|
| HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \ |
| CMD curl -fsS http://localhost:8000/api/health || exit 1 |
|
|
| CMD ["uvicorn", "sadar.serve.app:app", "--host", "0.0.0.0", "--port", "8000"] |
|
|