Spaces:
Sleeping
Sleeping
| # syntax = docker/dockerfile:1.9-labs # ← обязательно для --mount=type=cache,link | |
| # ──────────────────────────────────────────────── | |
| # Стадия 1 — сборка зависимостей (builder) | |
| # ──────────────────────────────────────────────── | |
| FROM python:3.13-slim AS builder | |
| ENV PYTHONUNBUFFERED=1 \ | |
| PYTHONDONTWRITEBYTECODE=1 \ | |
| PIP_NO_CACHE_DIR=off \ | |
| UV_COMPILE_BYTECODE=1 \ | |
| UV_LINK_MODE=copy \ | |
| HF_HOME=/app/hf_cache | |
| WORKDIR /app | |
| # Копируем только lock-файлы / requirements (самое важное!) | |
| COPY pyproject.toml uv.lock requirements.txt* ./ | |
| # Устанавливаем uv (самый быстрый installer в 2026) | |
| RUN --mount=type=cache,target=/root/.cache/uv \ | |
| pip install --no-cache-dir uv && \ | |
| uv sync --frozen --no-install-project --no-dev | |
| ENV PATH="/app/.venv/bin:$PATH" | |
| # ------------------- ЗАГРУЗКА МОДЕЛИ ------------------- | |
| # Теперь, когда зависимости установлены, скачиваем модель эмбеддингов | |
| # (эта команда сохранит файлы в $HF_HOME) | |
| RUN python -c "from sentence_transformers import SentenceTransformer; SentenceTransformer('deepvk/USER-bge-m3')" | |
| # ------------------------------------------------------- | |
| # ──────────────────────────────────────────────── | |
| # Стадия 2 — финальный образ (runtime) | |
| # ──────────────────────────────────────────────── | |
| FROM python:3.13-slim | |
| ENV PYTHONUNBUFFERED=1 \ | |
| PYTHONDONTWRITEBYTECODE=1 \ | |
| HF_HOME=/app/hf_cache | |
| WORKDIR /app | |
| # Копируем виртуальное окружение из builder | |
| COPY --from=builder /app/.venv /app/.venv | |
| # Копируем папку с загруженной моделью | |
| COPY --from=builder /app/hf_cache /app/hf_cache | |
| # Добавляем venv в PATH | |
| ENV PATH="/app/.venv/bin:$PATH" | |
| # Копируем весь код (самое последнее!) | |
| COPY . . | |
| CMD ["python", "main.py"] |