203 lines
5.2 KiB
Markdown
203 lines
5.2 KiB
Markdown
# 🚀 Node Registry — Quick Start
|
||
|
||
**1-минутний гайд для швидкого старту**
|
||
|
||
---
|
||
|
||
## ✅ Що готово
|
||
|
||
Node Registry Service **повністю реалізовано** (Infrastructure + Full API by Cursor):
|
||
- ✅ FastAPI application з повним API
|
||
- ✅ SQLAlchemy ORM models (Node, NodeProfile)
|
||
- ✅ CRUD operations (register, heartbeat, list, get)
|
||
- ✅ PostgreSQL database (node_registry) зі схемою
|
||
- ✅ Docker image configuration
|
||
- ✅ docker-compose integration
|
||
- ✅ Deployment script з firewall rules
|
||
- ✅ Bootstrap tool для автоматичної реєстрації
|
||
- ✅ Unit та integration tests
|
||
|
||
---
|
||
|
||
## 🚀 Deploy на Node #1 (Production)
|
||
|
||
### Швидкий старт (з автоматичними скриптами):
|
||
```bash
|
||
# 1. Ініціалізувати БД (якщо city-db є)
|
||
./scripts/init_node_registry_db.sh
|
||
|
||
# 2. Запустити сервіс
|
||
docker-compose up -d node-registry
|
||
|
||
# 3. Протестувати API
|
||
./scripts/test_node_registry.sh
|
||
|
||
# 4. Зареєструвати ноду
|
||
python3 -m tools.dagi_node_agent.bootstrap --role test-node --labels test
|
||
|
||
# 5. Перевірити в Router
|
||
curl http://localhost:9102/nodes
|
||
```
|
||
|
||
### Deployment script (повний deploy):
|
||
```bash
|
||
./scripts/deploy-node-registry.sh
|
||
```
|
||
|
||
Скрипт автоматично:
|
||
1. Перевірить з'єднання з Node #1
|
||
2. Ініціалізує базу даних
|
||
3. Згенерує secure password
|
||
4. Зб'є Docker image
|
||
5. Запустить сервіс
|
||
6. Налаштує firewall
|
||
7. Перевірить deployment
|
||
|
||
### Manual deploy:
|
||
```bash
|
||
# 1. SSH до Node #1
|
||
ssh root@144.76.224.179
|
||
cd /opt/microdao-daarion
|
||
|
||
# 2. Ініціалізувати БД
|
||
docker exec -i dagi-postgres psql -U postgres < services/node-registry/migrations/init_node_registry.sql
|
||
|
||
# 3. Додати password до .env
|
||
echo "NODE_REGISTRY_DB_PASSWORD=$(openssl rand -base64 32)" >> .env
|
||
|
||
# 4. Запустити
|
||
docker-compose up -d --build node-registry
|
||
|
||
# 5. Перевірити
|
||
curl http://localhost:9205/health
|
||
```
|
||
|
||
---
|
||
|
||
## 🧪 Тестування локально (Node #2)
|
||
|
||
```bash
|
||
# Install dependencies
|
||
cd services/node-registry
|
||
pip install -r requirements.txt
|
||
|
||
# Run
|
||
export NODE_REGISTRY_ENV=development
|
||
python -m app.main
|
||
|
||
# Test
|
||
curl http://localhost:9205/health
|
||
open http://localhost:9205/docs
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 Endpoints
|
||
|
||
### Node Registry Service (Port 9205)
|
||
|
||
| Endpoint | Method | Status | Description |
|
||
|----------|--------|--------|-------------|
|
||
| `/health` | GET | ✅ Working | Health check (with DB) |
|
||
| `/metrics` | GET | ✅ Working | Prometheus metrics |
|
||
| `/` | GET | ✅ Working | Service info |
|
||
| `/api/v1/nodes/register` | POST | ✅ **Working** | Register/update node |
|
||
| `/api/v1/nodes/heartbeat` | POST | ✅ **Working** | Update heartbeat |
|
||
| `/api/v1/nodes` | GET | ✅ **Working** | List nodes (filters: role, label, status) |
|
||
| `/api/v1/nodes/{id}` | GET | ✅ **Working** | Get node details |
|
||
| `/api/v1/profiles/{role}` | GET | ✅ **Working** | Get role profile |
|
||
|
||
### DAGI Router Integration (Port 9102)
|
||
|
||
| Endpoint | Method | Status | Description |
|
||
|----------|--------|--------|-------------|
|
||
| `/nodes` | GET | ✅ **NEW** | List nodes (proxy to Registry, filter by role) |
|
||
|
||
---
|
||
|
||
## 🗄️ Database
|
||
|
||
**Database:** `node_registry`
|
||
**User:** `node_registry_user`
|
||
**Tables:**
|
||
- `nodes` (2 rows: Node #1, Node #2 pre-registered)
|
||
- `node_profiles` (empty)
|
||
- `heartbeat_log` (empty)
|
||
|
||
---
|
||
|
||
## 🔌 Configuration
|
||
|
||
**Port:** 9205 (internal only)
|
||
**Access:** LAN/VPN only, no public internet
|
||
|
||
**Environment:**
|
||
```bash
|
||
NODE_REGISTRY_DB_HOST=postgres
|
||
NODE_REGISTRY_DB_PORT=5432
|
||
NODE_REGISTRY_DB_NAME=node_registry
|
||
NODE_REGISTRY_DB_USER=node_registry_user
|
||
NODE_REGISTRY_DB_PASSWORD=***auto-generated***
|
||
NODE_REGISTRY_HTTP_PORT=9205
|
||
NODE_REGISTRY_ENV=production
|
||
NODE_REGISTRY_LOG_LEVEL=info
|
||
```
|
||
|
||
---
|
||
|
||
## 🔧 Management
|
||
|
||
```bash
|
||
# Start
|
||
docker-compose up -d node-registry
|
||
|
||
# Restart
|
||
docker-compose restart node-registry
|
||
|
||
# Logs
|
||
docker logs -f dagi-node-registry
|
||
|
||
# Stop
|
||
docker-compose stop node-registry
|
||
|
||
# Test API
|
||
./scripts/test_node_registry.sh
|
||
|
||
# Test Bootstrap
|
||
./scripts/test_bootstrap.sh
|
||
|
||
# Initialize DB (if needed)
|
||
./scripts/init_node_registry_db.sh
|
||
```
|
||
|
||
---
|
||
|
||
## 📚 Full Documentation
|
||
|
||
- **Detailed Status:** [NODE-REGISTRY-STATUS.md](./NODE-REGISTRY-STATUS.md)
|
||
- **Setup Guide:** [README_NODE_REGISTRY_SETUP.md](./README_NODE_REGISTRY_SETUP.md)
|
||
- **Service README:** [services/node-registry/README.md](./services/node-registry/README.md)
|
||
- **API Docs:** [docs/node_registry/overview.md](./docs/node_registry/overview.md)
|
||
- **Deploy Script:** [scripts/deploy-node-registry.sh](./scripts/deploy-node-registry.sh)
|
||
- **Test Scripts:** `scripts/test_node_registry.sh`, `scripts/test_bootstrap.sh`
|
||
|
||
---
|
||
|
||
## ✅ Виконано Cursor
|
||
|
||
Усі компоненти реалізовані:
|
||
- ✅ Database models (SQLAlchemy: Node, NodeProfile)
|
||
- ✅ API logic (registration, heartbeat, listing)
|
||
- ✅ CRUD operations (`crud.py`)
|
||
- ✅ Pydantic schemas (`schemas.py`)
|
||
- ✅ Bootstrap tool (`tools/dagi_node_agent/bootstrap.py`)
|
||
- ✅ Unit та integration tests
|
||
- ⚠️ Authentication (future enhancement)
|
||
|
||
**Status:** ✅ Ready for Production Deployment
|
||
|
||
---
|
||
|
||
**Created:** 2025-01-17 by WARP AI
|
||
**For:** DAGI Stack Network Management
|