VPS Monitor 动态化改造:从硬编码到自动发现服务
维护方式(改造后)
加新服务
# 1. 服务启动 → 自动发现(显示 port-XXXX)
# 2. 想美化,编辑配置:
vi /root/vps-monitor/config/services.json
# 加一行:
# { "port": 9999, "name": "New Service", "desc": "...", "category": "...", "public": false, "path": "/" }
# 3. 保存即生效(不用 build!API 每次请求读配置)
删服务
# 服务停了 → 自动消失(不再显示)
# 或从 config/services.json 删除
改描述
vi /root/vps-monitor/config/services.json
# 保存即生效
技术总结
- 多源扫描:Docker + PM2 + 端口 + K8s NodePort,按端口去重(Docker 优先)
- 黑名单过滤:端口 + 进程名双过滤,系统服务自动隐藏
- 配置驱动:`config/services.json` 提供美化信息,不改代码
- curl 补测:配置里有但扫描没到的,用 HTTP 请求测试是否响应
- K8s 特殊处理:NodePort 不走 `ss`,单独用 `kubectl` 扫描
- 前端兼容:状态用 `status === “running”`,不再依赖旧字段
文件清单
| 文件 | 作用 |
|---|---|
src/lib/services-discovery.ts | 扫描逻辑(Docker/PM2/端口/K8s) |
config/services.json | 服务配置(名称/描述/分类) |
src/app/api/vps/route.ts | API(合并扫描 + 配置 + curl 补测) |
src/app/page.tsx | 前端(用 status 判断颜色) |
成果
从「硬编码 13 个服务」到「动态发现 19 个服务」:
- ✅ 服务上下线**自动反映**
- ✅ 系统服务**自动过滤**
- ✅ 名字/描述**配置驱动**(不改代码)
- ✅ K8s NodePort**自动扫描**
- ✅ Nginx 反代服务**curl 补测**
这才是真正的「Monitor」。
本文记录于 2026-09-29。
