Skip to content

🚀 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. Я створю:
  2. Оновлений docker-compose.all.yml (з Phase 1-3 сервісами)
  3. Deployment script deploy-phase1-3-node1.sh
  4. Nginx config snippet

  5. Ти виконаєш:

  6. Git push з NODE2
  7. SSH на НОДА1
  8. Git pull
  9. Запуск deployment script
  10. Перевірка результатів

Це найбільш безпечний і швидкий підхід.


❓ Питання перед стартом

  1. Чи є backup БД на НОДА1?
  2. Якщо ні, створити перед deployment

  3. Чи працює існуючий DAGI Stack стабільно?

  4. Перевірити docker ps та логи

  5. Чи потрібно інтегрувати Frontend (port 8899)?

  6. Існуючий Frontend оновити чи залишити як є?

  7. Який domain використовувати для Phase 1-3?

  8. gateway.daarion.city (існуючий) ✅
  9. app.daarion.city (новий субдомен)
  10. Інший?

🚀 Ready to Deploy?

Обери підхід:

A) Я створю deployment package (рекомендовано) - Скажи "створи deployment package" - Я створю всі необхідні файли та скрипти - Ти просто запустиш на НОДА1

B) Manual step-by-step - Скажи "покрокова інструкція" - Я дам детальні команди для кожного кроку - Ти виконаєш через термінал

C) Гібридний підхід - Я створю docker-compose та scripts - Ти виконаєш деякі кроки вручну (Nginx, перевірки)


Що обираєш? 🎯