- Добавлена конфигурация Celery (eusrr_backend/celery.py) - Созданы async задачи для уведомлений (notifications/tasks.py) - Обновлены все notification_signals на create_notification_async() - Добавлен метод NotificationService.create_notification_async() с fallback - Установлены пакеты: django-celery-beat, django-celery-results, flower - Применены миграции для Celery приложений - Документация: CELERY_SETUP.md, CELERY_INTEGRATION_PLAN.md Производительность: уменьшение времени отправки сообщений с ~500ms до <50ms
291 lines
6.5 KiB
Markdown
291 lines
6.5 KiB
Markdown
# Инструкция по запуску Celery (Development)
|
||
|
||
## 📋 Предварительные требования
|
||
|
||
### 1. Установка Redis
|
||
|
||
**Windows:**
|
||
```bash
|
||
# Через WSL2
|
||
wsl --install
|
||
wsl
|
||
sudo apt update
|
||
sudo apt install redis-server
|
||
redis-server --daemonize yes
|
||
|
||
# Или скачать с https://github.com/microsoftarchive/redis/releases
|
||
```
|
||
|
||
**Linux/Mac:**
|
||
```bash
|
||
# Ubuntu/Debian
|
||
sudo apt install redis-server
|
||
sudo systemctl start redis
|
||
|
||
# MacOS
|
||
brew install redis
|
||
brew services start redis
|
||
```
|
||
|
||
**Docker (рекомендуется):**
|
||
```bash
|
||
docker run -d -p 6379:6379 --name redis redis:7-alpine
|
||
```
|
||
|
||
### 2. Проверка Redis
|
||
```bash
|
||
redis-cli ping
|
||
# Должно вернуть: PONG
|
||
```
|
||
|
||
---
|
||
|
||
## 🚀 Установка зависимостей
|
||
|
||
```bash
|
||
# Активировать виртуальное окружение
|
||
.venv/Scripts/activate # Windows
|
||
source .venv/bin/activate # Linux/Mac
|
||
|
||
# Установить новые пакеты
|
||
cd backend
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
Новые пакеты:
|
||
- `redis` - клиент для Redis
|
||
- `django-celery-beat` - периодические задачи
|
||
- `django-celery-results` - хранение результатов
|
||
- `flower` - веб-интерфейс мониторинга
|
||
|
||
---
|
||
|
||
## 🔧 Настройка окружения
|
||
|
||
### 1. Добавить в `.env`:
|
||
```env
|
||
# Redis & Celery
|
||
REDIS_HOST=localhost
|
||
REDIS_PORT=6379
|
||
CELERY_BROKER_URL=redis://localhost:6379/0
|
||
CELERY_RESULT_BACKEND=redis://localhost:6379/1
|
||
```
|
||
|
||
### 2. Применить миграции (для django-celery-beat):
|
||
```bash
|
||
python manage.py migrate django_celery_beat
|
||
python manage.py migrate django_celery_results
|
||
```
|
||
|
||
---
|
||
|
||
## 🏃 Запуск Celery Worker
|
||
|
||
### Вариант 1: Базовый запуск
|
||
```bash
|
||
cd backend
|
||
celery -A eusrr_backend worker -l info
|
||
```
|
||
|
||
### Вариант 2: С указанием очередей
|
||
```bash
|
||
celery -A eusrr_backend worker -l info -Q default,notifications,emails
|
||
```
|
||
|
||
### Вариант 3: С autoscale (для production)
|
||
```bash
|
||
celery -A eusrr_backend worker -l info --autoscale=10,3
|
||
# 10 = максимум workers, 3 = минимум workers
|
||
```
|
||
|
||
---
|
||
|
||
## 🕐 Запуск Celery Beat (периодические задачи)
|
||
|
||
**Отдельное окно терминала:**
|
||
```bash
|
||
cd backend
|
||
celery -A eusrr_backend beat -l info
|
||
```
|
||
|
||
---
|
||
|
||
## 🌺 Запуск Flower (мониторинг)
|
||
|
||
**Отдельное окно терминала:**
|
||
```bash
|
||
cd backend
|
||
celery -A eusrr_backend flower --port=5555
|
||
```
|
||
|
||
Откройте в браузере: http://localhost:5555
|
||
|
||
---
|
||
|
||
## 🧪 Тестирование
|
||
|
||
### 1. Проверка подключения
|
||
```bash
|
||
cd backend
|
||
python manage.py shell
|
||
```
|
||
|
||
```python
|
||
from eusrr_backend.celery import debug_task
|
||
result = debug_task.delay()
|
||
print(f"Task ID: {result.id}")
|
||
print(f"Status: {result.status}")
|
||
```
|
||
|
||
### 2. Проверка через Django admin
|
||
- Перейти в админку: http://localhost:8000/admin/
|
||
- Найти раздел "Periodic Tasks" (от django-celery-beat)
|
||
- Создать тестовую задачу
|
||
|
||
---
|
||
|
||
## 📊 Мониторинг
|
||
|
||
### Через Flower (рекомендуется)
|
||
- URL: http://localhost:5555
|
||
- Видны: активные задачи, история, графики
|
||
|
||
### Через Redis CLI
|
||
```bash
|
||
redis-cli
|
||
> KEYS *celery*
|
||
> LLEN celery
|
||
> LRANGE celery 0 10
|
||
```
|
||
|
||
### Через Django shell
|
||
```python
|
||
from django_celery_results.models import TaskResult
|
||
TaskResult.objects.all()
|
||
```
|
||
|
||
---
|
||
|
||
## 🛑 Остановка
|
||
|
||
```bash
|
||
# Ctrl+C в каждом окне терминала (worker, beat, flower)
|
||
# Или через pkill (Linux/Mac)
|
||
pkill -f "celery worker"
|
||
pkill -f "celery beat"
|
||
pkill -f "celery flower"
|
||
```
|
||
|
||
### Остановка Redis
|
||
```bash
|
||
# Docker
|
||
docker stop redis
|
||
|
||
# Systemd
|
||
sudo systemctl stop redis
|
||
|
||
# WSL
|
||
redis-cli shutdown
|
||
```
|
||
|
||
---
|
||
|
||
## 🐛 Отладка проблем
|
||
|
||
### Проблема: Worker не запускается
|
||
**Решение:**
|
||
1. Проверьте Redis: `redis-cli ping`
|
||
2. Проверьте `.env` файл
|
||
3. Убедитесь что виртуальное окружение активно
|
||
4. Проверьте логи: `celery -A eusrr_backend worker -l debug`
|
||
|
||
### Проблема: Задачи не выполняются
|
||
**Решение:**
|
||
1. Проверьте очереди: `redis-cli LLEN celery`
|
||
2. Проверьте Flower: http://localhost:5555
|
||
3. Проверьте worker logs
|
||
4. Убедитесь что worker запущен с нужной очередью
|
||
|
||
### Проблема: Redis connection refused
|
||
**Решение:**
|
||
1. Убедитесь что Redis запущен
|
||
2. Проверьте порт: `netstat -an | grep 6379`
|
||
3. Проверьте CELERY_BROKER_URL в .env
|
||
|
||
---
|
||
|
||
## 📝 Полезные команды
|
||
|
||
### Celery
|
||
```bash
|
||
# Очистить очередь
|
||
celery -A eusrr_backend purge
|
||
|
||
# Инспекция workers
|
||
celery -A eusrr_backend inspect active
|
||
celery -A eusrr_backend inspect stats
|
||
|
||
# Список зарегистрированных задач
|
||
celery -A eusrr_backend inspect registered
|
||
```
|
||
|
||
### Redis
|
||
```bash
|
||
# Очистить все данные Celery
|
||
redis-cli KEYS "celery*" | xargs redis-cli DEL
|
||
|
||
# Мониторинг в реальном времени
|
||
redis-cli MONITOR
|
||
```
|
||
|
||
---
|
||
|
||
## 🔄 Development workflow
|
||
|
||
### Типичный процесс работы:
|
||
|
||
**Терминал 1: Django**
|
||
```bash
|
||
.venv/Scripts/python manage.py runserver
|
||
```
|
||
|
||
**Терминал 2: Celery Worker**
|
||
```bash
|
||
celery -A eusrr_backend worker -l info
|
||
```
|
||
|
||
**Терминал 3: Celery Beat** (если нужны периодические задачи)
|
||
```bash
|
||
celery -A eusrr_backend beat -l info
|
||
```
|
||
|
||
**Терминал 4: Flower** (опционально)
|
||
```bash
|
||
celery -A eusrr_backend flower
|
||
```
|
||
|
||
**Терминал 5: Redis** (если запускали вручную)
|
||
```bash
|
||
redis-server
|
||
```
|
||
|
||
---
|
||
|
||
## 🎯 Следующие шаги
|
||
|
||
После успешного запуска:
|
||
1. ✅ Создать первую задачу в `notifications/tasks.py`
|
||
2. ✅ Протестировать отправку уведомления через Celery
|
||
3. ✅ Измерить улучшение производительности
|
||
4. ✅ Настроить периодические задачи
|
||
5. ✅ Настроить мониторинг в production
|
||
|
||
---
|
||
|
||
## 📚 Документация
|
||
|
||
- Celery: https://docs.celeryq.dev/
|
||
- Flower: https://flower.readthedocs.io/
|
||
- Django Celery Beat: https://django-celery-beat.readthedocs.io/
|
||
- Redis: https://redis.io/docs/
|