# Dockerfile для ЕГЭ Парсера ФИПИ # Multi-stage build для оптимизации размера FROM python:3.10-slim as base # Рабочая директория WORKDIR /app # Переменные окружения ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PIP_NO_CACHE_DIR=1 \ PIP_DISABLE_PIP_VERSION_CHECK=1 \ TRANSFORMERS_CACHE=/tmp/transformers \ HF_HOME=/tmp/huggingface # Установка системных зависимостей RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ && rm -rf /var/lib/apt/lists/* # Копирование requirements COPY requirements.txt . # Установка Python зависимостей (кэширование слоя) RUN pip install --no-cache-dir -r requirements.txt # Копирование кода COPY . . # Загрузка spaCy модели RUN python -m spacy download ru_core_news_md || true # Порт по умолчанию EXPOSE 7860 # Команда запуска CMD ["python", "app.py"] # ============================================================ # Development stage (опционально) # ============================================================ FROM base as dev # Установка dev зависимостей RUN pip install pytest pytest-cov black flake8 mypy # Команда для разработки CMD ["python", "-m", "uvicorn", "app:app", "--reload", "--host", "0.0.0.0", "--port", "7860"] # ============================================================ # Production stage (опционально) # ============================================================ FROM base as prod # Создание не-root пользователя RUN useradd -m -u 1000 appuser && \ chown -R appuser:appuser /app USER appuser # Production команда CMD ["python", "-m", "uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860", "--workers", "4"]