# Multi-stage build для оптимизации размера образа FROM python:3.12-slim as builder # Устанавливаем зависимости для сборки RUN apt-get update && apt-get install -y \ gcc \ && rm -rf /var/lib/apt/lists/* # Создаем виртуальное окружение RUN python -m venv /opt/venv ENV PATH="/opt/venv/bin:$PATH" # Копируем requirements и устанавливаем зависимости COPY requirements.txt . RUN pip install --no-cache-dir --upgrade pip && \ pip install --no-cache-dir -r requirements.txt # Production stage FROM python:3.12-slim # Создаем пользователя для безопасности RUN groupadd -r quizbot && useradd -r -g quizbot quizbot # Устанавливаем системные зависимости RUN apt-get update && apt-get install -y \ sqlite3 \ && rm -rf /var/lib/apt/lists/* \ && apt-get clean # Копируем виртуальное окружение из builder stage COPY --from=builder /opt/venv /opt/venv ENV PATH="/opt/venv/bin:$PATH" # Создаем рабочую директорию WORKDIR /app # Создаем необходимые директории RUN mkdir -p /app/data /app/logs && \ chown -R quizbot:quizbot /app # Копируем код приложения COPY --chown=quizbot:quizbot . . # Устанавливаем права на выполнение RUN chmod +x /app/src/bot.py # Переключаемся на непривилегированного пользователя USER quizbot # Экспонируем порт для health check (если понадобится) EXPOSE 8080 # Health check HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \ CMD python -c "import sqlite3; conn = sqlite3.connect('/app/data/quiz_bot.db'); conn.close()" || exit 1 # Запускаем приложение CMD ["python", "-m", "src.bot"]