- bot.py: создан класс BotRunner (bot, stop_event, bot_ready, scheduler) - bot.py: добавлена _validate_config() — проверка MORNING_TIME (ЧЧ:ММ) и MORNING_CHANNEL_ID (int) - bot.py: убраны все глобальные переменные - Dockerfile: healthcheck через ps aux (проверка процесса python bot.py) - docker-compose.yml: добавлен MORNING_CHANNEL_ID - ISSUES.md: закрыто 3 задачи (валидация конфига, инкапсуляция, multi-stage) - tests/test_bot.py: адаптирован тест под BotRunner
28 lines
970 B
Docker
28 lines
970 B
Docker
ARG PYTHON_VERSION=3.14
|
|
FROM python:${PYTHON_VERSION}-slim
|
|
|
|
WORKDIR /app
|
|
|
|
# Устанавливаем зависимости и утилиту ps для healthcheck
|
|
COPY requirements.txt .
|
|
RUN pip install --no-cache-dir -r requirements.txt && \
|
|
apt-get update && apt-get install -y --no-install-recommends procps && \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
# Копируем только нужные файлы (оптимизация размера образа)
|
|
COPY bot.py .
|
|
COPY commands/ commands/
|
|
COPY utils/ utils/
|
|
COPY console_commands/ console_commands
|
|
|
|
# .env передаётся через docker-compose environment:
|
|
# DISCORD_TOKEN=${DISCORD_TOKEN}
|
|
# MORNING_TIME=${MORNING_TIME:-07:00}
|
|
|
|
# Healthcheck: проверяем, что процесс бота жив
|
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
|
|
CMD ps aux | grep -v grep | grep -q "python bot.py" || exit 1
|
|
|
|
# Запускаем бота
|
|
CMD ["python", "bot.py"]
|