本文由 AI 协助从旧站迁移,尚未完成逐篇人工审校;内容如有疏漏,将在复核后修订。
搞 HomeLab 的人,最后都会殊途同归地买台 UPS。毕竟看着那几块存满了“学习资料”的硬盘,谁也不想在停电时赌一把运气。
但 UPS 买回来后,怎么看状态就成了个问题。为了能随时随地盯一眼电量,我前前后后折腾了三个版本。
🛠️ 从“能看”到“优雅”:三个版本的演进
v1.0:PVE 备注栏的“暴力补丁”
最开始的想法特别简单直接:既然我天天盯着 PVE 后台,那把 UPS 信息塞进 PVE 不就行了?
于是我写了个 Python 脚本,定时抓取 upsc 的数据,然后通过 PVE 的 API 强行写进节点的“备注”里。
- 现状:能看,但丑。备注栏那一堆乱糟糟的字符,每次看都觉得自己像个原始人。
v2.0:魔改 PVE 的状态面板
后来不满足于备注栏,我开始打 PVE 源码的主意。通过修改 PVE 的 ExtJS 文件,我强行在宿主机的状态监控页里插了一个 UPS 的展示位。
- 现状:看着很高级,和系统融为一体。但有个致命伤:只要 PVE 一更新,改动就全没了,得重新修代码,简直是体力活。
v3.0:独立 Web 版(UPS Web)
也就是这次要分享的终极方案:不依赖宿主机系统,做一个彻底独立的监控页。
这一次我用 Node.js 重新写了一套逻辑,最核心的一点是:我用纯 JS 实现了 NUT(Network UPS Tools)客户端协议。 这意味着它不再需要你安装任何 upsc 命令,只要能跑 Node 或 Docker 的地方,它就能直接和你的 UPS 服务器对话。
📦 部署指南
为了方便复刻,我将 v3.0 整理成了标准项目。推荐使用 Docker 部署,以保持环境整洁。
方法一:使用 Docker(推荐)
为了确保你在网页上修改的配置不会因为容器重启而丢失,请务必挂载配置文件:
# 创建配置存储文件 touch config.json # 运行容器 docker run -d \ --name ups-web \ -p 8765:8765 \ -v $(pwd)/config.json:/app/config.json \ -e HOST=0.0.0.0 \ -e PORT=8765 \ --restart always \ ups-web
方法二:源码运行
如果你想直接在 Node.js 环境下跑:
git clone https://github.com/olinll/nut-guard.git cd nut-guard npm install npm start
⚠️ 安全与避坑提醒
该项目暂未内置登录鉴权,暴露到公网存在安全风险。建议配合 Nginx Access List 限制访问,或仅在局域网内使用。
- 权限控制:该项目暂未内置登录鉴权,建议配合 Nginx Proxy Manager 加上 Access List,或者仅在局域网内使用。
- 配置冲突:通过 URL 参数
?ip=10.0.0.1临时查看时,不会改写config.json。 - 持久化:如果是在 PVE 容器(LXC)里跑,记得开启相应的网络权限。
🎬 结语
从最开始在备注栏抠字,到如今拥有一个独立的监控大屏,这不仅是为了护住那几块硬盘,更是折腾 HomeLab 的乐趣所在。
目前项目已在 GitHub 开源:



评论区
评论加载中...