# Базовый образ с Python 3.10 выбран для совместимости с современными версиями # библиотек машинного обучения и с окружением Hugging Face Spaces. FROM python:3.10-slim # Переменные отключают TensorFlow внутри transformers. # Приложение использует PyTorch, а TensorFlow для модели классификации не требуется. ENV USE_TF=0 \ USE_TORCH=1 \ TRANSFORMERS_NO_TF=1 \ TOKENIZERS_PARALLELISM=false \ PYTHONUNBUFFERED=1 \ PIP_NO_CACHE_DIR=1 \ HF_HOME=/home/user/.cache/huggingface \ TRANSFORMERS_CACHE=/home/user/.cache/huggingface/transformers \ SENTENCE_TRANSFORMERS_HOME=/home/user/.cache/torch/sentence_transformers \ PORT=7860 # Рабочая папка приложения внутри контейнера. WORKDIR /app # Устанавливаем системные библиотеки, необходимые для scikit-learn, scipy и PyTorch. RUN apt-get update \ && apt-get install -y --no-install-recommends libgomp1 \ && rm -rf /var/lib/apt/lists/* # Сначала копируем файл зависимостей, чтобы Docker мог переиспользовать слой установки # при изменении только кода приложения. COPY requirements.txt . # Устанавливаем CPU-версию PyTorch отдельно, чтобы контейнер не загружал лишние # графические зависимости. Затем устанавливаем остальные библиотеки приложения. RUN pip install --upgrade pip \ && pip install torch==2.3.1 --index-url https://download.pytorch.org/whl/cpu \ && pip install -r requirements.txt # Копируем код приложения, шаблоны, стили и папки для модели и результатов. COPY . . # Создаем непривилегированного пользователя. Такой запуск безопаснее, чем работа от root. RUN useradd -m -u 1000 user \ && chown -R user:user /app /home/user USER user # Hugging Face Docker Spaces по умолчанию направляет внешний трафик на порт 7860. EXPOSE 7860 # Gunicorn запускает Flask-приложение как сервер для размещения. # Один рабочий процесс выбран из-за модели смысловых векторов, которая занимает память. CMD ["gunicorn", "-c", "gunicorn_conf.py", "app:app"]