Uptime Kuma 部署教程:5 分钟搭好网站监控与状态页

Uptime Kuma 是一个自托管(self-hosted)的网络监控工具,作者最初只是想做一款对标 UptimeRobot、但能跑在自己服务器上的替代品。它支持 HTTP(s)、TCP、Ping、DNS、关键字、JSON Query、WebSocket、Docker 容器、Steam 游戏服务器等多种监控类型,内置 90 多种通知渠道,还自带漂亮的状态页(Status Page)。整个项目是开源的,单个 Docker 镜像就能跑起来,对个人开发者和小团队非常友好。

下面这篇教程会从零开始,带你用 Docker 把 Uptime Kuma 部署起来,配置监控、通知、状态页,最后再加一层 Nginx 反向代理和 HTTPS。

准备工作

部署 Uptime Kuma 本身没有特别高的硬件门槛:

  • 一台 Linux 服务器(Ubuntu / Debian / CentOS 等主流发行版都可以)
  • 已安装 Docker 与 Docker Compose(如果还没装,可以参考官方文档一键安装)
  • 至少 256M 可用内存,1 核 CPU 即可
  • 一个可用的端口(默认 3001)

如果使用云厂商的安全组或系统防火墙,记得提前放行 3001 端口(后面接 Nginx 反代后就可以只开 80/443)。

> [!WARNING]
> 官方 README 明确提示:NFS 等网络文件系统不支持,数据卷必须映射到本地目录或本地 volume,否则可能因为文件锁问题导致数据异常。

Uptime Kuma 主监控仪表盘界面,左侧是监控项列表,右侧是状态统计卡片-1

用 Docker 一键部署

最简单的部署方式就是单容器跑起来。新建一个目录,进入目录后执行:

mkdir -p /opt/uptime-kuma && cd /opt/uptime-kuma
docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:2

这条命令做了几件事:

  • -d:后台运行
  • --restart=always:开机自启,崩溃自动重启
  • -p 3001:3001:把宿主机的 3001 端口映射到容器内
  • -v uptime-kuma:/app/data:把数据持久化到一个名为 uptime-kuma 的 Docker volume
  • --name uptime-kuma:给容器起个名字,后面操作方便

如果只想让本机访问,不暴露给外网,可以把端口映射改成:

-p 127.0.0.1:3001:3001

部署完成后,用浏览器打开 http://服务器IP:3001,如果看到登录界面,就说明跑起来了。

如果更喜欢 Docker Compose 的写法,可以执行:

mkdir uptime-kuma && cd uptime-kuma
curl -o compose.yaml https://raw.githubusercontent.com/louislam/uptime-kuma/master/compose.yaml
docker compose up -d

两种方式二选一即可,效果一样。

首次进入:设置管理员账号

第一次访问 3001 端口时,Uptime Kuma 会让你创建一个管理员账号:

  1. 设置一个用户名(默认就是 admin
  2. 设置一个强密码(务必用密码管理器生成一个)
  3. 设置完成后会自动登录,进入主仪表盘

进去之后建议立刻做两件事:

  • 在「Settings」里把语言切换成中文(如果官方提供了中文包的话;项目内置多语言支持,但具体语言列表以官网为准)
  • 开启 2FA 两步验证,降低被爆破的风险

添加第一个监控项

点击左上角的「+ Add New Monitor」,进入添加监控的页面。Uptime Kuma 的监控类型非常丰富,常用的几个:

类型 用途
HTTP(s) 监控网站、API 接口的可用性
TCP 监控数据库、Redis、自定义服务的端口
Ping 监控主机是否在线
DNS Record 监控域名解析是否正确
HTTP(s) Keyword 监控页面是否包含某个关键词
HTTP(s) Json Query 监控接口返回的 JSON 中某个字段
Docker Container 监控同一台机器上的其他容器

以监控一个网站为例,填写:

  • Monitor Type:HTTP(s)
  • Friendly Name:随便起,例如「我的博客」
  • URL:填你要监控的完整 URL,例如 https://example.com
  • Heartbeat Interval:检测间隔,默认 20 秒一次
  • Retries when failed:失败重试次数,避免误报

点击「Save」保存,仪表盘上立刻就会出现这个监控项,过几秒就能看到绿色的「Up」状态。

Uptime Kuma 添加监控项时的类型选择下拉列表-2

配置通知渠道

光有监控还不够,关键是要在出问题的时候及时收到告警。Uptime Kuma 支持 90 多种通知方式,国内常用的几个都可以在「Settings → Notifications」里添加。

推荐至少配置一个即时通讯类(Telegram / 钉钉 / Slack)+ 一个邮件类(SMTP)作为兜底。下面以 Telegram 为例:

  1. 在 Telegram 里找 @BotFather,创建一个 Bot,拿到 Token
  2. 给 Bot 发一条消息,然后访问 https://api.telegram.org/bot/getUpdates 拿到你的 chat_id
  3. 在 Uptime Kuma 的通知页面,选择 Telegram Bot,填入 Token 和 chat_id
  4. 点「Test」,如果 Telegram 收到测试消息就说明通了

钉钉、企业微信、飞书、Bark、Pushover、Gotify、Webhook 等等也都有现成的模板,按提示填字段即可。

创建公开状态页

Uptime Kuma 内置了一个对外公开的状态页功能,可以分享给你的用户、团队成员。

  1. 进入「Status Pages」页面
  2. 点「New Status Page」
  3. 填写标题、描述,选择一个路径(slug),例如 status
  4. 在「Monitors」里勾选要展示在这个状态页上的监控项
  5. 可以为每个监控项设置一个对外显示的名称(避免暴露内部命名)
  6. 保存后访问 http://服务器IP:3001/status/ 就能看到公开状态页

状态页支持浅色/深色主题切换、移动端适配,还可以把不同的状态页映射到不同的域名(需要配合反代)。

Uptime Kuma 公开状态页的桌面端效果,整体以卡片形式展示各个服务状态-3

反向代理 + HTTPS(Nginx)

直接把 3001 端口暴露在外网既不优雅也不安全,更常见的做法是用 Nginx 做反代并启用 HTTPS。Uptime Kuma 的实时状态是通过 WebSocket 推送的,所以 Nginx 配置里必须加上 WebSocket 升级相关的 header,否则实时刷新会失效。

下面是一份可以直接参考的配置(请把 status.example.com 换成你自己的域名):

server {
    server_name status.example.com;

    listen 80;
    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    server_name status.example.com;

    listen 443 ssl http2;
    ssl_certificate     /etc/letsencrypt/live/status.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/status.example.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:3001;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 关键:WebSocket 升级头
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

SSL 证书推荐用 Let’s Encrypt + certbot --nginx 一键签发,自动续期。

升级与数据备份

Uptime Kuma 的所有数据(监控配置、历史记录、通知配置、用户账号等)都存在 /app/data 这个目录里,所以备份只需要备份这个 volume。

升级前的标准流程

  1. 停掉旧容器:docker stop uptime-kuma
  2. 备份数据卷:
    docker run --rm -v uptime-kuma:/app/data -v $(pwd):/backup alpine tar czf /backup/uptime-kuma-backup.tar.gz -C /app/data .
  3. 拉取新镜像并启动:
    docker pull louislam/uptime-kuma:2
    docker rm uptime-kuma
    docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:2

数据卷名保持不变,配置和历史曲线都会完整保留。具体版本号和升级注意事项以官方仓库的 Release Notes 为准。

小结

到这里,一个生产可用的 Uptime Kuma 就部署完成了:Docker 起容器 → 配置监控和通知 → 创建公开状态页 → Nginx 反代 + HTTPS → 定期备份。整个流程控制在十几分钟以内,资源占用非常低,却能解决 90% 个人项目和小团队的监控需求。

如果想进一步了解 Uptime Kuma 的功能细节、优缺点对比、是否适合自己的场景,可以阅读这篇更完整的 Uptime Kuma 评测

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。