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")
|
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
|
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
|
vk_api>=11.9
|
||||||
requests>=2.28
|
requests>=2.28
|
||||||
openpyxl>=3.1
|
|
||||||
Pillow>=10.0
|
|
||||||
|
|||||||
Reference in New Issue
Block a user