为什么要自建监控
站点挂了你往往是最后一个知道的人——通常是访客先告诉你。免费拨测服务一般 5 分钟一次、监控项有限、告警渠道也受限。在自有服务器上跑一个 Uptime Kuma:HTTP/TCP/Ping/关键词/证书到期都能监控,间隔自己定,告警推到 Telegram、邮件、企业微信、钉钉、Bark 等渠道(官方 README 标称支持 90+ 通知服务),数据留在自己手里。
适用场景:WordPress 站点、VPS 上的面板与服务、群晖/NAS 上的自建应用、家宽小主机。
前置条件
- 一台能跑 Docker 的机器:VPS(Debian/Ubuntu/CentOS)、群晖、软路由都行,已装 Docker 与 Compose v2。
- 想从外网访问面板的话,准备一个子域名,例如
status.example.com。Uptime Kuma 不支持子目录(官方 Wiki 明确说明),别打算放在example.com/kuma下。 - 一个能收消息的 Telegram 账号,或一个 SMTP 邮箱(QQ 邮箱开授权码也可)。
- 资源占用很小,1 核 512M 足够。
步骤
1. 部署容器
新建目录,写一个 compose 文件:
services:
uptime-kuma:
image: louislam/uptime-kuma:2
container_name: uptime-kuma
restart: unless-stopped
ports:
- "127.0.0.1:3001:3001"
volumes:
- ./data:/app/data
environment:
- TZ=Asia/Shanghai
docker compose up -d
docker compose ps
这里的端口故意写成 127.0.0.1:3001:3001,只监听本机,之后靠反向代理对外;如果只在局域网用、不打算对公网开放,改成 "3001:3001" 即可。官方仓库的 compose.yaml 用的就是 louislam/uptime-kuma:2、restart: unless-stopped、挂载 ./data:/app/data。截至写这篇文章时,:2 对应的最新版本是 2.5.5(Docker Hub 该 tag 的推送时间为 2026-09-16),要固定版本就把 image 写成 louislam/uptime-kuma:2.5.5。
不用 compose 也可以:
docker run -d --restart=unless-stopped --name uptime-kuma \
-p 127.0.0.1:3001:3001 \
-v uptime-kuma:/app/data \
louislam/uptime-kuma:2
2. 初始化
浏览器打开 http://127.0.0.1:3001(远程机器换成服务器 IP),首次进入会让你创建管理员账号。建完请在设置里开启两步验证(2FA)——这东西一旦暴露在公网,等于把探测全家服务的钥匙挂在门上。
3. 添加监控项
点「添加监控」,常用的四类:
- HTTP(s):填站点地址,检查间隔 60 秒、超时 10 秒、重试 1 次比较稳;顺手勾上证书到期提醒,HTTPS 站点的证书还剩多少天一目了然。
- HTTP(s) 关键词:URL 再加一段页面必然出现的文字(比如站点标题)。状态码 200 但页面是空白或报错页时,只有关键词能发现。
- TCP 端口:填
你的IP:22、你的IP:3306,用来盯 SSH、数据库、Redis 这类不返回 HTTP 的服务。 - 推送(Push):给服务器上的备份脚本、定时任务当心跳。脚本跑完
curl一下监控项给出的推送地址,超时没收到就告警——比「备份脚本静默失败」靠谱得多。
4. 配置告警
Telegram:找 @BotFather 发 /newbot 建机器人拿 Token;再给这个机器人发一条任意消息,然后访问 https://api.telegram.org/bot<你的Token>/getUpdates 取出 chat.id。回到 Kuma:设置 → 通知 → 新增 → Telegram,填 Token 与 Chat ID,点测试。能收到就通了。通知设置里勾上「默认启用」,新建监控会自动带上它。
邮件:设置 → 通知 → 新增 → Email (SMTP),主机填你的 SMTP 服务器,端口 465(TLS)或 587(STARTTLS),填用户名、密码和收发件地址,同样先点测试。
企业微信机器人、钉钉 Webhook、Bark 是同一套流程,填 Webhook 地址即可。
5. 反向代理(需外网访问才做)
Nginx 配置,关键是 WebSocket 那两个头:
server {
listen 443 ssl;
server_name status.example.com;
# ssl_certificate / ssl_certificate_key 与 HTTP 跳转按你现有配置补全
location / {
proxy_pass http://127.0.0.1:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Uptime Kuma 是 WebSocket 架构,少了 Upgrade / Connection 头会出现「页面打得开但一直转圈」。完全跑在代理后面时,去 设置 → 反向代理 → HTTP 头 里把「信任代理(Trust Proxy)」打开,日志里才能看到真实访客 IP。用群晖内置反向代理,在规则里勾上「WebSockets」;套 Cloudflare,记得在 Network 里开启 WebSockets。
验证
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:3001
docker compose ps
docker compose logs --tail=50 uptime-kuma
第一条返回 200 说明面板活着,后两条用来看容器状态和日志。最实在的验证是「用一次假故障测整条告警链路」:加一个必然失败的监控,比如 URL 填 http://127.0.0.1:9/,间隔 20 秒、重试 0 次,等几分钟看手机有没有响。收到了,说明从探测到推送整条路是通的。
常见坑与回滚
- 数据目录别放 NFS:官方明确不支持网络文件系统,会导致数据库异常。映射到本机磁盘或 Docker 卷。
- 监控自己挂了没人知道:这是自建监控的死穴。建议另外找一个外部免费拨测,只监控 Kuma 面板地址或它的推送地址,作为兜底。
- 间隔太短会误报:20 秒间隔配 5 秒超时,线路抖一下能炸出一串告警。公网站点用 60 秒加 1 次重试更实用。官方 README 标称最小间隔 20 秒,具体以你的版本为准。
- 升级:
docker compose pull && docker compose up -d。 - 回滚:把 compose 里的 image 改成具体版本号(如
louislam/uptime-kuma:2.5.5)后重新docker compose up -d。数据都在./data,升级前先tar czf kuma-$(date +%F).tar.gz data备份,回滚时连数据一起换回去。 - 磁盘:心跳历史会持续增长,跑久了留意
./data体积,面板里可以调整历史保留策略。
先把站盯起来,别的优化以后再说。宕机时早三分钟知道,可能就少几个关掉页面再也不回来的访客。



![[教程][服务器]在阿里云服务器上卸载AliYunDunMonito(阿里盾)-小绵羊的小窝](https://www.littlesheep.cc/wp-content/uploads/2025/12/114612929920251229005735.png)

![[免费][教程]子比主题美化,优化教程-小绵羊的小窝](https://www.littlesheep.cc/wp-content/uploads/2025/12/4e545f1d2520251229000705.png)
![[免费][插件]将WordPress图片上传到LskyPro蓝空图床的插件-小绵羊的小窝](https://www.littlesheep.cc/wp-content/uploads/2024/10/a4d337b0d120241001104444.jpg)

![[教程][笔记]Centos7宝塔下安装ImageMagick,无法安装webp扩展解决办法-小绵羊的小窝](https://www.littlesheep.cc/wp-content/uploads/2023/11/Picture_Repair-051-scaled.jpg)
![[资源][教程]AI SEO - WordPress插件-小绵羊的小窝](https://www.littlesheep.cc/wp-content/uploads/2026/01/9f396016b220260112151830.png)



暂无评论内容