Добавлен 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
|
||||||
OPENAI_API_KEY=your_openai_api_key_here
|
OPENAI_API_KEY=your_openai_api_key_here
|
||||||
|
|
||||||
# Database
|
# Database (для локального запуска)
|
||||||
DATABASE_URL=postgresql+asyncpg://user:password@localhost:5432/language_bot
|
DATABASE_URL=postgresql+asyncpg://botuser:botpassword@localhost:5432/language_bot
|
||||||
|
|
||||||
|
# PostgreSQL настройки (для Docker)
|
||||||
|
POSTGRES_USER=botuser
|
||||||
|
POSTGRES_PASSWORD=botpassword
|
||||||
|
POSTGRES_DB=language_bot
|
||||||
|
|
||||||
# Settings
|
# Settings
|
||||||
DEBUG=True
|
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
|
```bash
|
||||||
git clone http://103.137.249.134:3000/NANDI/tg_bot_language.git
|
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