## Agents Added - Alateya: R&D, biotech, innovations - Clan (Spirit): Community spirit agent - Eonarch: Consciousness evolution agent ## Changes - docker-compose.node1.yml: Added tokens for all 3 new agents - gateway-bot/http_api.py: Added configs and webhook endpoints - gateway-bot/clan_prompt.txt: New prompt file - gateway-bot/eonarch_prompt.txt: New prompt file ## Fixes - Fixed ROUTER_URL from :9102 to :8000 (internal container port) - All 9 Telegram agents now working ## Documentation - Created PROJECT-MASTER-INDEX.md - single entry point - Added various status documents and scripts Tokens configured: - Helion, NUTRA, Agromatrix (existing) - Alateya, Clan, Eonarch (new) - Druid, GreenFood, DAARWIZZ (configured)
11 KiB
11 KiB
🚨 NODE1 Recovery & Safety Runbook
Version: 1.0
Last Updated: 2026-01-26
Target: НОДА1 Production (144.76.224.179)
0. Golden Signals (що вважаємо нормою)
Health Endpoints (HTTP 200)
| Сервіс | Порт | Endpoint | Container |
|---|---|---|---|
| Router | 9102 | /health |
dagi-router-node1 |
| Gateway | 9300 | /health |
dagi-gateway |
| Memory Service | 8000 | /health |
dagi-memory-service-node1 |
| RAG Service | 9500 | /health |
rag-service-node1 |
| Swapper | 8890 | /health |
swapper-service-node1 |
| Qdrant | 6333 | /healthz |
dagi-qdrant-node1 |
| Vision Encoder | 8001 | /health |
dagi-vision-encoder-node1 |
| Parser Pipeline | 8101 | /health |
parser-pipeline |
| Prometheus | 9090 | /-/healthy |
prometheus |
| Grafana | 3030 | /api/health |
grafana |
By Design (норма — не є проблемою)
| Сервіс | Порт | Статус | Причина |
|---|---|---|---|
| RBAC | 9200 | Internal only | Порт не опублікований, доступ через docker network |
| Image-gen | 8892 | Не запущено | Використовується swapper-service замість |
| Parser | 9400 | Відсутній | Замінено на parser-pipeline:8101 |
1. Тріаж за 2 хвилини
1.1 Підключення до НОДА1
ssh root@144.76.224.179
cd /opt/microdao-daarion
1.2 Статус контейнерів
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | head -30
1.3 Швидкий health check всіх сервісів
echo "=== HEALTH CHECK ===" && \
curl -sS -m 3 -o /dev/null -w "Router 9102: %{http_code}\n" http://127.0.0.1:9102/health && \
curl -sS -m 3 -o /dev/null -w "Gateway 9300: %{http_code}\n" http://127.0.0.1:9300/health && \
curl -sS -m 3 -o /dev/null -w "Memory 8000: %{http_code}\n" http://127.0.0.1:8000/health && \
curl -sS -m 3 -o /dev/null -w "RAG 9500: %{http_code}\n" http://127.0.0.1:9500/health && \
curl -sS -m 3 -o /dev/null -w "Swapper 8890: %{http_code}\n" http://127.0.0.1:8890/health && \
curl -sS -m 3 -o /dev/null -w "Qdrant 6333: %{http_code}\n" http://127.0.0.1:6333/healthz && \
curl -sS -m 3 -o /dev/null -w "Vision 8001: %{http_code}\n" http://127.0.0.1:8001/health && \
curl -sS -m 3 -o /dev/null -w "Parser 8101: %{http_code}\n" http://127.0.0.1:8101/health && \
curl -sS -m 3 -o /dev/null -w "Prometheus 9090: %{http_code}\n" http://127.0.0.1:9090/-/healthy && \
curl -sS -m 3 -o /dev/null -w "Grafana 3030: %{http_code}\n" http://127.0.0.1:3030/api/health
1.4 Логи ключових сервісів
# Router
docker logs dagi-router-node1 --tail 50
# Gateway
docker logs dagi-gateway --tail 50
# Memory Service
docker logs dagi-memory-service-node1 --tail 50
# Qdrant
docker logs dagi-qdrant-node1 --tail 50
2. Плейбуки відновлення
A) Memory Service не може підключитися до Qdrant
Симптоми:
- Memory health → 500
- Логи: "Temporary failure in name resolution" або "connection refused"
Діагностика:
# Перевірити env
docker exec dagi-memory-service-node1 env | grep -E "QDRANT"
# Перевірити DNS resolution
docker exec dagi-memory-service-node1 python3 -c "import socket; print(socket.gethostbyname('dagi-qdrant-node1'))"
Фікс:
# 1. Зупинити і видалити контейнер
docker stop dagi-memory-service-node1
docker rm dagi-memory-service-node1
# 2. Запустити з правильним QDRANT_HOST
docker run -d \
--name dagi-memory-service-node1 \
--network dagi-network \
--network-alias memory-service \
-p 8000:8000 \
-e MEMORY_POSTGRES_HOST=dagi-postgres \
-e MEMORY_POSTGRES_PORT=5432 \
-e MEMORY_POSTGRES_USER=daarion \
-e MEMORY_POSTGRES_PASSWORD=DaarionDB2026! \
-e MEMORY_POSTGRES_DB=daarion_memory \
-e MEMORY_QDRANT_HOST=dagi-qdrant-node1 \
-e MEMORY_QDRANT_PORT=6333 \
-e MEMORY_DEBUG=false \
-e MEMORY_COHERE_API_KEY=nOdOXnuepLku2ipJWpe6acWgAsJCsDhMO0RnaEJB \
--restart unless-stopped \
microdao-daarion-memory-service:latest
# 3. Перевірити
sleep 5 && curl -sS http://127.0.0.1:8000/health
B) Qdrant повільний/падає (диск/пам'ять)
Симптоми: latency, OOM-kill, 5xx
Діагностика:
# Логи
docker logs dagi-qdrant-node1 --tail 100
# Ресурси
df -h
free -m
docker stats --no-stream | grep qdrant
Якщо диск майже повний:
# Очистити старі логи
find /var/log -name "*.log" -mtime +7 -delete
# Список снапшотів Qdrant
curl -s http://localhost:6333/snapshots
# Видалити старі снапшоти (обережно!)
# curl -X DELETE "http://localhost:6333/snapshots/<snapshot_name>"
# Перезапустити Qdrant
docker restart dagi-qdrant-node1
C) Parser Pipeline не обробляє jobs
Симптоми: черга не рухається, RAG не наповнюється
Діагностика:
docker logs parser-pipeline --tail 100
curl -sS http://127.0.0.1:8101/health
Фікс:
docker restart parser-pipeline
sleep 5 && curl -sS http://127.0.0.1:8101/health
D) Grafana/Prometheus не працює
Діагностика:
curl -sS http://127.0.0.1:9090/-/healthy
curl -sS http://127.0.0.1:3030/api/health
docker logs prometheus --tail 50
docker logs grafana --tail 50
Фікс:
docker restart prometheus grafana
E) Gateway не приймає webhook-и
Симптоми: Telegram боти не відповідають
Діагностика:
docker logs dagi-gateway --tail 100 | grep -E "error|webhook|telegram"
curl -sS http://127.0.0.1:9300/health
Фікс:
docker restart dagi-gateway
sleep 5 && curl -sS http://127.0.0.1:9300/health
3. Безпечний стандартний рестарт
Порядок (від edge до core):
# 1. Edge services
docker restart dagi-router-node1 dagi-gateway
# 2. Core services
docker restart rag-service-node1 dagi-memory-service-node1 swapper-service-node1
# 3. Processing pipelines
docker restart dagi-vision-encoder-node1 parser-pipeline
# 4. Observability (в кінці)
docker restart prometheus grafana
# 5. Verify all
sleep 10 && curl -sS http://127.0.0.1:9102/health && echo " Router OK"
НЕ ЧІПАТИ БЕЗ ПОТРЕБИ:
dagi-qdrant-node1— vector DB з данимиdagi-postgres— PostgreSQL з данимиdagi-neo4j-node1— Graph DB з даними
4. Backup / Rollback
Перед ризиковими змінами
# 1. Qdrant snapshot
curl -X POST "http://localhost:6333/snapshots"
# 2. Compose backup
cp docker-compose.node1.yml docker-compose.node1.yml.backup.$(date +%Y%m%d_%H%M%S)
# 3. Перевірити PostgreSQL бекапи
ls -la /opt/backups/postgres/
Відкат compose
# Знайти останній бекап
ls -la docker-compose.node1.yml.backup.*
# Відкотити
cp docker-compose.node1.yml.backup.<timestamp> docker-compose.node1.yml
docker compose -f docker-compose.node1.yml up -d
Відкат Qdrant (restore drill)
# 1. Список снапшотів
curl -s http://localhost:6333/snapshots
# 2. Відновлення (на тестовому інстансі спочатку!)
# УВАГА: це перезапише всі дані!
# curl -X POST "http://localhost:6333/snapshots/recover" \
# -H "Content-Type: application/json" \
# -d '{"location": "file:///qdrant/snapshots/<snapshot_name>"}'
5. Інцидентний протокол
При виникненні проблеми:
- Зафіксувати час + симптом
- Тріаж (Section 1) — локалізувати проблему
- Backup перед змінами (якщо торкаємось даних)
- Мінімальна дія → перевірка health
- Задокументувати в
NODA1-CURRENT-STATUS-YYYY-MM-DD.md:- Причина
- Що змінив
- Як перевіряв
- Що зробити щоб не повторилось
Ескалація
- Level 1: Перезапуск сервісу
- Level 2: Перевірка логів, DNS, мережі
- Level 3: Відкат до backup
- Level 4: Повний rebuild з останнього golden snapshot
6. Контакти та ресурси
- SSH:
ssh root@144.76.224.179 - Grafana: http://144.76.224.179:3030
- Prometheus: http://144.76.224.179:9090
- Qdrant Dashboard: http://144.76.224.179:6333/dashboard
Документація
NODA1-README.md— головний READMEINFRASTRUCTURE.md— повна інфраструктураNODA1-CURRENT-STATUS-*.md— поточний статус
7. Rate Limit / Proxy Recovery
Архітектура захисту (після hardening)
Internet → [UFW] → Nginx:80/443 → Gateway:9300 (localhost)
↓
[Rate Limit: 10 req/s]
↓
[iptables DOCKER-USER]
↓
Internal services (blocked from outside)
Якщо Nginx не працює
# Перевірка статусу
systemctl status nginx
# Перегляд логів
tail -50 /var/log/nginx/error.log
# Перезапуск
systemctl restart nginx
# Якщо config broken
nginx -t
# Відновити з backup
cp /etc/nginx/conf.d/node1-api.conf.backup /etc/nginx/conf.d/node1-api.conf
nginx -t && systemctl reload nginx
Якщо треба тимчасово відкрити порт (для діагностики)
# Тимчасово видалити блокування для порту 9300
iptables -D DOCKER-USER -p tcp --dport 9300 ! -s 127.0.0.1 -j DROP
# Повернути блокування
iptables -I DOCKER-USER -p tcp --dport 9300 ! -s 127.0.0.1 -j DROP
Якщо rate limit занадто strict
# Змінити ліміт в nginx
vim /etc/nginx/conf.d/node1-api.conf
# Знайти: rate=10r/s → rate=20r/s
# Знайти: burst=20 → burst=40
nginx -t && systemctl reload nginx
Відновити iptables після reboot
# Якщо правила зникли після reboot
iptables-restore < /etc/iptables.rules
# Перевірка
iptables -L DOCKER-USER -n | grep DROP
Доступ до Grafana/Prometheus (через SSH tunnel)
# З вашого ноутбука:
ssh -L 3030:localhost:3030 -L 9090:localhost:9090 root@144.76.224.179
# Потім в браузері:
# Grafana: http://localhost:3030
# Prometheus: http://localhost:9090
8. Конфігураційні файли
| Файл | Призначення |
|---|---|
/etc/nginx/conf.d/node1-api.conf |
Nginx proxy + rate limit |
/etc/iptables.rules |
Firewall rules backup |
/opt/microdao-daarion/ops/status.sh |
Health check script |
/opt/microdao-daarion/ops/hardening/apply-node1-firewall.sh |
UFW hardening script |
/opt/microdao-daarion/monitoring/prometheus/rules/node1.rules.yml |
Alerting rules |
Maintained by: DAARION Team
Last Review: 2026-01-26