Uptime Kuma 是一个自建的站点可用性监控面板:填一个网址,它按固定间隔去访问,把每次结果画成一条心跳色块,掉线就发通知。前端 Vue、后端 Node,数据落 SQLite。这篇在 Windows 上从源码构建起服务,建了一个监控项,把两次真实探测的结果记下来。
npm ci 被拦,换独立缓存 53 秒装完
npm ci 7 分 44 秒后失败(safe-delete 拦下缓存清理)
npm install --cache 新目录 changed 72 packages in 53s
node_modules 501 MB,857 个顶层目录
源码包 2,280,392 字节(2.1.3 tag 的 zip)
第一次用 npm ci 装到一半被这台机器上的删除拦截工具打断,报 SAFE_DELETE_BULK_CONFIRM_REQUIRED,指向 npm 缓存里的临时目录。换成独立缓存目录再跑 npm install,只补了 72 个包,53 秒收工。包已经落地但二进制链接没建,后面单独重建了一次。
构建 21 秒,主包 2119.86 kB
npm run build 21.1 秒
assets/index-*.js 2119.86 kB(brotli 后 459.61 kB)
assets/index-*.css 315.93 kB(brotli 后 34.63 kB)
assets/zh-CN-*.js 107.79 kB(brotli 后 35.59 kB)
assets/PingChart-*.js 179.84 kB(brotli 后 55.41 kB)
前端是 Vue 打包出来的单页应用,主包两兆出头,压缩后传到浏览器 460 kB 左右。语言包是独立 chunk,中文那份 107.79 kB,所以只在切到中文时才下载。图表组件也拆出去了,首屏不会带上。
缺 sqlite3 原生绑定,rebuild 才起得来
启动报错 Cannot find module 'napi-v6-win32-x64/node_sqlite3.node'
修复 npm rebuild @louislam/sqlite3
过程 node-pre-gyp 下载 napi-v6-win32-x64-unknown.tar.gz 并解出 1 个 .node
这个包用的是 @louislam/sqlite3,原生模块靠 node-pre-gyp 在安装时下载预编译二进制。前面 npm 中断导致这一步没跑,Node 起来就报找不到 .node 文件。补一条 rebuild 就好,不用装 Visual Studio 编译链。
首次启动先选数据库,再建账号
| 步骤 | 页面 | 要填什么 |
|---|---|---|
| 1 | /setup-database | 选 MariaDB/MySQL 或 SQLite,本次选 SQLite |
| 2 | 初始化中 | 显示 Setting up the database,等它建表 |
| 3 | /setup | 用户名 + 两遍密码,建管理员 |
| 4 | /dashboard | 直接进面板,没有邮箱验证这一步 |
2.1.3 比老版本多了一步选数据库,选完会写一个 data/db-config.json,之后启动就按这个文件连。SQLite 模式下建库完成是 kuma.db 61,440 字节,29 张表。整个面板的中文是内置的,右上角下拉切语言即可。
加监控只要名称和 URL
Monitor Type HTTP(s)
Friendly Name 本站首页
URL http://127.0.0.1:3020/
Heartbeat Interval 60 秒
Retries 0(失败一次就算掉线)
Request Timeout 48 秒
表单左侧是 General,右侧是 Notifications 与 Proxy,没配通知时那两栏显示 Not available。类型下拉里还有 TCP 端口、Ping、DNS、关键字、Docker 容器这些,本次只用 HTTP(s)。间隔单位是秒,填 60 表示每分钟探一次,最低可以压到 20 秒。
两次心跳:一条 200,一条 502
id 1 status=1(Up) 200 - OK ping 10 毫秒
id 2 status=0(Down) Request failed with status code 502 ping 为空
第一条是正常探测,详情页显示 Up、Response 10 毫秒、24 小时可用率 100%。第二条出现在服务进程被关掉之后,面板上立刻变成红色 Down,事件表里写成 502。这个 502 不是目标站点返回的,是前端调接口时后端已经不在,所以记录里 ping 是空的。也就是说:面板本身挂了,最后一条心跳会变成一个假故障。
数据都在一个 61 KB 的文件里
| 项目 | 实测值 |
|---|---|
| 数据库 | data/kuma.db,61,440 字节 |
| 表数量 | 29 |
| 监控项 | 1 条(本站首页,间隔 60 秒) |
| 心跳记录 | 2 条:1 条 Up、1 条 Down |
| 平均响应 | 10.0 毫秒 |
备份就是拷 data 目录,没有外部依赖。注意到心跳表只存一条记录的 ping 值,掉线那次是 NULL,统计平均响应时会自动跳过,这一点在做容量估算时用得上。
实测范围:Windows 10 22H2(10.0.19045.6466) / Uptime Kuma 2.1.3 / Node 22.22.2 / SQLite / 2026-10-22。通知渠道、状态页、Docker 监控、多用户权限都没有验证,不作结论。











