Files
microdao-daarion/docs/DEPLOY_NODE1_MVP_PHASES.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

12 KiB
Raw Permalink Blame History

🚀 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. Перевірка запущених сервісів

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: Підготовка (локально)

# На 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

# SSH до НОДА1
ssh root@144.76.224.179

# Перейти в проект
cd /opt/microdao-daarion

# Pull останніх змін
git pull origin main

Крок 3: Перевірка ENV

# Перевірити .env файл
cat .env | grep -E "DATABASE_URL|REDIS_URL|JWT_SECRET"

# Якщо потрібно додати нові змінні:
vim .env

Додати до .env:

# 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: Міграції БД

# На НОДА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: Білд і старт нових сервісів

# Білд нових сервісів
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):

# 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;
}

Застосувати:

# Перевірити синтаксис
sudo nginx -t

# Reload Nginx
sudo systemctl reload nginx

Крок 8: Перевірка Health

# Перевірити здоров'я нових сервісів
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

# 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

Якщо щось пішло не так:

# Зупинити нові сервіси
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

# Скрипт який зробить все автоматично
./scripts/deploy-phase1-3-node1.sh

Переваги:

  • Швидко
  • Менше помилок
  • Repeatable

Варіант 2: Ти виконаєш вручну

# Ти виконаєш команди крок за кроком через 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, перевірки)

Що обираєш? 🎯