# 🐳 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 - Удалить расписание ``` ### Мониторинг - **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. ✅ Мониторить в реальном времени --- **Готово к использованию!** 🎉