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

8.6 KiB
Raw Blame History

🐳 Docker & Celery - Что Было Добавлено

📦 Новые Файлы

Docker & Контейнеризация

  1. Dockerfile - Конфигурация Docker образа для бота
  2. docker-compose.yml - Оркестрация всех сервисов
  3. .dockerignore - Файлы, исключаемые из Docker образа
  4. docker.sh - Bash скрипт для управления контейнерами
  5. Makefile - Make команды для удобства

Celery & Планировщик

  1. app/celery_config.py - Конфигурация Celery
  2. app/celery_tasks.py - Определение асинхронных задач
  3. app/scheduler.py - Планировщик для расписаний
  4. app/handlers/schedule.py - Обработчик команд расписания

Документация

  1. docs/DOCKER_CELERY.md - Полное руководство по Docker и Celery
  2. 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 Задачи

# Отправка сообщений асинхронно
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

  1. Используйте external volumes для БД
  2. Настройте reverse proxy (Nginx)
  3. Используйте SSL/TLS
  4. Масштабируйте workers при необходимости
  5. Мониторьте через Flower

📚 Документация

🔗 Полезные Ссылки

Что Дальше?

  1. Запустить docker-compose
  2. Проверить Flower на :5555
  3. Создать сообщение через /start
  4. Расписать рассылку через /schedule
  5. Мониторить в реальном времени

Готово к использованию! 🎉