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:
@@ -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
@@ -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"]
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
@@ -1,4 +1,2 @@
|
||||
vk_api>=11.9
|
||||
requests>=2.28
|
||||
openpyxl>=3.1
|
||||
Pillow>=10.0
|
||||
|
||||
Reference in New Issue
Block a user