feat: Add presence heartbeat for Matrix online status

- matrix-gateway: POST /internal/matrix/presence/online endpoint
- usePresenceHeartbeat hook with activity tracking
- Auto away after 5 min inactivity
- Offline on page close/visibility change
- Integrated in MatrixChatRoom component
This commit is contained in:
Apple
2025-11-27 00:19:40 -08:00
parent 5bed515852
commit 3de3c8cb36
6371 changed files with 1317450 additions and 932 deletions

View File

@@ -0,0 +1,433 @@
# 🚀 Deployment Phase 1-3 на НОДА1 (Hetzner GEX44)
**НОДА1 IP:** 144.76.224.179
**SSH:** `root@144.76.224.179`
**Project Root:** `/opt/microdao-daarion`
**Domain:** `gateway.daarion.city`
**Існує:** DAGI Stack (17+ сервісів)
---
## 🎯 Стратегія Deployment
### Варіант A: **Інтеграція в існуючий stack** (Рекомендовано)
**Підхід:** Додати Phase 1-3 сервіси до існуючого `docker-compose.all.yml`
**Переваги:**
- ✅ Використовує існуючу БД (PostgreSQL)
- ✅ Використовує існуючий Redis
- ✅ Використовує існуючий Nginx/SSL
- ✅ Мінімальні зміни інфраструктури
- ✅ Спільний моніторинг (Grafana/Prometheus)
**Недоліки:**
- ⚠️ Потрібно перевірити конфлікти портів
- ⚠️ Потрібно оновити Nginx config
---
### Варіант B: **Окремий stack**
**Підхід:** Створити окремий `docker-compose.mvp.yml`
**Переваги:**
- ✅ Повна ізоляція
- ✅ Легко rollback
- ✅ Незалежне тестування
**Недоліки:**
- ❌ Дублювання БД/Redis
- ❌ Додаткове навантаження
- ❌ Складніше управління
---
## ✅ Рекомендація: Варіант A (Інтеграція)
Додаємо Phase 1-3 сервіси до існуючого stack.
---
## 📊 Перевірка існуючої інфраструктури
### 1. Перевірка запущених сервісів
```bash
ssh root@144.76.224.179
# Перевірити що працює
docker ps
# Перевірити порти
sudo netstat -tulpn | grep LISTEN
# Перевірити compose файли
ls -la /opt/microdao-daarion/docker-compose*.yml
```
**Очікувані порти (вже зайняті):**
- 9102 — Router
- 9300 — Bot Gateway
- 8008 — DevTools
- 8890 — Swapper
- 8899 — Frontend
- 5432 — PostgreSQL
- 6379 — Redis
- 9090 — Prometheus
- 3000 — Grafana
---
## 🆕 Нові сервіси Phase 1-3
### Phase 2: Agents Core
- **Порт:** 7002 (не конфліктує!)
- **Контейнер:** `daarion-agents-service`
### Phase 3: City Service
- **Порт:** 7001 (не конфліктує!)
- **Контейнер:** `daarion-city-service`
### Phase 3: Second Me Service
- **Порт:** 7003 (не конфліктує!)
- **Контейнер:** `daarion-secondme-service`
### Phase 3: MicroDAO Service (Phase 7)
- **Порт:** 7004 (не конфліктує!)
- **Контейнер:** `daarion-microdao-service`
**✅ Немає конфліктів портів!**
---
## 🔧 Deployment Steps
### Крок 1: Підготовка (локально)
```bash
# На NODE2 (MacBook)
cd /Users/apple/github-projects/microdao-daarion
# Commit останні зміни
git add .
git commit -m "Phase 1-3 ready for NODE1 deployment"
git push origin main
```
---
### Крок 2: Підключення до НОДА1
```bash
# SSH до НОДА1
ssh root@144.76.224.179
# Перейти в проект
cd /opt/microdao-daarion
# Pull останніх змін
git pull origin main
```
---
### Крок 3: Перевірка ENV
```bash
# Перевірити .env файл
cat .env | grep -E "DATABASE_URL|REDIS_URL|JWT_SECRET"
# Якщо потрібно додати нові змінні:
vim .env
```
**Додати до .env:**
```bash
# Phase 1-3 Services
AGENTS_SERVICE_URL=http://agents-service:7002
CITY_SERVICE_URL=http://city-service:7001
SECONDME_SERVICE_URL=http://secondme-service:7003
MICRODAO_SERVICE_URL=http://microdao-service:7004
# City Config
CITY_DEFAULT_ROOMS=general,welcome,builders,science,energy
SECONDME_AGENT_ID=ag_secondme_global
# WebSocket
WS_BASE_URL=wss://gateway.daarion.city/ws
```
---
### Крок 4: Оновити docker-compose.all.yml
**Опція 1: Я створю оновлений файл (рекомендовано)**
- Я можу створити повний `docker-compose.all.yml` з новими сервісами
- Ти просто скопіюєш на НОДА1
**Опція 2: Ти вручну додаси через термінал**
- Я дам тобі exact commands
- Ти виконаєш їх через SSH
---
### Крок 5: Міграції БД
```bash
# На НОДА1
cd /opt/microdao-daarion
# Застосувати Phase 1-3 міграції
for i in {001..010}; do
echo "Applying migration ${i}..."
docker compose -f docker-compose.all.yml exec -T dagi-postgres \
psql -U postgres -d daarion_memory -f /migrations/${i}_*.sql
done
```
**Важливо:** Перевірити що міграції є в `/opt/microdao-daarion/migrations/`
---
### Крок 6: Білд і старт нових сервісів
```bash
# Білд нових сервісів
docker compose -f docker-compose.all.yml build agents-service city-service secondme-service microdao-service
# Старт нових сервісів (без перезапуску існуючих!)
docker compose -f docker-compose.all.yml up -d agents-service city-service secondme-service microdao-service
# Перевірка
docker ps | grep -E "agents-service|city-service|secondme-service"
```
---
### Крок 7: Оновити Nginx Config
**Додати до Nginx config (`/etc/nginx/sites-available/daarion`):**
```nginx
# Phase 1-3 API endpoints
location /api/city/ {
proxy_pass http://127.0.0.1:7001/city/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /api/agents/ {
proxy_pass http://127.0.0.1:7002/agents/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /api/secondme/ {
proxy_pass http://127.0.0.1:7003/secondme/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /api/microdao/ {
proxy_pass http://127.0.0.1:7004/microdao/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# WebSocket для City Rooms
location /ws/city/ {
proxy_pass http://127.0.0.1:7001/ws/city/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_read_timeout 86400;
}
```
**Застосувати:**
```bash
# Перевірити синтаксис
sudo nginx -t
# Reload Nginx
sudo systemctl reload nginx
```
---
### Крок 8: Перевірка Health
```bash
# Перевірити здоров'я нових сервісів
curl http://localhost:7001/health # City Service
curl http://localhost:7002/health # Agents Service
curl http://localhost:7003/health # Second Me
curl http://localhost:7004/health # MicroDAO
# Через публічний домен
curl https://gateway.daarion.city/api/city/health
curl https://gateway.daarion.city/api/agents/health
curl https://gateway.daarion.city/api/secondme/health
```
---
### Крок 9: Smoke Tests
```bash
# City Rooms API
curl https://gateway.daarion.city/api/city/rooms | jq
# Очікуємо: 5 default rooms
```
---
## 📋 Checklist Deployment
### Pre-deployment:
- [ ] Git push з NODE2 виконано
- [ ] Backup БД на НОДА1 створено
- [ ] .env файл перевірено
- [ ] Міграції є в `/opt/microdao-daarion/migrations/`
### Deployment:
- [ ] Git pull на НОДА1 виконано
- [ ] docker-compose.all.yml оновлено
- [ ] Нові сервіси зібрані (`docker compose build`)
- [ ] Нові сервіси запущені (`docker compose up -d`)
- [ ] Nginx config оновлено
- [ ] Nginx reload виконано
### Post-deployment:
- [ ] Health checks пройдені (4/4 сервіси)
- [ ] City Rooms API повертає 5 кімнат
- [ ] WebSocket connection працює
- [ ] Логи не містять критичних помилок
- [ ] Frontend інтегровано (якщо потрібно)
---
## 🚨 Rollback Plan
Якщо щось пішло не так:
```bash
# Зупинити нові сервіси
docker compose -f docker-compose.all.yml stop agents-service city-service secondme-service microdao-service
# Видалити контейнери
docker compose -f docker-compose.all.yml rm -f agents-service city-service secondme-service microdao-service
# Відкатити Nginx config
sudo cp /etc/nginx/sites-available/daarion.backup /etc/nginx/sites-available/daarion
sudo systemctl reload nginx
# Відкатити БД (якщо потрібно)
docker compose -f docker-compose.all.yml exec -T dagi-postgres \
psql -U postgres -d daarion_memory < backup.sql
```
---
## 🤖 Автоматизація vs Manual
### Варіант 1: Я створю deployment script
```bash
# Скрипт який зробить все автоматично
./scripts/deploy-phase1-3-node1.sh
```
**Переваги:**
- ✅ Швидко
- ✅ Менше помилок
- ✅ Repeatable
### Варіант 2: Ти виконаєш вручну
```bash
# Ти виконаєш команди крок за кроком через SSH
ssh root@144.76.224.179
cd /opt/microdao-daarion
# ... etc
```
**Переваги:**
- ✅ Повний контроль
- ✅ Розумієш кожен крок
- ✅ Легше debug
---
## 💡 Рекомендація
**Я рекомендую:**
1. **Я створю:**
- Оновлений `docker-compose.all.yml` (з Phase 1-3 сервісами)
- Deployment script `deploy-phase1-3-node1.sh`
- Nginx config snippet
2. **Ти виконаєш:**
- Git push з NODE2
- SSH на НОДА1
- Git pull
- Запуск deployment script
- Перевірка результатів
**Це найбільш безпечний і швидкий підхід.**
---
## ❓ Питання перед стартом
1. **Чи є backup БД на НОДА1?**
- Якщо ні, створити перед deployment
2. **Чи працює існуючий DAGI Stack стабільно?**
- Перевірити `docker ps` та логи
3. **Чи потрібно інтегрувати Frontend (port 8899)?**
- Існуючий Frontend оновити чи залишити як є?
4. **Який domain використовувати для Phase 1-3?**
- `gateway.daarion.city` (існуючий) ✅
- `app.daarion.city` (новий субдомен)
- Інший?
---
## 🚀 Ready to Deploy?
**Обери підхід:**
**A) Я створю deployment package** (рекомендовано)
- Скажи "створи deployment package"
- Я створю всі необхідні файли та скрипти
- Ти просто запустиш на НОДА1
**B) Manual step-by-step**
- Скажи "покрокова інструкція"
- Я дам детальні команди для кожного кроку
- Ти виконаєш через термінал
**C) Гібридний підхід**
- Я створю docker-compose та scripts
- Ти виконаєш деякі кроки вручну (Nginx, перевірки)
---
**Що обираєш? 🎯**