# syntax=docker/dockerfile:1
# DUB-AI: HTTP-сервис определения дорожек озвучки (FastAPI), CPU.
#
#   python tools/pack_models.py --stage docker-models     # положить модели в образ (необязательно)
#   docker build -t dub-ai .
#
# Без шага pack_models образ собирается без моделей — тогда смонтируйте каталог: -v ./models:/app/models:ro
FROM python:3.12-slim

ENV PYTHONUNBUFFERED=1 \
    PYTHONDONTWRITEBYTECODE=1 \
    PIP_NO_CACHE_DIR=1 \
    PIP_DISABLE_PIP_VERSION_CHECK=1 \
    HF_HUB_OFFLINE=1 \
    TRANSFORMERS_OFFLINE=1 \
    TOKENIZERS_PARALLELISM=false \
    DUB_HOST=0.0.0.0 \
    DUB_PORT=8000 \
    DUB_MODEL_DIR=/app/models/best \
    DUB_SEGMENTER_DIR=/app/models/segmenter

WORKDIR /app

# torch без CUDA: образ в разы легче, на VPS GPU нет
RUN pip install torch==2.11.0 --index-url https://download.pytorch.org/whl/cpu
COPY requirements-service.txt .
RUN pip install -r requirements-service.txt

COPY src/ src/
COPY docker-models/models/ models/

RUN useradd --system --uid 10001 --no-create-home dub
USER dub

EXPOSE 8000
HEALTHCHECK --interval=30s --timeout=5s --start-period=120s --retries=3 \
    CMD python -c "import os,urllib.request as u; u.urlopen('http://127.0.0.1:%s/health' % os.environ.get('DUB_PORT','8000'), timeout=4)"

CMD ["python", "-m", "src.service"]
