init commit
This commit is contained in:
302
docs/DOCKER_CELERY_SUMMARY.md
Normal file
302
docs/DOCKER_CELERY_SUMMARY.md
Normal file
@@ -0,0 +1,302 @@
|
||||
# 🐳 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. ✅ Мониторить в реальном времени
|
||||
|
||||
---
|
||||
|
||||
**Готово к использованию!** 🎉
|
||||
Reference in New Issue
Block a user