本地开发与调试
本文档用于在本机直接跑通 registry 与 registry-ui,并插入一批默认演示节点,方便先做服务端和后台开发,不依赖真实边缘节点。
一、目标
本地开发模式下,我们只启动:
- MySQL
management/registrymanagement/registry-ui
先不启动:
- Prometheus
- Grafana
- nginx
- Cloudflare
这套模式适合开发下面这些功能:
- 节点台账
- 线路管理
- 订阅生成
- 管理后台页面
- RBAC 与审计
二、前提
本地需要有:
- Docker
- Go
- Node.js + npm
建议统一使用 127.0.0.1,不要混用 localhost 与 127.0.0.1,这样可以避免 Cookie 与跨域调试问题。
三、启动 MySQL
先起一个本地 MySQL 容器:
bash
docker run --name hive-mysql \
-e MYSQL_ROOT_PASSWORD=root \
-e MYSQL_DATABASE=hive_registry \
-e MYSQL_USER=hive \
-e MYSQL_PASSWORD=hive \
-p 3306:3306 \
-d mysql:8说明:
- 数据库名:
hive_registry - 用户名:
hive - 密码:
hive
如果容器已经存在,可直接:
bash
docker start hive-mysql四、启动后端 registry
进入后端目录:
bash
cd /home/kent/rk3528-hive/management/registry设置本地开发环境变量:
bash
export LISTEN_ADDR=127.0.0.1:8080
export MYSQL_HOST=127.0.0.1
export MYSQL_PORT=3306
export MYSQL_USER=hive
export MYSQL_PASSWORD=hive
export MYSQL_DB=hive_registry
export ADMIN_USER=admin
export ADMIN_PASS=admin123
export ADMIN_SESSION_SECRET=dev-session-secret
export API_SECRET=dev-api-secret
export CORS_ALLOW_ORIGINS=http://127.0.0.1:3000
export ADMIN_COOKIE_SAMESITE=lax
# 节点探测(可选,不配置则探测循环会静默失败)
# export PROMETHEUS_URL=http://127.0.0.1:4230直接启动:
bash
go run .后端第一次启动时会自动:
- 建表
- 初始化 RBAC
- 在用户表为空时创建默认管理员
健康检查:
bash
curl http://127.0.0.1:8080/health五、插入本地演示数据
后端启动并完成建表后,执行:
bash
cd /home/kent/rk3528-hive/management/registry
make seed-local-demo如果你本地数据库账号密码不是文档里的示例值,先显式传入:
bash
cd /home/kent/rk3528-hive/management/registry
MYSQL_USER=root MYSQL_PASSWORD=123456 make seed-local-demo默认会插入:
- 4 个演示节点
- 2 个演示订阅分组
- 2 条演示线路(日本家宽、亚洲优化)
数据文件在:
management/registry/dev/seed-local-demo.sql
脚本在:
management/registry/dev/seed-local-demo.sh
默认演示节点包括:
JP-TokyoHK-HongKongSG-SingaporeUS-LosAngeles
其中故意保留了一个 tailscale_ip = pending 的节点,用来模拟离线或未接入场景。
六、启动前端 registry-ui
进入前端目录:
bash
cd /home/kent/rk3528-hive/management/registry-ui指定 API 地址并启动开发服务器:
bash
NEXT_PUBLIC_API_BASE=http://127.0.0.1:8080 \
npm run dev -- --hostname 127.0.0.1 --port 3000注意:
NEXT_PUBLIC_API_BASE必须在启动npm run dev之前就带上- 如果你改了这个变量,必须重启前端开发服务器
- 如果没带这个变量,前端会默认请求
/api,也就是打到127.0.0.1:3000自己身上,而不是 Go 后端
打开:
text
http://127.0.0.1:3000/login默认管理员账号:
- 用户名:
admin - 密码:
admin123
七、本地调试建议
1. 看 API 是否正常
列出节点:
bash
curl --cookie-jar /tmp/hive-cookie.txt \
-H 'Content-Type: application/json' \
-d '{"username":"admin","password":"admin123"}' \
http://127.0.0.1:8080/admin/login
curl --cookie /tmp/hive-cookie.txt \
http://127.0.0.1:8080/nodes2. 看订阅是否正常
bash
curl --cookie /tmp/hive-cookie.txt \
http://127.0.0.1:8080/subscription
curl --cookie /tmp/hive-cookie.txt \
http://127.0.0.1:8080/subscription/clash3. 当前前端依赖的跨域设置
本地前后端是跨端口访问,所以后端必须允许:
CORS_ALLOW_ORIGINS=http://127.0.0.1:3000
前端默认会携带 Cookie:
WITH_CREDENTIALS = true
所以不要把前端切到别的 host,除非你同步更新 CORS。
八、常用重置方式
清空数据库重来
如果你只是本地演示环境,最简单的方式是删除 MySQL 容器:
bash
docker rm -f hive-mysql然后重新执行:
- 启动 MySQL
- 启动
registry - 执行
make seed-local-demo - 启动
registry-ui
只重刷演示数据
如果表结构没变,只想重新插入演示数据:
bash
cd /home/kent/rk3528-hive/management/registry
make seed-local-demo这个脚本是幂等的,重复执行不会因为主键冲突直接失败。
九、常见问题
1. 405 Method Not Allowed
如果你在登录或加载页面时看到:
text
Generic Error: status: 405; status text: Method Not Allowed最常见原因是:
- 前端请求没有打到
127.0.0.1:8080 - 而是打到了
127.0.0.1:3000/api/...
排查方法:
- 打开浏览器开发者工具,看失败请求的 URL
- 如果 URL 是
http://127.0.0.1:3000/api/...,说明NEXT_PUBLIC_API_BASE没生效 - 停掉前端,重新执行:
bash
cd /home/kent/rk3528-hive/management/registry-ui
NEXT_PUBLIC_API_BASE=http://127.0.0.1:8080 \
npm run dev -- --hostname 127.0.0.1 --port 3000再单独确认后端是通的:
bash
curl http://127.0.0.1:8080/health2. 登录后立刻跳回 /login
通常是下面两个问题之一:
- 前后端 host 不一致,比如一边用
localhost,一边用127.0.0.1 CORS_ALLOW_ORIGINS没包含http://127.0.0.1:3000
建议统一使用:
- 前端:
http://127.0.0.1:3000 - 后端:
http://127.0.0.1:8080
十、适用范围
这套本地模式只用于:
- 服务端开发
- UI 联调
- 管理流程验证
- 订阅格式验证
它不模拟真实边缘节点的以下行为:
- provision
- 主动注册以后的状态变化
- 周期性心跳
- 节点版本变更
- 实时流量数据
这些能力后续如果要验证,需要再补专门的模拟器或等真实节点升级。