网站挂了半天,是访客留言才知道?用开源的 Uptime Kuma 自己搭一个监控面板,网站、接口、服务器一出问题,几十秒内就推送到 Telegram、邮件或企业微信。
本文介绍 Uptime Kuma 是什么、能监控什么,怎样用 Docker 安装并配置 HTTPS,以及最常用的 Telegram 通知和公开状态页怎么设置。项目数据于 2026 年 10 月 11 日查阅 GitHub 仓库、Wiki 和源码。
Uptime Kuma 是什么
Uptime Kuma 是一个自托管的在线监控工具,作者 Louis Lam,MIT 协议,GitHub 上有 9.2 万多颗星,Docker Hub 拉取量超过 1.9 亿次。作者在 README 里说,做它的初衷就是想要一个能自己部署的“UptimeRobot”。
它装在你自己的服务器上,按设定的间隔去访问你的网站或服务,一旦打不开、返回错误或者关键字不对,就通过你配置的渠道发通知。所有监控结果显示在一个网页仪表盘上,还能生成对外公开的状态页。
目前的版本是 2.x:2.0.0 正式版于 2025 年 10 月 20 日发布,结束了长达一年的测试期;最新稳定版是 2026 年 10 月 9 日发布的 2.5.6。

它解决什么痛点
- 网站挂了没人知道:服务器宕机、证书过期、数据库连不上,往往要等访客反馈才发现,搜索排名和广告收入已经受了影响。
- 在线监控服务的免费额度有限:UptimeRobot、Better Stack 的免费版在检测间隔、监控数量、通知渠道上都有限制,有的还限个人或非商业用途。
- 国内通知渠道少:海外监控服务大多不支持企业微信、钉钉、飞书这些国内常用的工具。
- 想把监控数据握在自己手里:内网服务、不想公开的接口,交给第三方监控不方便。
主要功能
以下内容来自 GitHub README 和 2.5.6 版本源码:
- 监控类型多:HTTP(s)、HTTP(s) 关键字、HTTP(s) JSON 查询、TCP 端口、Ping、DNS、Docker 容器、WebSocket、Push(被动心跳),还有 MySQL/MariaDB、PostgreSQL、Redis、MongoDB、SQL Server 等数据库,以及 MQTT、gRPC、SMTP、SNMP、Steam 游戏服务器等。
- 通知渠道 90 多种:Telegram、Discord、Slack、邮件(SMTP)、Webhook 等;“地区性通知平台”分类里有钉钉自定义机器人、企业微信群机器人、飞书、Server酱、PushPlus(推送加)、WxPusher、阿里云短信等。
- 检测间隔可以很短:README 标注支持 20 秒间隔,界面上低于 20 秒会提示可能影响性能。
- 证书和域名到期提醒:HTTPS 监控会显示证书剩余天数,可以设置到期前通知。
- 状态页:可以建多个公开状态页,还能绑定自己的域名,比如 status.example.com。
- 计划维护:设置维护时间段,期间暂停告警,状态页上显示“维护中”。
- 安全:支持二次验证(2FA);界面有简体中文。
安装:Docker 一条命令或 Docker Compose
准备一台独立的服务器
有一点很重要:监控不要和被监控的网站装在同一台服务器上。服务器整个宕机时,监控也跟着停了,自然发不出通知。最好单独用一台便宜的 VPS,最好还在不同机房、不同商家。文末有推荐。
Uptime Kuma 本身很轻,监控几十个网站,1 核 1 GB 内存的小机器就够用。这是经验值,官方没有写最低配置。
先安装 Docker(官方安装脚本,自带 Compose 插件):
curl -fsSL https://get.docker.com | sh
方式一:Docker 一条命令
官方 README 给出的命令如下。这里把端口改成只监听本机,再由 Caddy 对外提供 HTTPS:
docker run -d --restart=always \
-p 127.0.0.1:3001:3001 \
-v uptime-kuma:/app/data \
--name uptime-kuma \
louislam/uptime-kuma:2
如果只是先试试、暂时不配域名,可以把第一行端口写成 3001:3001,然后用 http://服务器IP:3001 访问。
方式二:Docker Compose
官方仓库提供了一份 compose.yaml,下载后同样建议把端口改成只监听本机:
mkdir uptime-kuma && cd uptime-kuma
curl -o compose.yaml https://raw.githubusercontent.com/louislam/uptime-kuma/master/compose.yaml
nano compose.yaml
改完的内容大致如下:
services:
uptime-kuma:
image: louislam/uptime-kuma:2
restart: unless-stopped
volumes:
- ./data:/app/data
ports:
- "127.0.0.1:3001:3001"
docker compose up -d
官方特别提醒:数据目录不支持 NFS 这类网络文件系统,要放在本地目录或 Docker 卷里。
配置 Caddy 反向代理和 HTTPS
Caddy 会自动申请和续期 HTTPS 证书,还自动支持 WebSocket(Uptime Kuma 的界面依赖 WebSocket)。安装方法见 Caddy 官方文档,Debian / Ubuntu 用官方 apt 源即可。
把域名(比如 status.example.com)解析到服务器 IP,然后把 /etc/caddy/Caddyfile 改成这样,这也是 Uptime Kuma Wiki 里给的写法:
status.example.com {
reverse_proxy 127.0.0.1:3001
}
sudo systemctl reload caddy
服务器防火墙要放行 80 和 443 端口。之后进 Uptime Kuma 的「设置 → 反向代理」,把“可信的代理类字段”设为“是”,日志里就能看到访客的真实 IP。官方说明这一项只在全部流量都经过反向代理时才应该开启。
首次启动
浏览器打开 https://status.example.com:
- 先选数据库。2.x 版本可选 SQLite、Docker 镜像内置的 MariaDB,或者外部 MariaDB/MySQL。界面上说明 SQLite 推荐小规模部署使用,个人站长选它就行。
- 创建管理员账户,用户名和密码自己设置,没有默认密码。
- 登录后建议马上到「设置 → 安全性」里启用二次验证。
用法:监控、通知和状态页
添加一个 HTTP 监控
- 点左上角「添加监控项」,监控类型选 HTTP(s)。
- 显示名称随便填,URL 填你的网站地址。
- 心跳间隔是检测频率,默认 60 秒,个人网站 60 秒足够;重试次数建议设 1 到 2 次,避免网络抖动一次就误报。
- 想确认页面内容真的正常(比如不是数据库报错页),可以改用“HTTP(s) – 关键字”,填一个页面上一定会出现的词。
- 在高级选项里勾选“证书到期时通知”,证书快过期时也会提醒你。
配置 Telegram 通知
第一步:创建机器人,拿到 Bot Token。 在 Telegram 里搜索 @BotFather,发送 /newbot,按提示给机器人起名字和用户名(用户名必须以 bot 结尾)。完成后 BotFather 会回复一串形如 123456789:AAxxxx 的 Bot Token,复制保存,不要泄露。
第二步:拿到 Chat ID。 先在 Telegram 里打开你的新机器人,点 Start 或随便发一条消息。然后在服务器上运行下面的命令,把 TOKEN 换成你的 Bot Token:
curl -s "https://api.telegram.org/botTOKEN/getUpdates"
返回内容里 “chat”:{“id”:123456789 这一串数字就是 Chat ID。想发到群里,就把机器人拉进群、在群里发一条消息再查,群的 Chat ID 是负数。
Uptime Kuma 的设置界面里也有一个“自动获取”按钮,原理一样,但请求是从你的浏览器发出的,浏览器所在网络要能访问 Telegram 接口才行。
第三步:在 Uptime Kuma 里添加通知。 进入「设置 → 通知 → 设置通知」,通知类型选 Telegram,填入机器人令牌和 Chat ID,点「测试」。手机上收到测试消息就说明配置成功。勾选“默认开启”和“应用到所有现有监控项”,以后新建的监控都会自动发通知。

国内常用的通知方式
需要说明的是,Telegram 在中国大陆无法直接使用。团队或自己主要在国内的话,下面这些官方支持的渠道更方便:
- 企业微信群机器人:在企业微信群里添加机器人,拿到 Webhook 地址填进去即可;
- 钉钉自定义机器人:同样是群机器人 Webhook,可以配合加签使用;
- 飞书:飞书群的自定义机器人;
- Server酱、PushPlus、WxPusher:推送到个人微信,适合一个人用;
- 邮件(SMTP):用 QQ 邮箱、163 邮箱的 SMTP 服务发告警邮件,最通用。
一个监控可以同时绑定多个通知,比如 Telegram 和邮件各发一份,防止某一个渠道出问题时漏报。
建一个公开状态页
- 点顶部「状态页面 → 添加新的状态页」,填名称和路径,比如 blog,访问地址就是 https://status.example.com/status/blog。
- 在编辑页面里添加分组,把要公开的监控项加进去,可以写描述、上传 Logo。
- 想用独立域名,在状态页设置里填上域名,再把这个域名也解析到监控服务器,并加进 Caddyfile。
需要停机升级时,在「维护」里建一个计划维护,选好时间段和受影响的监控项,期间不会告警,状态页上会显示维护中。

优点和不足
优点:
- 免费、没有数量限制:监控多少个、间隔多短,只取决于你的服务器;
- 通知渠道非常多:90 多种,国内的企业微信、钉钉、飞书、Server酱都有;
- 上手简单:一条 Docker 命令就能跑,界面直观,有中文;
- 功能够全:关键字检测、证书和域名到期提醒、状态页、计划维护、2FA 都有。
不足:
- 只有一个检测点:只从你这台服务器去检测,没法像商业服务那样从全球多个地点确认,偶尔会因为监控服务器自身的网络问题误报;
- 监控本身也要维护:要自己更新、备份,监控服务器挂了也就失去了监控;
- 从 1.x 升级要小心:2.0 是大版本,有不兼容的改动,官方要求先备份、按迁移指南操作。
适合谁
- 有个人博客、小网站、小程序后端的站长和独立开发者;
- 手上有几台 VPS、一堆 Docker 服务,想统一看在线状态的折腾党;
- 需要给客户或用户一个公开状态页的小团队;
- 需要企业微信、钉钉、飞书告警的国内团队。
和 UptimeRobot、Better Stack 怎么选
| 对比项 | Uptime Kuma | UptimeRobot 免费版 | Better Stack 免费版 |
|---|---|---|---|
| 价格 | 免费开源,只付服务器钱 | 0 美元 | 0 美元 |
| 监控数量 | 不限 | 50 个 | 10 个(监控和心跳合计) |
| 检测间隔 | 自己设,20 秒起比较稳妥 | 5 分钟 | 定价页未写明 |
| 状态页 | 多个,可绑自己的域名 | 1 个基础状态页 | 1 个 |
| 通知 | 90 多种,含 Telegram、企业微信、钉钉 | 免费版只能用 5 个集成 | Slack 和邮件 |
| 数据保留 | 自己决定 | 3 个月 | — |
| 用途限制 | 无 | 官方定位为个人爱好和非营利项目 | 官方定位为个人项目 |
| 检测地点 | 只有你的服务器 | 多地 | 多地 |
UptimeRobot 和 Better Stack 的数据来自两家 2026 年 10 月 11 日的官方定价页。简单说:只想监控一两个网站、不想维护服务器,用 UptimeRobot 免费版就行;想要短间隔、国内通知渠道、不限数量,或者网站本身有商业收入,自建 Uptime Kuma 更合适。两者也可以一起用:商业服务做多地检测,Uptime Kuma 做细致的监控和国内通知。
服务器推荐
监控服务器对配置要求很低,重点是和网站服务器分开,最好不同商家、不同机房。以下是官网入门标价(2026 年 10 月 9 日查阅):
- RackNerd:入门 26.99 美元/年,1 核、512 MB 内存、30 GB SSD,美国、加拿大、欧洲都有机房。只跑 Uptime Kuma 够用,用 SQLite 即可。RackNerd 官网
- CloudCone:28 美元/年起,2 核、1 GB 内存、30 GB SSD;也有按小时计费的套餐,适合先试再长期用。CloudCone 官网
- 搬瓦工:老牌商家,入门款 49.99 美元/年(1 GB 内存、20 GB SSD),稳定性好,可以在不同机房之间迁移,适合把监控当成“最后一道防线”的用户。搬瓦工官网
便宜套餐多是限量款,可能随时售罄或调价,下单前以官网实时价格为准。
项目信息
| 项目 | 信息 |
|---|---|
| 名称 | Uptime Kuma |
| 作者 | Louis Lam |
| GitHub | louislam/uptime-kuma |
| 开源协议 | MIT |
| 最新稳定版 | 2.5.6(2026-10-09) |
| Docker 镜像 | louislam/uptime-kuma:2 |
| 默认端口 | 3001 |
| 数据库 | SQLite、内置 MariaDB、外部 MariaDB/MySQL |
| 非 Docker 安装 | Node.js 20.4 以上,支持主流 Linux 和 Windows 10 / Server 2012 R2 以上 |
| 在线演示 | demo.kuma.pet(数据 10 分钟后清除) |


