Добавлен Docker Compose для простого развёртывания

Создано:
- Dockerfile для контейнеризации бота
- docker-compose.yml с сервисами bot и db
- .dockerignore для оптимизации образа
- README_DOCKER.md с подробной документацией

Изменено:
- README.md - добавлена секция Docker
- .env.example - добавлены переменные PostgreSQL

Теперь бот можно запустить одной командой:
docker-compose up -d

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-12-04 11:16:14 +03:00
parent 1a02c979d0
commit f7847226d0
6 changed files with 314 additions and 3 deletions

46
.dockerignore Normal file
View File

@@ -0,0 +1,46 @@
# Git
.git
.gitignore
# Python
__pycache__
*.pyc
*.pyo
*.pyd
.Python
*.so
*.egg
*.egg-info
dist
build
.venv
venv
env
# IDE
.vscode
.idea
*.swp
*.swo
*~
# Environment
.env
# Logs
logs
*.log
# Database
*.db
*.sqlite3
# Documentation
TZ.md
README.md
промпт.txt
# Docker
Dockerfile
docker-compose.yml
.dockerignore

View File

@@ -4,8 +4,13 @@ BOT_TOKEN=your_telegram_bot_token_here
# OpenAI API Key
OPENAI_API_KEY=your_openai_api_key_here
# Database
DATABASE_URL=postgresql+asyncpg://user:password@localhost:5432/language_bot
# Database (для локального запуска)
DATABASE_URL=postgresql+asyncpg://botuser:botpassword@localhost:5432/language_bot
# PostgreSQL настройки (для Docker)
POSTGRES_USER=botuser
POSTGRES_PASSWORD=botpassword
POSTGRES_DB=language_bot
# Settings
DEBUG=True

22
Dockerfile Normal file
View File

@@ -0,0 +1,22 @@
FROM python:3.11-slim
# Установка рабочей директории
WORKDIR /app
# Установка зависимостей системы
RUN apt-get update && apt-get install -y \
gcc \
postgresql-client \
&& rm -rf /var/lib/apt/lists/*
# Копирование файла зависимостей
COPY requirements.txt .
# Установка Python зависимостей
RUN pip install --no-cache-dir -r requirements.txt
# Копирование кода приложения
COPY . .
# Команда запуска
CMD ["python", "main.py"]

View File

@@ -21,7 +21,31 @@
## Установка и запуск
### 1. Клонирование репозитория
### 🐳 Docker Compose (рекомендуется)
```bash
# Клонировать репозиторий
git clone http://103.137.249.134:3000/NANDI/tg_bot_language.git
cd tg_bot_language
# Настроить .env
cp .env.example .env
# Отредактируйте .env и добавьте BOT_TOKEN и OPENAI_API_KEY
# Запустить
docker-compose up -d
# Проверить логи
docker-compose logs -f bot
```
📖 Подробная инструкция: [README_DOCKER.md](README_DOCKER.md)
---
### Локальная установка
#### 1. Клонирование репозитория
```bash
git clone http://103.137.249.134:3000/NANDI/tg_bot_language.git

174
README_DOCKER.md Normal file
View File

@@ -0,0 +1,174 @@
# 🐳 Запуск через Docker Compose
## Быстрый старт
1. **Клонировать репозиторий:**
```bash
git clone http://103.137.249.134:3000/NANDI/tg_bot_language.git
cd tg_bot_language
```
2. **Настроить переменные окружения:**
```bash
cp .env.example .env
nano .env # или используйте любой редактор
```
Заполните обязательные поля в `.env`:
```env
BOT_TOKEN=ваш_telegram_bot_token
OPENAI_API_KEY=ваш_openai_api_key
```
3. **Запустить:**
```bash
docker-compose up -d
```
4. **Проверить логи:**
```bash
docker-compose logs -f bot
```
## Управление
### Запуск
```bash
docker-compose up -d
```
### Остановка
```bash
docker-compose down
```
### Перезапуск
```bash
docker-compose restart
```
### Пересборка после изменений
```bash
docker-compose up -d --build
```
### Просмотр логов
```bash
# Все сервисы
docker-compose logs -f
# Только бот
docker-compose logs -f bot
# Только база данных
docker-compose logs -f db
```
### Статус контейнеров
```bash
docker-compose ps
```
## Работа с базой данных
### Подключение к PostgreSQL
```bash
docker-compose exec db psql -U botuser -d language_bot
```
### Бэкап базы данных
```bash
docker-compose exec db pg_dump -U botuser language_bot > backup.sql
```
### Восстановление из бэкапа
```bash
docker-compose exec -T db psql -U botuser language_bot < backup.sql
```
## Структура Docker
### Сервисы
- **db** - PostgreSQL 15 (база данных)
- Порт: 5432
- Volume: `postgres_data` для персистентности
- Health check для проверки готовности
- **bot** - Telegram бот (Python приложение)
- Зависит от `db`
- Автоматический рестарт
- Логи в `./logs`
### Volumes
- `postgres_data` - данные PostgreSQL (персистентные)
- `./logs` - логи бота (на хосте)
## Переменные окружения
Полный список переменных в `.env`:
```env
# Обязательные
BOT_TOKEN=your_token # Токен от @BotFather
OPENAI_API_KEY=your_key # API ключ OpenAI
# PostgreSQL (можно оставить по умолчанию)
POSTGRES_USER=botuser
POSTGRES_PASSWORD=botpassword
POSTGRES_DB=language_bot
# Настройки
DEBUG=True
```
## Troubleshooting
### Бот не запускается
1. Проверьте логи:
```bash
docker-compose logs bot
```
2. Проверьте, что база данных запущена:
```bash
docker-compose ps db
```
3. Проверьте переменные окружения в `.env`
### База данных недоступна
```bash
# Проверить статус
docker-compose ps db
# Перезапустить базу
docker-compose restart db
# Проверить логи
docker-compose logs db
```
### Очистка и полный перезапуск
```bash
# Остановить и удалить контейнеры
docker-compose down
# Удалить volumes (ВНИМАНИЕ: удалит все данные!)
docker-compose down -v
# Пересобрать и запустить
docker-compose up -d --build
```
## Production рекомендации
1. **Изменить пароли БД** в `.env`
2. **Отключить DEBUG**: `DEBUG=False`
3. **Настроить регулярные бэкапы** БД
4. **Использовать Docker secrets** для чувствительных данных
5. **Настроить мониторинг** логов и метрик

40
docker-compose.yml Normal file
View File

@@ -0,0 +1,40 @@
version: '3.8'
services:
db:
image: postgres:15-alpine
container_name: language_bot_db
restart: unless-stopped
environment:
POSTGRES_USER: ${POSTGRES_USER:-botuser}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-botpassword}
POSTGRES_DB: ${POSTGRES_DB:-language_bot}
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-botuser}"]
interval: 10s
timeout: 5s
retries: 5
bot:
build: .
container_name: language_bot
restart: unless-stopped
depends_on:
db:
condition: service_healthy
environment:
BOT_TOKEN: ${BOT_TOKEN}
OPENAI_API_KEY: ${OPENAI_API_KEY}
DATABASE_URL: postgresql+asyncpg://${POSTGRES_USER:-botuser}:${POSTGRES_PASSWORD:-botpassword}@db:5432/${POSTGRES_DB:-language_bot}
DEBUG: ${DEBUG:-False}
volumes:
- ./logs:/app/logs
env_file:
- .env
volumes:
postgres_data: