303 lines
8.6 KiB
Markdown
303 lines
8.6 KiB
Markdown
# 🐳 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. ✅ Мониторить в реальном времени
|
||
|
||
---
|
||
|
||
**Готово к использованию!** 🎉
|