FROM python:3.11-slim

ENV PYTHONUNBUFFERED=1 \
    PYTHONDONTWRITEBYTECODE=1 \
    RIPE_DATA_DIR=/data

WORKDIR /app

COPY requirements.txt constraints.txt ./
RUN pip install --no-cache-dir -c constraints.txt -r requirements.txt

# Все модули приложения из корня (тесты и прочее лежат в подкаталогах или исключены .dockerignore)
COPY *.py ./
# Забытый или сломанный модуль ломает сборку, а не запуск
RUN python -c "import api_server, collector_daemon, db, healthcheck"

# Без root; том /data создаётся с владельцем ripe (именованный том наследует его при первом создании)
RUN useradd --system --uid 10001 --no-create-home ripe \
    && mkdir /data && chown ripe /data
USER ripe
VOLUME /data

EXPOSE 8000

# exec-форма: SIGTERM доходит до процесса. Сборщик переопределяет команду в docker-compose.yml
CMD ["uvicorn", "api_server:app", "--host", "0.0.0.0", "--port", "8000"]
