Files
TG_autoposter/docs/DOCKER_CELERY_SUMMARY.md
2025-12-18 05:55:32 +09:00

303 lines
8.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🐳 Docker & Celery - Что Было Добавлено
## 📦 Новые Файлы
### Docker & Контейнеризация
1. **Dockerfile** - Конфигурация Docker образа для бота
2. **docker-compose.yml** - Оркестрация всех сервисов
3. **.dockerignore** - Файлы, исключаемые из Docker образа
4. **docker.sh** - Bash скрипт для управления контейнерами
5. **Makefile** - Make команды для удобства
### Celery & Планировщик
6. **app/celery_config.py** - Конфигурация Celery
7. **app/celery_tasks.py** - Определение асинхронных задач
8. **app/scheduler.py** - Планировщик для расписаний
9. **app/handlers/schedule.py** - Обработчик команд расписания
### Документация
10. **docs/DOCKER_CELERY.md** - Полное руководство по Docker и Celery
11. **DOCKER_QUICKSTART.md** - Быстрый старт
## 🔄 Обновленные Файлы
1. **requirements.txt**
- ✅ Добавлены: celery, redis, croniter, APScheduler, alembic
2. **app/settings.py**
- ✅ Redis конфигурация (REDIS_HOST, REDIS_PORT, etc)
- ✅ Celery URLs для broker и backend
3. **.env.example**
- ✅ Redis переменные
- ✅ Комментарии для Docker
4. **app/__main__.py**
- ✅ Новый файл для запуска как модуля (`python -m app`)
## 🎯 Возможности
### Celery Задачи
```python
# Отправка сообщений асинхронно
send_message_task(message_id, group_id, chat_id, message_text)
# Парсинг участников группы
parse_group_members_task(group_id, chat_id, limit)
# Массовая рассылка
broadcast_message_task(message_id, group_ids)
# Очистка старых сообщений
cleanup_old_messages_task(days)
```
### Планировщик Рассылок
```
/schedule list - Показать расписания
/schedule add 1 10 "0 9 * * *" - Добавить расписание
/schedule remove <job_id> - Удалить расписание
```
### Мониторинг
- **Flower** на http://localhost:5555
- Реальное время выполнения задач
- Статус рабочих
- История выполнения
## 🚀 Быстрый Старт
### 1. Подготовка
```bash
cp .env.example .env
# Отредактировать .env
```
### 2. Запуск
```bash
# Способ 1: Через docker.sh
chmod +x docker.sh
./docker.sh up
# Способ 2: Через Makefile
make up
# Способ 3: Docker Compose напрямую
docker-compose up -d
```
### 3. Проверка
```bash
# Статус
docker-compose ps
# Логи
docker-compose logs -f
# Flower
open http://localhost:5555
```
## 📊 Архитектура
```
┌─────────────────────────────────────────┐
│ Docker Network (Bridge) │
├──────────────┬──────────────┬───────────┤
│ │ │ │
│ PostgreSQL │ Redis │ Flower │
│ :5432 │ :6379 │ :5555 │
│ │ │ │
├──────────────┴──────────────┴───────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌───────┐ │
│ │ Bot │ │ Celery │ │ Celery│ │
│ │ (Polling)│ │ Workers │ │ Beat │ │
│ └──────────┘ └──────────┘ └───────┘ │
│ │
└─────────────────────────────────────────┘
```
## 📝 Cron Выражения
```
Формат: minute hour day month day_of_week
Примеры:
0 9 * * * - ежедневно в 9:00 UTC
0 9 * * MON - по понедельникам в 9:00 UTC
0 */6 * * * - каждые 6 часов
0 9,14,18 * * * - в 9:00, 14:00, 18:00 UTC
*/30 * * * * - каждые 30 минут
0 0 * * * - в полночь UTC ежедневно
```
## 🛠️ Основные Команды
### Управление
```bash
./docker.sh up # Запустить
./docker.sh down # Остановить
./docker.sh build # Пересобрать
./docker.sh logs [service] # Логи
./docker.sh shell [service] # Bash в контейнере
./docker.sh ps # Статус
./docker.sh restart [svc] # Перезагрузить
./docker.sh clean # Удалить контейнеры
```
### Celery
```bash
# Активные задачи
docker-compose exec bot celery -A app.celery_config inspect active
# Статистика рабочих
docker-compose exec bot celery -A app.celery_config inspect stats
# Зарегистрированные задачи
docker-compose exec bot celery -A app.celery_config inspect registered
```
### База Данных
```bash
# Backup
docker-compose exec postgres pg_dump -U autoposter autoposter_db > backup.sql
# Restore
docker-compose exec -T postgres psql -U autoposter autoposter_db < backup.sql
```
## 🔧 Конфигурация .env
```env
# Database (PostgreSQL)
DB_USER=autoposter
DB_PASSWORD=secure_password
DB_HOST=postgres
DB_PORT=5432
DB_NAME=autoposter_db
# Redis
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_DB=0
REDIS_PASSWORD=
# Telegram
TELEGRAM_BOT_TOKEN=your_token
# Telethon (опционально)
USE_TELETHON=false
TELETHON_API_ID=...
TELETHON_API_HASH=...
TELETHON_PHONE=+7...
```
## 📊 Сервисы
| Сервис | Порт | Описание |
|--------|------|---------|
| postgres | 5432 | PostgreSQL БД |
| redis | 6379 | Redis cache & broker |
| bot | 8000 | Главный Telegram бот |
| celery_worker_send | - | Worker для отправки |
| celery_worker_parse | - | Worker для парсинга |
| celery_worker_maintenance | - | Worker для обслуживания |
| celery_beat | - | Планировщик задач |
| flower | 5555 | Веб-интерфейс мониторинга |
## 🎓 Примеры
### Отправить сообщение в группу асинхронно
```python
from app.celery_tasks import send_message_task
task = send_message_task.delay(
message_id=1,
group_id=10,
chat_id="-1001234567890",
message_text="Hello!"
)
# Получить результат (опционально)
# result = task.get(timeout=30)
```
### Расписать рассылку
```python
from app.scheduler import schedule_broadcast
job_id = await schedule_broadcast(
message_id=1,
group_ids=[10, 20, 30],
cron_expr='0 9 * * *' # Ежедневно в 9:00 UTC
)
```
### Отменить расписание
```python
from app.scheduler import cancel_broadcast
await cancel_broadcast(job_id)
```
## 🚨 Важные Замечания
### Безопасность
⚠️ **Никогда** не коммитьте .env с реальными данными!
```bash
# Добавить в .gitignore
echo ".env" >> .gitignore
echo "*.env" >> .gitignore
```
### Production
1. Используйте external volumes для БД
2. Настройте reverse proxy (Nginx)
3. Используйте SSL/TLS
4. Масштабируйте workers при необходимости
5. Мониторьте через Flower
## 📚 Документация
- [Полное руководство Docker & Celery](docs/DOCKER_CELERY.md)
- [Telethon справочник](docs/TELETHON.md)
- [Быстрый старт](DOCKER_QUICKSTART.md)
## 🔗 Полезные Ссылки
- [Docker Docs](https://docs.docker.com/)
- [Celery Docs](https://docs.celeryproject.io/)
- [APScheduler Docs](https://apscheduler.readthedocs.io/)
- [Flower Docs](https://flower.readthedocs.io/)
## ✅ Что Дальше?
1. ✅ Запустить docker-compose
2. ✅ Проверить Flower на :5555
3. ✅ Создать сообщение через /start
4. ✅ Расписать рассылку через /schedule
5. ✅ Мониторить в реальном времени
---
**Готово к использованию!** 🎉