Skip to content

# 🚀 DEPLOY CHECKLIST — daarion.space

Дата: 2024-11-30
Версія: MVP Node Self-Healing + DAGI Audit + Agent Prompts

## 📋 Що деплоїмо

### Backend (city-service)

- ✅ Node Registry + Self-Healing API
- ✅ Improved `get_all_nodes()` з fallback
- ✅ Agent Prompts Runtime API
- ✅ DAGI Router Audit API
- ✅ Node Agents API (Guardian/Steward)

### Frontend (apps/web)

- ✅ Node Directory з покращеним error handling
- ✅ Node Cabinet з метриками
- ✅ DAGI Router Card
- ✅ Node Metrics Card

### Scripts

- ✅ `check-invariants.py` — перевірка інваріантів
- ✅ `node-bootstrap.sh` — самореєстрація ноди
- ✅ `node-guardian-loop.py` — self-healing loop

### Міграції (НОВІ)

- `034_agent_prompts_seed.sql`
- `035_agent_dagi_audit.sql`
- `036_node_metrics_extended.sql`
- `037_node_agents_complete.sql`
- `038_agent_prompts_full_coverage.sql`
- `039_node_registry_self_healing.sql`

## 🔧 КРОК 1: Локально — Закомітити та запушити

    cd /Users/apple/github-projects/microdao-daarion

    # Додати всі зміни
    git add .

    # Закомітити
    git commit -m "feat: Node Self-Healing, DAGI Audit, Agent Prompts, Infra Invariants

    - Node Registry for self-healing (migration 039)
    - Improved get_all_nodes() with robust fallback
    - Agent Prompts Runtime API for DAGI Router
    - DAGI Router Audit endpoints
    - Node metrics and Guardian/Steward APIs
    - check-invariants.py for deploy verification
    - node-bootstrap.sh for node self-registration
    - node-guardian-loop.py for continuous self-healing
    - Updated Node Directory UI with better error handling
    - Node Cabinet with metrics cards and DAGI Router card"

    # Запушити
    git push origin main

## 🖥️ КРОК 2: На сервері NODE1 (Hetzner)

### 2.1. SSH на сервер

    ssh root@<NODE1_IP>
    # або через ваш алиас
    ssh node1

### 2.2. Перейти в директорію проєкту

    cd /opt/daarion
    # або ваш шлях до проєкту

### 2.3. Оновити код

    git pull origin main

### 2.4. Застосувати міграції

    # Підключитися до PostgreSQL
    docker exec -it daarion-postgres psql -U daarion_user -d daarion

    # Або напряму через psql
    PGPASSWORD=<password> psql -h localhost -U daarion_user -d daarion

    # Виконати міграції послідовно:
    \i migrations/034_agent_prompts_seed.sql
    \i migrations/035_agent_dagi_audit.sql
    \i migrations/036_node_metrics_extended.sql
    \i migrations/037_node_agents_complete.sql
    \i migrations/038_agent_prompts_full_coverage.sql
    \i migrations/039_node_registry_self_healing.sql

    # Вийти
    \q

### 2.5. Перебілдити і перезапустити сервіси

    # Зупинити сервіси
    docker compose -f docker-compose.all.yml down

    # Перебілдити
    docker compose -f docker-compose.all.yml build

    # Запустити
    docker compose -f docker-compose.all.yml up -d

### 2.6. Перевірити здоров'я

    # Перевірити статус контейнерів
    docker ps | grep daarion

    # Перевірити логи city-service
    docker logs -f daarion-city-service --tail 100

    # Перевірити /healthz
    curl http://localhost:7001/healthz

    # Перевірити /public/nodes
    curl http://localhost:7001/public/nodes | jq

## 🔍 КРОК 3: Перевірка інваріантів

    # На сервері (або локально якщо є доступ)
    python3 scripts/check-invariants.py --base-url http://localhost:7001

    # Очікуваний результат:
    # ✅ ALL INVARIANTS PASSED
    # або
    # ⚠️ WARNINGS (деякі можуть бути нормальними)

## 🧪 КРОК 4: Smoke-тести

    # Якщо встановлено pytest
    pytest tests/test_infra_smoke.py -v --base-url http://localhost:7001

## 🌐 КРОК 5: Перевірка в браузері

1. Node Directory: https://daarion.space/nodes
2. Повинні відображатися NODE1 і NODE2

3. Без "Помилка завантаження нод"

4. Node Cabinet: https://daarion.space/nodes/node-1-hetzner-gex44

5. Метрики CPU/GPU/RAM/Disk
6. DAGI Router Card

7. Guardian/Steward агенти

8. Agents: https://daarion.space/agents

9. System Prompts для агентів

## 🔄 КРОК 6 (опційно): Node Bootstrap

Якщо ноди не з'являються після міграції:

    # На NODE1
    NODE_ID=node-1-hetzner-gex44 \
    NODE_NAME="NODE1 — Hetzner GEX44" \
    NODE_ENVIRONMENT=production \
    NODE_ROLES=production,gpu,ai_runtime,storage,matrix \
    ./scripts/node-bootstrap.sh

    # На NODE2 (якщо потрібно)
    NODE_ID=node-2-macbook-m4max \
    NODE_NAME="NODE2 — MacBook Pro M4 Max" \
    NODE_ENVIRONMENT=development \
    NODE_ROLES=development,gpu,ai_runtime,testing \
    ./scripts/node-bootstrap.sh

## ❌ Rollback (якщо щось пішло не так)

    # Відкотити код
    git reset --hard HEAD~1
    git push -f origin main

    # На сервері
    git pull origin main
    docker compose -f docker-compose.all.yml down
    docker compose -f docker-compose.all.yml up -d

## 📊 Очікуваний результат

Після успішного деплою:

Компонент | URL | Очікуваний статус
--- | --- | ---
Health | /healthz | `{"status": "ok"}`
Nodes | /public/nodes | `{"items": [...], "total": 2}`
Node Cabinet | /nodes/{id} | Метрики + DAGI + Agents
Invariants | check-invariants.py | ✅ PASSED

## 🆘 Troubleshooting

### "Failed to fetch nodes"

1. Перевірити логи: `docker logs daarion-city-service`
2. Перевірити чи є записи в node_cache: `SELECT * FROM node_cache;`
3. Застосувати міграцію 039

### "node_registry does not exist"

    \i migrations/039_node_registry_self_healing.sql

### "Ноди не відображаються"

    # Перевірити node_cache
    docker exec -it daarion-postgres psql -U daarion_user -d daarion -c "SELECT node_id, node_name FROM node_cache;"

    # Якщо порожньо — запустити bootstrap
    ./scripts/node-bootstrap.sh