From e509c0cfd1042a357a004b28aebf50142b800a73 Mon Sep 17 00:00:00 2001 From: Kenik Date: Sun, 26 Jul 2026 22:32:15 +0300 Subject: [PATCH] =?UTF-8?q?Docker:=20Dockerfile=20+=20docker-compose.yml?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=B1=D0=BE=D1=82=D0=B0=20=D0=B2=20=D0=BA=D0=BE=D0=BD?= =?UTF-8?q?=D1=82=D0=B5=D0=B9=D0=BD=D0=B5=D1=80=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Dockerfile (python:3.11-slim): установка зависимостей, запуск bot.py. - docker-compose.yml: авто-перезапуск (restart: unless-stopped), настройки из .env (env_file), база в именованном volume (данные не теряются при пересборке). - .dockerignore: в образ не тащим .git/тесты/докумен/базу/.env. - bot.py: путь к БД через DB_PATH (для volume в Docker), по умолчанию — как раньше. - requirements.txt: убраны неиспользуемые Pillow и openpyxl (образ легче). pytest passed. Co-Authored-By: Claude Opus 4.8 --- .dockerignore | 15 +++++++++++++++ Dockerfile | 22 ++++++++++++++++++++++ bot.py | 5 +++-- docker-compose.yml | 24 ++++++++++++++++++++++++ requirements.txt | 2 -- 5 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..308f04d --- /dev/null +++ b/.dockerignore @@ -0,0 +1,15 @@ +# В образ не нужны: +.git +.gitignore +__pycache__/ +*.pyc +*.log +bot.lock +bot_database.db +*.xlsx +data/ +tests/ +docs/ +help_img/_orig/ +# .env не копируем в образ — настройки прокидываются через env_file в docker-compose +.env diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..9bf5900 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,22 @@ +# Образ бота «Кибершкола БАЗА» (VK). Python 3.11. +FROM python:3.11-slim + +# Не писать .pyc, логи — сразу в вывод (docker logs) +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 + +WORKDIR /app + +# Сначала зависимости — так слой кэшируется и пересборка быстрее +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +# Код бота +COPY . . + +# Каталог для базы (монтируется как volume, чтобы данные не терялись) +RUN mkdir -p /app/data +ENV DB_PATH=/app/data/bot_database.db + +# Запуск бота (long poll, слушает VK) +CMD ["python", "-u", "bot.py"] diff --git a/bot.py b/bot.py index 193a84c..6e8fcee 100644 --- a/bot.py +++ b/bot.py @@ -34,8 +34,9 @@ logging.basicConfig( ) logger = logging.getLogger("VK_Bot_IKP") -# Инициализация базы данных сессий -db = DatabaseManager() +# Инициализация базы данных сессий. +# Путь можно переопределить через DB_PATH (нужно для Docker: база в volume). +db = DatabaseManager(os.getenv("DB_PATH") or "bot_database.db") # Анти-флуд: максимум сообщений от одного пользователя за окно времени FLOOD_MAX_MSGS = 12 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..9926435 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,24 @@ +# Запуск бота «Кибершкола БАЗА» в Docker. +# +# Быстрый старт (в папке с этим файлом): +# 1) Заполните .env (VK_TOKEN и VK_GROUP_ID — обязательно). +# 2) docker compose up -d --build # собрать и запустить в фоне +# 3) docker compose logs -f # смотреть логи (Ctrl+C — выйти из логов) +# Остановить: docker compose down +# Обновить код: git pull && docker compose up -d --build + +services: + bot: + build: . + image: baza-bot + container_name: baza-bot + restart: unless-stopped # авто-перезапуск при сбое и после ребута сервера + env_file: + - .env # настройки берутся из .env (токен, ID и пр.) + environment: + - DB_PATH=/app/data/bot_database.db + volumes: + - baza-bot-data:/app/data # база данных сохраняется между перезапусками + +volumes: + baza-bot-data: diff --git a/requirements.txt b/requirements.txt index b0f96ef..98b8560 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,2 @@ vk_api>=11.9 requests>=2.28 -openpyxl>=3.1 -Pillow>=10.0