8.6 KiB
8.6 KiB
🐳 Docker & Celery - Что Было Добавлено
📦 Новые Файлы
Docker & Контейнеризация
- Dockerfile - Конфигурация Docker образа для бота
- docker-compose.yml - Оркестрация всех сервисов
- .dockerignore - Файлы, исключаемые из Docker образа
- docker.sh - Bash скрипт для управления контейнерами
- Makefile - Make команды для удобства
Celery & Планировщик
- app/celery_config.py - Конфигурация Celery
- app/celery_tasks.py - Определение асинхронных задач
- app/scheduler.py - Планировщик для расписаний
- app/handlers/schedule.py - Обработчик команд расписания
Документация
- docs/DOCKER_CELERY.md - Полное руководство по Docker и Celery
- DOCKER_QUICKSTART.md - Быстрый старт
🔄 Обновленные Файлы
-
requirements.txt
- ✅ Добавлены: celery, redis, croniter, APScheduler, alembic
-
app/settings.py
- ✅ Redis конфигурация (REDIS_HOST, REDIS_PORT, etc)
- ✅ Celery URLs для broker и backend
-
.env.example
- ✅ Redis переменные
- ✅ Комментарии для Docker
-
app/main.py
- ✅ Новый файл для запуска как модуля (
python -m app)
- ✅ Новый файл для запуска как модуля (
🎯 Возможности
Celery Задачи
# Отправка сообщений асинхронно
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. Подготовка
cp .env.example .env
# Отредактировать .env
2. Запуск
# Способ 1: Через docker.sh
chmod +x docker.sh
./docker.sh up
# Способ 2: Через Makefile
make up
# Способ 3: Docker Compose напрямую
docker-compose up -d
3. Проверка
# Статус
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 ежедневно
🛠️ Основные Команды
Управление
./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
# Активные задачи
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
База Данных
# 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
# 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 | Веб-интерфейс мониторинга |
🎓 Примеры
Отправить сообщение в группу асинхронно
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)
Расписать рассылку
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
)
Отменить расписание
from app.scheduler import cancel_broadcast
await cancel_broadcast(job_id)
🚨 Важные Замечания
Безопасность
⚠️ Никогда не коммитьте .env с реальными данными!
# Добавить в .gitignore
echo ".env" >> .gitignore
echo "*.env" >> .gitignore
Production
- Используйте external volumes для БД
- Настройте reverse proxy (Nginx)
- Используйте SSL/TLS
- Масштабируйте workers при необходимости
- Мониторьте через Flower
📚 Документация
🔗 Полезные Ссылки
✅ Что Дальше?
- ✅ Запустить docker-compose
- ✅ Проверить Flower на :5555
- ✅ Создать сообщение через /start
- ✅ Расписать рассылку через /schedule
- ✅ Мониторить в реальном времени
Готово к использованию! 🎉