Docker: Dockerfile + docker-compose.yml для запуска бота в контейнере

- 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 <noreply@anthropic.com>
This commit is contained in:
Kenik
2026-07-26 22:32:15 +03:00
parent 8f3c3b8b83
commit e509c0cfd1
5 changed files with 64 additions and 4 deletions
+15
View File
@@ -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
+22
View File
@@ -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"]
+3 -2
View File
@@ -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
+24
View File
@@ -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:
-2
View File
@@ -1,4 +1,2 @@
vk_api>=11.9
requests>=2.28
openpyxl>=3.1
Pillow>=10.0