Skip to content

🚀 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