docs: добавлено руководство по миграции на архитектуру realtime

This commit is contained in:
admin i 2025-12-03 12:46:16 +03:00
parent 49b0231688
commit bc696a5d0d

177
REALTIME_MIGRATION_GUIDE.md Normal file
View File

@ -0,0 +1,177 @@
# Миграция на архитектуру Realtime
## Что изменилось
Создано новое Django-приложение `realtime`, которое объединяет всю WebSocket логику в одном месте.
### Было (старая архитектура)
```
communications/
├── user_consumer.py # WebSocket для чатов
└── routing.py # /ws/
notifications/
├── consumers.py # WebSocket для уведомлений
└── routing.py # /ws/notifications/
```
**Проблемы:**
- 2 WebSocket соединения на пользователя
- Дублирование функциональности уведомлений
- WebSocket логика смешана с бизнес-логикой приложений
### Стало (новая архитектура)
```
realtime/
├── consumers.py # UserConsumer - универсальный
├── routing.py # /ws/
└── README.md # Документация
communications/
└── models.py, views.py, signals.py # Только бизнес-логика
notifications/
└── models.py, views.py, signals.py # Только бизнес-логика
```
**Преимущества:**
- ✅ Одно WebSocket соединение для всего
- ✅ Чистая архитектура (транспорт отделен от бизнес-логики)
- ✅ Легко расширять новыми real-time фичами
- ✅ Ping interval 20 секунд (было 30)
## Что НЕ меняется
- **URL остается тот же:** `ws://corp.robotail.local/ws/`
- **Frontend код не требует изменений** (API совместимо)
- **Базы данных не затронуты** (нет миграций)
- **Nginx конфигурация не меняется**
## Инструкции для сервера
### 1. Получить обновления
```bash
cd ~/EUSRR
git pull origin master
```
### 2. Проверить изменения
```bash
# Должны появиться новые файлы
ls -la backend/realtime/
# Должен показать: consumers.py, routing.py, README.md и др.
# Проверить settings.py
grep -A 30 "INSTALLED_APPS" backend/eusrr_backend/settings.py | grep realtime
# Должно показать: "realtime.apps.RealtimeConfig",
# Проверить asgi.py
grep "realtime" backend/eusrr_backend/asgi.py
# Должно показать: from realtime.routing import websocket_urlpatterns
```
### 3. Перезапустить приложение
```bash
# Остановить Gunicorn
sudo systemctl stop gunicorn
# Проверить что процессы остановлены
ps aux | grep gunicorn
# Запустить снова
sudo systemctl start gunicorn
# Проверить статус
sudo systemctl status gunicorn
# Проверить логи
sudo journalctl -u gunicorn -n 50 -f
```
### 4. Проверка работы
#### Проверка WebSocket соединений
```bash
# Смотреть логи в реальном времени
sudo tail -f /var/log/nginx/access.log | grep ws
# Должны появляться записи при подключении пользователей:
# "GET /ws/ HTTP/1.1" 101
```
#### Проверка в браузере (DevTools)
1. Открыть страницу с чатом
2. F12 → Network → WS
3. Должно быть **одно** соединение: `ws://corp.robotail.local/ws/`
4. В Messages должны приходить ping каждые 20 секунд:
```json
{"type": "ping", "timestamp": "..."}
```
### 5. Откат (если что-то пошло не так)
```bash
# Вернуться к предыдущему коммиту
cd ~/EUSRR
git log --oneline -5 # найти хеш коммита до изменений
git checkout <хеш-предыдущего-коммита>
# Перезапустить
sudo systemctl restart gunicorn
```
## Мониторинг
### Логи для отладки
```bash
# Все логи Gunicorn
sudo journalctl -u gunicorn -n 100
# Только ошибки
sudo journalctl -u gunicorn -p err -n 50
# WebSocket connections
sudo journalctl -u gunicorn | grep "UserWS"
# Пример успешного подключения:
# [UserWS] User 10 connected, subscribed to 7 chats
```
### Метрики успешной миграции
- ✅ WebSocket подключается (статус 101 в Nginx logs)
- ✅ Ping приходит каждые 20 секунд
- ✅ Сообщения в чатах отправляются и получаются
- ✅ Уведомления приходят в real-time
- ✅ Нет ошибок в `journalctl -u gunicorn`
## FAQ
### В чем разница для пользователей?
Никакой! Пользователи не заметят изменений, все работает так же.
### Почему ping стал 20 секунд вместо 30?
Более частые ping повышают стабильность соединения на некоторых сетях/прокси.
### Можно ли удалить старые файлы?
Пока нет! Файлы `communications/user_consumer.py` и `notifications/consumers.py` оставлены для совместимости. Удалим их в следующем релизе после тестирования.
### Где посмотреть новую документацию?
`backend/realtime/README.md` - полная документация по WebSocket API
## Контакты
При проблемах:
1. Проверить логи: `sudo journalctl -u gunicorn -n 100`
2. Проверить Nginx: `sudo nginx -t && sudo systemctl status nginx`
3. Откатиться на предыдущую версию (см. раздел "Откат")