Config policies (16 files): alert_routing, architecture_pressure, backlog, cost_weights, data_governance, incident_escalation, incident_intelligence, network_allowlist, nodes_registry, observability_sources, rbac_tools_matrix, release_gate, risk_attribution, risk_policy, slo_policy, tool_limits, tools_rollout Ops (22 files): Caddyfile, calendar compose, grafana voice dashboard, deployments/incidents logs, runbooks for alerts/audit/backlog/incidents/sofiia/voice, cron jobs, scripts (alert_triage, audit_cleanup, migrate_*, governance, schedule), task_registry, voice alerts/ha/latency/policy Docs (30+ files): HUMANIZED_STEPAN v2.7-v3 changelogs and runbooks, NODA1/NODA2 status and setup, audit index and traces, backlog, incident, supervisor, tools, voice, opencode, release, risk, aistalk, spacebot Made-with: Cursor
7.1 KiB
НОДА1 — Deploy Humanized Stepan v3
Дата підготовки: 2026-02-25
Статус: ready-to-deploy
LLM: DeepSeek (primary) або OpenAI (fallback)
Передумови
- SSH доступ до НОДА1 (root@144.76.224.179 або root@2a01:4f8:201:2a6::2)
DEEPSEEK_API_KEYабоOPENAI_API_KEY(хоча б один)- Telegram user_id оператора для
AGX_OPERATOR_IDS
Крок 1 — Скопіювати файли на НОДА1
З локальної машини (де є репо):
cd /path/to/microdao-daarion
# Всі Stepan v3 модулі
scp -6 \
crews/agromatrix_crew/llm_factory.py \
crews/agromatrix_crew/depth_classifier.py \
crews/agromatrix_crew/memory_manager.py \
crews/agromatrix_crew/light_reply.py \
crews/agromatrix_crew/telemetry.py \
crews/agromatrix_crew/reflection_engine.py \
crews/agromatrix_crew/style_adapter.py \
crews/agromatrix_crew/session_context.py \
crews/agromatrix_crew/proactivity.py \
crews/agromatrix_crew/run.py \
crews/agromatrix_crew/stepan_system_prompt_v2.txt \
crews/agromatrix_crew/stepan_system_prompt_v2.7.txt \
"root@[2a01:4f8:201:2a6::2]:/opt/microdao-daarion/crews/agromatrix_crew/"
# Agents з DeepSeek LLM
scp -6 \
crews/agromatrix_crew/agents/stepan_orchestrator.py \
crews/agromatrix_crew/agents/operations_agent.py \
crews/agromatrix_crew/agents/iot_agent.py \
crews/agromatrix_crew/agents/platform_agent.py \
crews/agromatrix_crew/agents/spreadsheet_agent.py \
crews/agromatrix_crew/agents/sustainability_agent.py \
"root@[2a01:4f8:201:2a6::2]:/opt/microdao-daarion/crews/agromatrix_crew/agents/"
# gateway-bot http_api.py (з оновленим sys.path та stepan_enabled)
scp -6 \
gateway-bot/http_api.py \
"root@[2a01:4f8:201:2a6::2]:/opt/microdao-daarion/gateway-bot/"
Крок 2 — Скопіювати crews у gateway-bot volume (на НОДА1)
# НА НОДА1:
# Синхронізуємо crews у gateway-bot volume
rsync -av /opt/microdao-daarion/crews/ /opt/microdao-daarion/gateway-bot/crews/
rsync -av /opt/microdao-daarion/packages/agromatrix-tools/ /opt/microdao-daarion/gateway-bot/agromatrix-tools/ 2>/dev/null || true
# Перевірити що файли є в контейнері
docker exec dagi-gateway-node1 ls /app/gateway-bot/crews/agromatrix_crew/ | head -20
Крок 3 — Налаштувати env (секрети)
# НА НОДА1 — створити/оновити env файл
cat > /opt/microdao-daarion/.env.stepan.node1 << 'EOF'
DEEPSEEK_API_KEY=sk-ВАШИЙ_КЛЮЧ_DEEPSEEK
AGX_STEPAN_MODE=inproc
AGX_OPERATOR_IDS=ВАШ_TELEGRAM_USER_ID
TZ=Europe/Kyiv
EOF
chmod 600 /opt/microdao-daarion/.env.stepan.node1
Потім переконайтесь що docker-compose.node1.yml підключає цей файл у секції gateway → env_file:
# У docker-compose.node1.yml, секція gateway/environment або після volumes:
env_file:
- .env.stepan.node1
Якщо env_file не хочете чіпати — можна додати змінні прямо в секцію
environment:compose файлу якDEEPSEEK_API_KEY=${DEEPSEEK_API_KEY}і export їх у shell передdocker compose up.
Крок 4 — Перезапустити gateway
cd /opt/microdao-daarion
# Варіант А — простий restart (якщо volume і env вже на місці, без rebuild)
docker compose -f docker-compose.node1.yml restart dagi-gateway-node1
sleep 15
# Варіант Б — повний rebuild (якщо змінився Dockerfile або requirements)
docker compose -f docker-compose.node1.yml up -d --build gateway
sleep 30
# Health check
curl -s http://127.0.0.1:9300/health
Крок 5 — Перевірити старт
# Лог старту (20 сек після restart)
docker logs dagi-gateway-node1 --since 3m 2>&1 | grep -E "Stepan|STEPAN|ImportError|ModuleNotFoundError|LLM:" | tail -20
# Env у контейнері (маскований)
docker exec dagi-gateway-node1 env | grep -E "DEEPSEEK|OPENAI|AGX_" | sed 's/=.*/=***/'
# Тест імпортів
docker exec dagi-gateway-node1 python3 -c "
import sys; sys.path.insert(0, '/app/gateway-bot'); sys.path.insert(0, '/app/gateway-bot/agromatrix-tools')
from crews.agromatrix_crew.session_context import load_session
from crews.agromatrix_crew.depth_classifier import classify_depth
from crews.agromatrix_crew.llm_factory import make_llm
print('imports OK')
llm = make_llm()
print('LLM:', type(llm).__name__ if llm else 'None - NO API KEY!')
"
Крок 6 — 5 Smoketests (Telegram, оператор)
| # | Повідомлення | Очікування | Grep |
|---|---|---|---|
| 1 | Привіт |
≤80 символів, без "чим допомогти" | depth=light, crew_launch=false |
| 2 | /whoami |
Показує user_id та is_operator=True | — |
| 3 | Зроби план на завтра по полю 12 |
Deep, crew запущений | depth=deep, crew_launch=true |
| 4 | а на після завтра? |
Light (stability guard або follow-up) | depth=light |
| 5 | Дякую |
≤40 символів | crew_launch=false |
Крок 7 — Telemetry моніторинг (перші 30 хв)
# Всі AGX_STEPAN_METRIC події
docker logs dagi-gateway-node1 --since 30m 2>&1 | grep "AGX_STEPAN_METRIC" | tail -80
# Depth розподіл
docker logs dagi-gateway-node1 --since 30m 2>&1 | grep "AGX_STEPAN_METRIC depth" | \
awk '{for(i=1;i<=NF;i++) if($i~/^depth=/) print $i}' | sort | uniq -c
# Session layer
docker logs dagi-gateway-node1 --since 30m 2>&1 | grep "AGX_STEPAN_METRIC session_"
# LLM (DeepSeek) active
docker logs dagi-gateway-node1 --since 30m 2>&1 | grep "LLM:" | tail -5
Rollback (якщо щось пішло не так)
cd /opt/microdao-daarion
# Відновити попередній http_api.py
git checkout HEAD -- gateway-bot/http_api.py
# Видалити скопійовані crews з volume
rm -rf /opt/microdao-daarion/gateway-bot/crews
rm -rf /opt/microdao-daarion/gateway-bot/agromatrix-tools
# Restart без Stepan
docker compose -f docker-compose.node1.yml restart dagi-gateway-node1
Важливі примітки
-
Volume mount
:ro—gateway-botмонтується як read-only. Томуcrews/іagromatrix-tools/скопійовані прямо в/opt/microdao-daarion/gateway-bot/(і відповідно видимі в контейнері як/app/gateway-bot/crews/). -
fail2ban — при частих SSH-підключеннях сервер тимчасово блокує IP на ~5–10 хвилин. Якщо SSH відмовляє — почекайте 10 хв і пробуйте через IPv6.
-
DeepSeek модель — за замовчуванням
deepseek-chat. Можна змінити черезDEEPSEEK_MODEL=deepseek-reasoner. -
AGX_OPERATOR_IDS— це числові Telegram user_id. Дізнатись свій: написати @userinfobot у Telegram.