FROM python:3.12-slim AS base

# uv binary (тот же приём, что и backend/Dockerfile).
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /usr/local/bin/

WORKDIR /app

ENV UV_COMPILE_BYTECODE=1 \
    UV_LINK_MODE=copy \
    PYTHONUNBUFFERED=1

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

COPY exporter.py ./

# Непривилегированный пользователь — сокет Docker сервис не видит вообще
# (доступ только к socket-proxy по сети compose), но принцип наименьших
# привилегий соблюдаем и здесь.
RUN useradd --no-create-home --shell /usr/sbin/nologin exporter
USER exporter

EXPOSE 9419

HEALTHCHECK --interval=10s --timeout=5s --retries=10 --start-period=15s \
    CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:9419/health')" || exit 1

# Не `uv run` — тому нужен писабельный кэш в $HOME, а у непривилегированного
# пользователя без домашней директории (--no-create-home выше) его нет;
# зависимости уже установлены в .venv на шаге сборки, `uv run` в рантайме
# не добавляет ничего, кроме этой проблемы.
CMD [".venv/bin/python", "exporter.py"]
