Files
microdao-daarion/docs/DEPLOY_MVP_NODE1_COMPREHENSIVE_ANALYSIS.md
Apple 3de3c8cb36 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
2025-11-27 00:19:40 -08:00

19 KiB
Raw Blame History

🚀 MVP Deployment на НОДА1 — Комплексний Аналіз

Версія: 1.0.0
Дата: 25 листопада 2025
Статус: Ready for Execution
НОДА1 IP: 144.76.224.179
Domain: gateway.daarion.city


📊 Executive Summary

Після аналізу інфраструктури маємо:

Що готово:

  1. Phase 1-3 код готовий (Frontend MVP, Agents Core, City MVP, Second Me)
  2. Міграції БД готові (001-010)
  3. Docker Compose готовий (docker-compose.all.yml)
  4. Сервіси зібрані (agents, city, secondme, microdao)
  5. Nginx/SSL працює на НОДА1 (gateway.daarion.city)

⚠️ Потенційні ризики:

  1. Мультимодальна система в процесі (Router v1.1.0, Telegram Enhanced)
  2. Щоденні зміни на обох нодах
  3. Невідомий стан production БД на НОДА1
  4. Можливі конфлікти портів (хоча перевірка показує що немає)

🎯 Рекомендована стратегія:

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)
  • Невідомо чи існуючі таблиці не конфліктують

Рішення:

  1. Backup перед міграцією (обов'язково!)
  2. Перевірити існуючі таблиці перед застосуванням міграцій
  3. 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 вважається успішно задеплоєним якщо:

  1. Всі 4 нові сервіси запущені і healthy
  2. API endpoints доступні через https://gateway.daarion.city/api/*
  3. WebSocket працює через wss://gateway.daarion.city/ws/city/*
  4. City Rooms API повертає 5 default rooms
  5. Існуючі DAGI сервіси НЕ постраждали
  6. Prometheus/Grafana бачать нові сервіси
  7. Немає критичних помилок в логах (перші 30 хвилин)

🔮 Next Steps (Після успішного deployment)

  1. Frontend Integration — Оновити Frontend (port 8899) для роботи з новими API
  2. Multimodal Integration — Коли документи готові, інтегрувати STT/OCR/Web Search
  3. Load Testing — Перевірити навантаження на нові сервіси
  4. Documentation Update — Оновити INFRASTRUCTURE.md з новими сервісами
  5. 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