- 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
19 KiB
🚀 MVP Deployment на НОДА1 — Комплексний Аналіз
Версія: 1.0.0
Дата: 25 листопада 2025
Статус: Ready for Execution
НОДА1 IP: 144.76.224.179
Domain: gateway.daarion.city
📊 Executive Summary
Після аналізу інфраструктури маємо:
✅ Що готово:
- Phase 1-3 код готовий (Frontend MVP, Agents Core, City MVP, Second Me)
- Міграції БД готові (001-010)
- Docker Compose готовий (
docker-compose.all.yml) - Сервіси зібрані (agents, city, secondme, microdao)
- Nginx/SSL працює на НОДА1 (
gateway.daarion.city)
⚠️ Потенційні ризики:
- Мультимодальна система в процесі (Router v1.1.0, Telegram Enhanced)
- Щоденні зміни на обох нодах
- Невідомий стан production БД на НОДА1
- Можливі конфлікти портів (хоча перевірка показує що немає)
🎯 Рекомендована стратегія:
Staged Deployment з isolation + rollback plan
🗺️ Інфраструктурна Картина
НОДА1 (Production)
144.76.224.179 (Hetzner GEX44)
├── DAGI Stack (17+ сервісів) ✅ ПРАЦЮЄ
│ ├── Router (9102) — в процесі оновлення до v1.1.0 multimodal
│ ├── Gateway (9300) — Telegram Gateway Enhanced
│ ├── DevTools (8008)
│ ├── Swapper (8890-8891)
│ ├── Frontend (8899) — існуючий
│ ├── PostgreSQL (5432) ⚠️ PRODUCTION DB
│ ├── Redis (6379)
│ ├── Neo4j (7687, 7474)
│ ├── Qdrant (6333, 6334)
│ ├── Grafana (3000)
│ └── Prometheus (9090)
│
├── Nginx (80, 443) ✅ SSL Let's Encrypt
│ └── gateway.daarion.city → працює
│
└── /opt/microdao-daarion (project root)
НОДА2 (Development)
192.168.1.244 (MacBook Pro M4 Max)
├── Розробка Phase 1-3 ✅
├── Мультимодальні сервіси (STT, OCR, Web Search, Vector DB)
└── /Users/apple/github-projects/microdao-daarion
Phase 1-3 MVP (треба додати до НОДА1)
Нові сервіси:
├── agents-service (7002) — Phase 2
├── city-service (7001) — Phase 3
├── secondme-service (7003) — Phase 3
└── microdao-service (7004) — Phase 7
Нові API endpoints:
├── /api/agents/* → 7002
├── /api/city/* → 7001
├── /api/secondme/* → 7003
└── /api/microdao/* → 7004
WebSocket:
└── /ws/city/* → 7001
🔍 Аналіз Конфліктів
✅ Порти (Немає конфліктів!)
| Існуючі (НОДА1) | Нові (MVP) | Статус |
|---|---|---|
| 9102 (Router) | 7002 (Agents) | ✅ OK |
| 9300 (Gateway) | 7001 (City) | ✅ OK |
| 8008 (DevTools) | 7003 (Second Me) | ✅ OK |
| 8890 (Swapper) | 7004 (MicroDAO) | ✅ OK |
| 8899 (Frontend) | - | ⚠️ Може потребувати оновлення |
⚠️ База Даних (Критично!)
Ситуація:
- НОДА1 має production PostgreSQL (
daarion_memory) - MVP потребує нові таблиці (міграції 007-010)
- Невідомо чи існуючі таблиці не конфліктують
Рішення:
- Backup перед міграцією (обов'язково!)
- Перевірити існуючі таблиці перед застосуванням міграцій
- Rollback план готовий
⚠️ Nginx Config (Потребує оновлення)
Існуючий config:
/etc/nginx/sites-available/daarion
├── /telegram/webhook → 9300
└── /helion/telegram/webhook → 9300
Треба додати:
location /api/agents/ { proxy_pass http://127.0.0.1:7002/; }
location /api/city/ { proxy_pass http://127.0.0.1:7001/; }
location /api/secondme/ { proxy_pass http://127.0.0.1:7003/; }
location /api/microdao/ { proxy_pass http://127.0.0.1:7004/; }
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";
}
🎯 Deployment Strategy: STAGED ROLLOUT
Фаза 0: PRE-FLIGHT (На НОДА2)
Мета: Підготовка коду
cd /Users/apple/github-projects/microdao-daarion
# 1. Commit всі зміни
git add .
git commit -m "Phase 1-3: Ready for NODE1 deployment"
git push origin main
# 2. Перевірити що всі файли на місці
ls -la services/{agents,city,secondme,microdao}-service/
ls -la migrations/00{7,8,9,10}_*.sql
Checklist:
- Git push виконано
- Всі сервіси мають Dockerfile
- Міграції 007-010 існують
- docker-compose.all.yml оновлено (якщо потрібно)
Фаза 1: BACKUP & ANALYSIS (На НОДА1)
Мета: Захистити production і зібрати інформацію
# SSH на НОДА1
ssh root@144.76.224.179
cd /opt/microdao-daarion
# 1. Backup PostgreSQL (КРИТИЧНО!)
docker exec daarion-postgres pg_dump -U postgres daarion_memory > \
/root/backups/daarion_memory_$(date +%Y%m%d_%H%M%S).sql
# 2. Перевірити існуючі таблиці
docker exec daarion-postgres psql -U postgres -d daarion_memory -c "\dt"
# 3. Перевірити існуючі сервіси
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
# 4. Перевірити порти
sudo netstat -tulpn | grep LISTEN | grep -E "700[1-4]|9102|9300"
# 5. Перевірити Nginx config
cat /etc/nginx/sites-available/daarion
Checklist:
- Backup БД створено (перевірити розмір файлу!)
- Список таблиць збережено
- Порти 7001-7004 вільні
- Nginx config збережено
Фаза 2: CODE SYNC (На НОДА1)
Мета: Синхронізувати код з GitHub
cd /opt/microdao-daarion
# 1. Перевірити поточний стан
git status
git log --oneline -5
# 2. Pull нових змін
git fetch origin
git pull origin main
# 3. Перевірити що файли прибули
ls -la services/{agents,city,secondme,microdao}-service/Dockerfile
ls -la migrations/007_*.sql migrations/008_*.sql migrations/009_*.sql migrations/010_*.sql
Checklist:
- Git pull успішний
- Нові сервіси присутні
- Міграції 007-010 на місці
Фаза 3: ENVIRONMENT CONFIG (На НОДА1)
Мета: Налаштувати змінні оточення
cd /opt/microdao-daarion
# 1. Backup існуючого .env
cp .env .env.backup.$(date +%Y%m%d_%H%M%S)
# 2. Додати нові змінні
cat >> .env << 'EOF'
# ============================================================================
# PHASE 1-3 MVP SERVICES
# ============================================================================
# Service URLs
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 Configuration
CITY_DEFAULT_ROOMS=general,welcome,builders,science,energy
SECONDME_AGENT_ID=ag_secondme_global
# WebSocket
WS_BASE_URL=wss://gateway.daarion.city/ws
# Frontend (якщо потрібно оновити)
VITE_API_BASE_URL=https://gateway.daarion.city/api
VITE_WS_BASE_URL=wss://gateway.daarion.city/ws
EOF
# 3. Перевірити
tail -20 .env
Checklist:
- .env backup створено
- Нові змінні додано
- Синтаксис правильний
Фаза 4: DATABASE MIGRATIONS (На НОДА1)
Мета: Застосувати міграції 007-010
⚠️ КРИТИЧНА ФАЗА — МОЖЛИВІСТЬ ROLLBACK
cd /opt/microdao-daarion
# Перевірити які міграції вже застосовані (якщо є tracking)
# або вручну перевірити чи існують таблиці
# Застосувати міграції (ПО ОДНІЙ!)
echo "Applying 007_create_agents_tables.sql..."
docker exec -i daarion-postgres psql -U postgres -d daarion_memory < \
migrations/007_create_agents_tables.sql
echo "Applying 008_create_microdao_core.sql..."
docker exec -i daarion-postgres psql -U postgres -d daarion_memory < \
migrations/008_create_microdao_core.sql
echo "Applying 009_create_dao_core.sql..."
docker exec -i daarion-postgres psql -U postgres -d daarion_memory < \
migrations/009_create_dao_core.sql
echo "Applying 010_create_city_backend.sql..."
docker exec -i daarion-postgres psql -U postgres -d daarion_memory < \
migrations/010_create_city_backend.sql
# Перевірити що таблиці створені
docker exec daarion-postgres psql -U postgres -d daarion_memory -c "\dt" | \
grep -E "agents|city|secondme|microdao"
Якщо помилка:
# ROLLBACK: Відновити з backup
docker exec -i daarion-postgres psql -U postgres -d daarion_memory < \
/root/backups/daarion_memory_YYYYMMDD_HHMMSS.sql
Checklist:
- Міграція 007 успішна
- Міграція 008 успішна
- Міграція 009 успішна
- Міграція 010 успішна
- Нові таблиці підтверджені
Фаза 5: DOCKER BUILD (На НОДА1)
Мета: Зібрати нові сервіси
cd /opt/microdao-daarion
# Build нових сервісів (один за одним для діагностики)
docker compose -f docker-compose.all.yml build agents-service
docker compose -f docker-compose.all.yml build city-service
docker compose -f docker-compose.all.yml build secondme-service
docker compose -f docker-compose.all.yml build microdao-service
# Перевірити що образи створені
docker images | grep -E "agents-service|city-service|secondme|microdao"
Checklist:
- agents-service образ створено
- city-service образ створено
- secondme-service образ створено
- microdao-service образ створено
Фаза 6: SERVICE STARTUP (На НОДА1)
Мета: Запустити нові сервіси (БЕЗ перезапуску існуючих!)
cd /opt/microdao-daarion
# Запустити ТІЛЬКИ нові сервіси
docker compose -f docker-compose.all.yml up -d agents-service city-service secondme-service microdao-service
# Моніторити старт (перші 30 секунд критичні)
docker compose -f docker-compose.all.yml logs -f agents-service city-service secondme-service microdao-service
# В окремому терміналі перевірити health
watch -n 2 "docker ps | grep -E 'agents-service|city-service|secondme|microdao'"
Що моніторити:
- Контейнери запустилися (не в Restarting стані)
- Логи не містять критичних помилок
- БД з'єднання успішні
- Health endpoints відповідають
Фаза 7: NGINX UPDATE (На НОДА1)
Мета: Додати нові endpoints до Nginx
# Backup існуючого config
sudo cp /etc/nginx/sites-available/daarion \
/etc/nginx/sites-available/daarion.backup.$(date +%Y%m%d_%H%M%S)
# Додати нові location blocks (ПЕРЕД останньою фігурною дужкою сервера)
sudo vim /etc/nginx/sites-available/daarion
Додати цей блок:
# ========================================================================
# PHASE 1-3 MVP API ENDPOINTS
# ========================================================================
location /api/agents/ {
proxy_pass http://127.0.0.1:7002/;
proxy_http_version 1.1;
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;
proxy_set_header X-Request-Id $request_id;
}
location /api/city/ {
proxy_pass http://127.0.0.1:7001/;
proxy_http_version 1.1;
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;
proxy_set_header X-Request-Id $request_id;
}
location /api/secondme/ {
proxy_pass http://127.0.0.1:7003/;
proxy_http_version 1.1;
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;
proxy_set_header X-Request-Id $request_id;
}
location /api/microdao/ {
proxy_pass http://127.0.0.1:7004/;
proxy_http_version 1.1;
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;
proxy_set_header X-Request-Id $request_id;
}
# WebSocket для City
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_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 86400;
}
# Перевірити синтаксис
sudo nginx -t
# Якщо OK — reload
sudo systemctl reload nginx
# Перевірити статус
sudo systemctl status nginx
Checklist:
- Backup Nginx config створено
- Нові location blocks додано
nginx -tуспішнийsystemctl reload nginxуспішний
Фаза 8: SMOKE TESTS (На НОДА1)
Мета: Перевірити що все працює
# 1. Health checks (локально)
curl http://localhost:7001/health # City
curl http://localhost:7002/health # Agents
curl http://localhost:7003/health # Second Me
curl http://localhost:7004/health # MicroDAO
# 2. Health checks (через Nginx/SSL)
curl https://gateway.daarion.city/api/city/health
curl https://gateway.daarion.city/api/agents/health
curl https://gateway.daarion.city/api/secondme/health
curl https://gateway.daarion.city/api/microdao/health
# 3. City Rooms API
curl https://gateway.daarion.city/api/city/rooms | jq
# 4. WebSocket (через wscat або websocat)
websocat wss://gateway.daarion.city/ws/city/rooms/general
Expected Results:
- Всі health endpoints → 200 OK
- City Rooms API → 5 default rooms
- WebSocket → connection established
Фаза 9: MONITORING (На НОДА1)
Мета: Переконатися що система стабільна
# 1. Перевірити логи (перші 5 хвилин)
docker compose -f docker-compose.all.yml logs --tail=100 -f agents-service city-service
# 2. Перевірити ресурси
docker stats --no-stream
# 3. Перевірити Prometheus metrics (якщо доступний)
curl http://localhost:9090/api/v1/query?query=up | jq
# 4. Grafana (якщо налаштований)
# Відкрити http://localhost:3000 і перевірити дашборди
Checklist:
- Немає error логів (перші 5 хвилин)
- CPU/RAM в нормі
- Prometheus бачить нові таргети
- Grafana показує метрики
🚨 Rollback Plan
Якщо Фаза 6 (Service Startup) failed:
# 1. Зупинити нові сервіси
docker compose -f docker-compose.all.yml stop agents-service city-service secondme-service microdao-service
# 2. Видалити контейнери
docker compose -f docker-compose.all.yml rm -f agents-service city-service secondme-service microdao-service
# 3. Відкатити БД
docker exec -i daarion-postgres psql -U postgres -d daarion_memory < \
/root/backups/daarion_memory_YYYYMMDD_HHMMSS.sql
# 4. Система повернулась до початкового стану
Якщо Фаза 7 (Nginx Update) failed:
# Відновити Nginx config
sudo cp /etc/nginx/sites-available/daarion.backup.YYYYMMDD_HHMMSS \
/etc/nginx/sites-available/daarion
# Reload
sudo systemctl reload nginx
📋 Final Checklist
Pre-Deployment:
- Git push з НОДА2 виконано
- Backup БД на НОДА1 створено (і перевірено!)
- .env файл оновлено
- Nginx backup створено
Deployment:
- Git pull на НОДА1 успішний
- Міграції 007-010 застосовані
- Нові сервіси зібрані
- Нові сервіси запущені
- Nginx config оновлено
- Nginx reload успішний
Post-Deployment:
- Health checks: 4/4 ✅
- City Rooms API працює
- WebSocket підключення працює
- Логи без критичних помилок
- Існуючі DAGI сервіси працюють стабільно
- Monitoring налаштовано
🎯 Success Criteria
MVP вважається успішно задеплоєним якщо:
- ✅ Всі 4 нові сервіси запущені і healthy
- ✅ API endpoints доступні через
https://gateway.daarion.city/api/* - ✅ WebSocket працює через
wss://gateway.daarion.city/ws/city/* - ✅ City Rooms API повертає 5 default rooms
- ✅ Існуючі DAGI сервіси НЕ постраждали
- ✅ Prometheus/Grafana бачать нові сервіси
- ✅ Немає критичних помилок в логах (перші 30 хвилин)
🔮 Next Steps (Після успішного deployment)
- Frontend Integration — Оновити Frontend (port 8899) для роботи з новими API
- Multimodal Integration — Коли документи готові, інтегрувати STT/OCR/Web Search
- Load Testing — Перевірити навантаження на нові сервіси
- Documentation Update — Оновити INFRASTRUCTURE.md з новими сервісами
- Monitoring Dashboards — Створити Grafana дашборди для Phase 1-3
📞 Emergency Contacts
Якщо щось йде не так:
- Backup БД:
/root/backups/daarion_memory_*.sql - Rollback command:
docker compose -f docker-compose.all.yml stop ... - Nginx restore:
sudo cp /etc/nginx/sites-available/daarion.backup.* ...
Документ створено: Cursor AI Assistant
Для проєкту: MicroDAO DAARION
Останнє оновлення: 2025-11-25