# 🚀 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: Локально — Закомітити та запушити ```bash 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 на сервер ```bash ssh root@ # або через ваш алиас ssh node1 ``` ### 2.2. Перейти в директорію проєкту ```bash cd /opt/daarion # або ваш шлях до проєкту ``` ### 2.3. Оновити код ```bash git pull origin main ``` ### 2.4. Застосувати міграції ```bash # Підключитися до PostgreSQL docker exec -it daarion-postgres psql -U daarion_user -d daarion # Або напряму через psql PGPASSWORD= 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. Перебілдити і перезапустити сервіси ```bash # Зупинити сервіси 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. Перевірити здоров'я ```bash # Перевірити статус контейнерів 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: Перевірка інваріантів ```bash # На сервері (або локально якщо є доступ) python3 scripts/check-invariants.py --base-url http://localhost:7001 # Очікуваний результат: # ✅ ALL INVARIANTS PASSED # або # ⚠️ WARNINGS (деякі можуть бути нормальними) ``` --- ## 🧪 КРОК 4: Smoke-тести ```bash # Якщо встановлено pytest pytest tests/test_infra_smoke.py -v --base-url http://localhost:7001 ``` --- ## 🌐 КРОК 5: Перевірка в браузері 1. **Node Directory:** https://daarion.space/nodes - Повинні відображатися NODE1 і NODE2 - Без "Помилка завантаження нод" 2. **Node Cabinet:** https://daarion.space/nodes/node-1-hetzner-gex44 - Метрики CPU/GPU/RAM/Disk - DAGI Router Card - Guardian/Steward агенти 3. **Agents:** https://daarion.space/agents - System Prompts для агентів --- ## 🔄 КРОК 6 (опційно): Node Bootstrap Якщо ноди не з'являються після міграції: ```bash # На 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 (якщо щось пішло не так) ```bash # Відкотити код 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" ```sql \i migrations/039_node_registry_self_healing.sql ``` ### "Ноди не відображаються" ```bash # Перевірити 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 ```