Добавлен 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:
46
.dockerignore
Normal file
46
.dockerignore
Normal 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
|
||||
@@ -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
22
Dockerfile
Normal 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"]
|
||||
26
README.md
26
README.md
@@ -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
174
README_DOCKER.md
Normal 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
40
docker-compose.yml
Normal 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:
|
||||
Reference in New Issue
Block a user