一、前言
作为一名业余时间维护个人网站博主,有时候遇到网站宕机几小时才发现,访客流失不说,搜索引擎收录还可能受影响。之前试过Uptime Robot、Pingdom等工具,最终被开源免费、功能全、颜值高的Uptime Kuma圈粉。今天就把2025年最新的Docker部署方案整理出来,从环境准备到反向代理,新手也能一步到位。
在说部署前,先聊聊它的核心优势——毕竟监控工具那么多,选对才不浪费服务器资源:
- 开源无限制:对比Uptime Robot免费版仅支持50个监控项,Kuma无任何功能锁,监控100个网站也不收费;
- 监控类型全:除了HTTP(s)网站,还支持TCP端口、Ping、DNS、数据库(MySQL/Redis)、Docker容器等20+监控场景;
- 实时预警快:支持SMTP邮件、Telegram、钉钉、企业微信等30+通知方式,宕机10秒内就能收到提醒;
- 可视化直观:自带响应时间曲线图、状态热力图,故障历史一目了然,不用查日志猜问题;
- 轻量省资源:Docker容器启动后仅占50MB内存,比同类工具省70%资源,低配服务器也能跑。
放一张我网站的状态页面截图,健康状态、响应时间清晰可见,颜值还不错哦。

二、准备工作
Kuma的部署门槛极低,只要服务器能跑Docker,基本零障碍。先确认以下3个条件::
- 已安装 Docker 和 Docker Compose
- 有公网 IP(或本地服务器用于测试)
- 开放目标端口(默认 13001,可自定义)
为了方便后续管理配置和数据备份,建议创建独立工作目录(我习惯把工具都放~/opt目录下,统一管理):
cd ~
mkdir -p ~/opt/uptime-kuma
cd ~/opt/uptime-kuma
接下来开放端口,这里分两种场景,根据你的服务器防火墙类型选:
# 场景1:用ufw防火墙(Ubuntu/Debian),开放13001端口
sudo ufw allow 13001/tcp comment 'Uptime Kuma监控服务' && sudo ufw reload
# 场景2:用firewalld防火墙(CentOS/RHEL)
sudo firewall-cmd --add-port=13001/tcp --permanent && sudo firewall-cmd --reload
注意:如果是云服务器(阿里云/腾讯云),还要在控制台的“安全组”里开放13001端口,否则外部无法访问。
三、Docker Compose部署
Uptime Kuma的Docker配置极其简洁,核心就是“镜像+数据卷+端口映射”。
在~/opt/uptime-kuma目录下新建docker-compose.yml文件,直接复制以下配置:
version: '3.3'
services:
uptime-kuma:
# 推荐用镜像源,拉取速度快(国外服务器可换louislam/uptime-kuma:2)
image: docker2.leitool.top/louislam/uptime-kuma:2
restart: unless-stopped # 异常自动重启,保障服务稳定
volumes:
# 数据持久化:将容器内数据映射到宿主机,删除容器也不丢数据
- ./data:/app/data
ports:
# 主机端口:容器端口(容器内默认3001,主机端口可自定义)
- "13001:3001"
配置完成后,执行启动命令,Docker会自动拉取镜像并创建容器:
# 后台启动服务(-d表示 detached 模式)
docker-compose up -d
# 查看容器运行状态(出现Up说明启动成功)
docker ps
# 若启动失败,查看日志排查问题
docker-compose logs -f
使用 docker ps 命令检查容器是否创建成功。

四、首次配置:监控项添加
4.1 配置引导
打开浏览器访问“服务器IP:13001”,就能进入Uptime Kuma的安装引导页面,全程可视化操作,非常简单。

Uptime Kuma 2.0版本最大的升级就是支持MariaDB数据库,对比旧版本的SQLite,两者区别很明显,根据需求选。

创建管理员账号:数据库配置后,设置用户名和密码(建议密码包含大小写+数字,避免被暴力破解),点击“Create”完成初始化:

自动跳转进入 Uptime Kuma 仪盘表

4.2 监控项配置
- 添加第一个监控项:进入仪表盘后,点击右上角“+ Add Monitor”,重点配置这几个参数: Monitor Type:选“HTTP(s)”(监控网站用这个);
- 显示名称:自定义名称(比如“我的个人博客”);
- URL:填写网站完整地址(如https://blog.example.com);
- Heartbeat Interval:心跳间隔,默认60秒,我建议改成180秒(减少误报,也能降低服务器请求压力);
- Max Retries:重试次数,默认3次,保留即可。

4.3 通知方式:宕机报警
监控的核心是“出问题能及时知道”,Uptime Kuma支持30+通知方式,我推荐使用SMTP邮件(通用):填写邮箱SMTP服务器信息(比如QQ邮箱用smtp.qq.com,端口465),测试成功后,网站宕机就会收到邮件提醒:

五、状态页面
正常监控时的响应状态可视化:

状态页面可以把所有监控项整理成一个公开页面,方便访客查看网站状态(比如“status.example.com”)。创建步骤:
- 点击左侧“Status Pages”→“+ Add Status Page”;
- 设置页面名称、URL路径(比如“website”,访问地址就是Istatus.example.com/websit);
- 保存后就能通过链接访问状态页面了。

我配置的状态页面长这样,能自定义展示顺序和分组:

六、反向代理
直接通过IP:端口访问不够美观,且缺乏 HTTPS 安全层。我们可以用 Nginx(或 Caddy、Apache)做反向代理,绑定域名并配置 SSL。
与其他 Web 应用程序不同,Uptime Kuma 基于 WebSocket。您需要另外两个标头“Upgrade”和“Connection”才能反向代理 WebSocket。
请阅读 wiki 了解更多信息:https://github.com/louislam/uptime-kuma/wiki/Reverse-Proxy
先在域名解析平台(如阿里云、Cloudflare)将域名(如umami.example.com)解析到服务器 IP。
6.1 NPM
NPM图形化操作,无需写配置文件,适合新手:
- 在NPM中添加“Proxy Host”,填写域名(如kuma.example.com);
- Scheme选“http”,Forward Hostname/IP填“127.0.0.1”,Forward Port填“13001”;
- 勾选“WebSockets Support”(关键!否则监控数据无法实时更新);
- 进入“SSL”标签,申请Let’s Encrypt证书,开启强制HTTPS。
6.2 Nginx
如果是Nginx,根据官网的描述,要添加以下代码:
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://localhost:3001/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
6.3 群晖NAS
如果把Kuma部署在群晖NAS上,用系统自带的反向代理即可:
-
打开群晖“控制面板”→“登录门户”→“高级”→“反向代理”;
-
点击“新增”,填写来源(域名、端口443)和目标(群晖本地IP、端口13001):
-
切换到“自定义标题”,点击“创建”→选择“Websockets”,自动填充所需头信息:

这样就可以通过域名访问Uptime-kumaf服务了。
七、腾讯云EdgeOne配置
我把Kuma部署在内网群晖里,没有公网IPv4,所以用腾讯云EdgeOne实现IPv6转IPv4,让纯IPv4环境也能访问,步骤如下:
- IPv6域名解析:用DDNS-go工具,将域名(如kuma.example.com)解析到群晖的本地IPv6地址。
- EdgeOne配置:在腾讯云EdgeOne控制台,添加站点并选择“开启IPv6访问”,将加速域名指向刚才的IPv6域名;
- 验证访问:通过EdgeOne分配的加速域名(如uptime.example.com),纯IPv4网络也能访问内网的Kuma服务了。

八、小结
作为用了Uptime Robot 免费版2年的老用户,最近用上了Uptime kuma,部署轻量易上手,监控数据实时性和通知可靠性都经得起考验。
如果你有多个网站、服务器或API服务,花10分钟部署Uptime Kuma,就能彻底告别“被动发现故障”的尴尬。
