Loading...

文章背景图

Uptime Kuma:自托管监控与告警面板(轻量开源)|部署与使用全指南

2026-10-26
4
- 字
- 分钟
|

Uptime Kuma:自托管监控与告警面板(轻量开源)|部署与使用全指南

本文基于 Uptime Kuma 官方 GitHub README(master 分支)与 2026 年公开维护信息整理,面向中文自托管用户,覆盖从零部署、配置、实操到排障、升级、合规的完整链路。

官方主控制台截图:

Uptime Kuma 主控制台仪表盘截图

一、项目简介与适用场景

Uptime Kuma 是一款由 Louis Lam(louislam)主导开发的自托管(self-hosted)服务可达性与延迟监控面板,使用 Vue 3 + Node.js 构建,定位是「开源版的 Uptime Robot」。它把你在乎的网站、API、端口、证书、容器等统一纳入一个轻量仪表盘,按最短 20 秒的间隔探活,并在异常时通过 90+ 种通知渠道推送告警。

项

说明

名称

Uptime Kuma

作者 / 维护者

Louis Lam(社区协作,Weblate 多语言翻译)

语言 / 技术栈

Vue 3(前端) + Node.js / Express(后端) + SQLite(默认)/ MariaDB(可选)

开源协议

MIT

当前主版本

v2.x(README 安装标签 louislam/uptime-kuma:2,持续迭代)

默认端口

3001

数据目录

容器内 /app/data

官方仓库

https://github.com/louislam/uptime-kuma

适用场景

  • 个人 / 家庭实验室(Homelab):在树莓派、NAS、迷你主机上监控家中服务(NAS 面板、Pi-hole、Home Assistant、自建网盘)是否在线。

  • 小微企业 / 创业团队:用一台低配云服务器监控官网、API、数据库端口,省去 SaaS 订阅费。

  • 运维 / 开发自监控:监控内部系统(GitLab、Jenkins、数据库、中间件端口),通过 Telegram / 钉钉(Webhook 中转)/ 邮件第一时间获知宕机。

  • 对客户公示状态:用「状态页(Status Page)」对外展示各服务可用率与事故时间线,提升透明度。

  • SSL 证书到期提醒:内置证书信息展示与告警,避免证书过期导致服务不可用。

不适用场景(边界)

  • 它不是 APM / 全链路性能分析工具(不采集吞吐、错误率、RUM),需要更细指标请用 Grafana / Datadog 等。

  • 它本身也需要被监控(「谁来监控监控者」),生产环境建议配合外部心跳或独立部署。

  • 社区项目,无商业 SLA 支持。


二、核心功能逐条拆解

下表逐条拆解 README「Features」及 v2 实际能力:

#

功能

说明

1

多类型监测(Monitor)

HTTP(s)、TCP、HTTP(s) 关键字、HTTP(s) JSON 查询、WebSocket、Ping(ICMP)、DNS 记录、Push(心跳)、Steam 游戏服务器、Docker 容器;v2 还扩展 SMTP、SNMP、MQTT、OracleDB 等

2

精美响应式 UI

Vue 3 驱动,操作流畅,支持浅色/深色模式(见浅色模式截图)

3

90+ 通知渠道

Telegram、Discord、Gotify、Slack、Pushover、Email(SMTP)、Webhook、Microsoft Teams、PagerDuty、Opsgenie、Twilio SMS 等,可按监控项单独路由

4

20 秒监测间隔

最短 20 秒一轮探活,间隔可在监控项中调大;足够覆盖绝大多数宕机发现需求

5

多语言界面

官方支持 20+ 语言(含中文),由社区通过 Weblate 维护

6

多状态页

可创建多个状态页,并映射到不同域名,对外公示可用率与事故时间线

7

Ping 图表

内置 Ping 图表,可视化延迟随时间变化

8

证书信息

自动读取 HTTPS 证书信息并预警到期

9

代理支持

监测时可走代理(Proxy),适合不在本地网络或跨境探测

10

两步验证(2FA)

登录支持 2FA,增强面板自身安全

11

外部数据库(v2 新增)

除 SQLite 外支持 MariaDB/MySQL,利于数百监控项以上的规模化部署

12

Prometheus 指标导出

暴露 /metrics 供 Prometheus 抓取,可接入 Grafana

浅色模式界面示例:

Uptime Kuma 浅色模式仪表盘截图

三、全套官方链接

类型

链接

GitHub 仓库

https://github.com/louislam/uptime-kuma

README(即官方文档)

https://github.com/louislam/uptime-kuma#readme

安装 Wiki(进阶 / 反代)

https://github.com/louislam/uptime-kuma/wiki/%F0%9F%94%A7-How-to-Install

升级 Wiki

https://github.com/louislam/uptime-kuma/wiki/%F0%9F%86%99-How-to-Update

Issue / 反馈

https://github.com/louislam/uptime-kuma/issues

社区讨论(Reddit)

https://www.reddit.com/r/UptimeKuma/

Docker 镜像(Docker Hub)

https://hub.docker.com/r/louislam/uptime-kuma

多语言翻译(Weblate)

https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/

License

MIT(仓库根目录 LICENSE 文件)

关于 Demo:官方在 README 中提供了一个临时在线 Demo(https://demo.kuma.pet/start-demo,位于德国法兰克福),但所有数据会在 10 分钟后清空,仅用于体验、不可作为长期可用服务。按本教程设定「无独立/长期 Demo」,正式使用请自行部署。


四、硬件与环境前置要求

4.1 硬件建议(经验值,随监控数量线性增长)

规模

CPU

内存

磁盘

说明

轻量(≤ 25 个监控项)

1 vCPU

≥ 512 MB(推荐 1 GB)

≥ 1 GB

树莓派 4、NAS、微型 VPS 即可

中等(25–100 个监控项)

1–2 vCPU

1–2 GB

≥ 5 GB

日志/历史保留越多越占盘

较大(100+ 监控项)

2+ vCPU

2 GB+

≥ 20 GB

建议启用 MariaDB 外部数据库

官方运维站点的实测建议:最小 1 vCPU / 1 GB RAM / 20 GB 存储(基于 ~25 个探针的测试环境)。资源消耗主要取决于监控项数量与历史保留时长。

4.2 运行环境

方式

前置要求

Docker / Compose(推荐)

已安装 Docker Engine 与 Docker Compose v2;Linux 服务器 / NAS / 树莓派均可

Linux 源码运行

Node.js ≥ 20.4、Git、pm2(后台常驻);支持 Debian/Ubuntu/Fedora/Arch 等主流发行版,Windows 10(x64)/Server 2012 R2+ 亦可

NAS(Unraid / Synology)

支持 Docker 的 NAS 系统,DSM 7+ 或 Unraid 6.10+ 通过 Docker/社区应用安装

4.3 关键注意

  • 存储后端限制:Uptime Kuma 不支持 NFS(网络文件系统) 作为数据目录(/app/data)。务必映射到本地目录或 Docker 卷,否则会出现数据库锁/损坏。

  • v2 镜像默认 Rootless:官方 Docker 镜像 v2 起默认以非 root 用户(UID 1000)运行,数据目录需保证该用户可读写(见第六章与第九章)。

  • 端口预留:默认占用宿主机 3001,部署前确认未被占用。


五、多平台部署实战

所有方式最终均监听容器内 3001,通过 -p 或 compose ports 映射到宿主机。

5.1 Docker Compose(最推荐、最易维护)

# 1. 创建工作目录
mkdir uptime-kuma && cd uptime-kuma

# 2. 拉取官方 compose 文件(master 分支)
curl -o compose.yaml https://raw.githubusercontent.com/louislam/uptime-kuma/master/compose.yaml

# 3. 启动(后台)
docker compose up -d

官方 compose.yaml 内容如下(已自带 restart: unless-stopped 与数据卷):

services:
  uptime-kuma:
    image: louislam/uptime-kuma:2
    restart: unless-stopped
    volumes:
      - ./data:/app/data
    ports:
      # <Host Port>:<Container Port>
      - "3001:3001"

启动后访问 http://localhost:3001 或 http://<你的服务器IP>:3001。

5.2 单条 Docker 命令(快速验证)

docker run -d \
  --restart=always \
  -p 3001:3001 \
  -v uptime-kuma:/app/data \
  --name uptime-kuma \
  louislam/uptime-kuma:2

若只想在本机访问(不暴露到局域网/公网),把端口映射改为 -p 127.0.0.1:3001:3001。

5.3 Linux 源码运行(Node.js + PM2)

要求 Node.js ≥ 20.4。适合需要深度定制或无法用 Docker 的环境。

# 1. 克隆仓库
git clone https://github.com/louislam/uptime-kuma.git
cd uptime-kuma

# 2. 安装依赖并构建(npm run setup 会完成依赖安装与前端构建)
npm run setup

# 方式 A:前台直接运行(调试用)
node server/server.js

# 方式 B(推荐):用 PM2 后台常驻
npm install pm2 -g && pm2 install pm2-logrotate
pm2 start server/server.js --name uptime-kuma

# 查看日志
pm2 monit
# 设为开机启动
pm2 startup && pm2 save

访问同样为 http://localhost:3001。

5.4 NAS 部署简述

Synology(群晖)DSM 7+

  1. 套件中心安装「Container Manager」(即 Docker)。

  2. 进入 Container Manager → 项目 → 新建,使用上面 5.1 的 compose.yaml(或注册表搜索 louislam/uptime-kuma,标签 2)。

  3. 映射端口 3001,存储设置中把容器 /app/data 挂载到本地卷(如 docker/uptime-kuma)。

  4. 或通过 SSH 直接执行 5.1/5.2 的 Docker 命令亦可。

  5. 开机自启:Container Manager 项目默认随 DSM 启动;计划任务可加开机触发脚本(见第七章)。

Unraid

  1. 应用(Apps)→ 社区应用(Community Applications)搜索 Uptime Kuma(通常名 uptime-kuma 或 louislam-uptime-kuma)。

  2. 安装时设置:容器端口 3001、主机端口自定义、为 /app/data 配置一个持久路径(如 /mnt/user/appdata/uptime-kuma)。

  3. 勾选「Start on Boot」即可开机自启。


六、配置文件参数全解

Uptime Kuma 绝大多数配置通过 Web 界面完成,没有 YAML/文件式配置文件(这是它与 Gatus 等工具的区别)。但部署层面有几个关键「配置点」必须理解。

6.1 Docker 数据卷(最重要)

项目

说明

容器内路径

/app/data

作用

存放 SQLite 数据库、配置、证书、状态页数据、日志历史

挂载方式

命名卷 uptime-kuma:/app/data 或 宿主机目录 ./data:/app/data

备份

直接打包该目录即可(停机或停容器后备份最稳妥)

⚠️ 禁区

不可用 NFS 挂载此目录

6.2 端口映射参数

参数

含义

-p 3001:3001

宿主机端口:容器端口。改首段即可改对外端口

-p 127.0.0.1:3001:3001

仅绑定本机回环,配合反代/SSH 隧道使用

compose ports: - "3001:3001"

同上,写在 YAML 里

6.3 容器重启策略

参数

行为

--restart=always(run)

任何退出(含 Docker 守护重启)都拉起

restart: unless-stopped(compose)

除非手动 stop,否则始终自启;推荐

6.4 环境变量(进阶 / 外部数据库)

基础部署通常无需任何环境变量。以下为 v2 外部数据库(MariaDB/MySQL) 相关变量(仅在首次启动前、通过 UI 选择外部数据库或设置环境变量时使用;变量名以官方 Wiki 为准,部署前请核对):

环境变量

作用

UPTIME_KUMA_DB_TYPE

数据库类型,如 sqlite / mariadb / mysql

UPTIME_KUMA_DB_HOST

数据库主机地址

UPTIME_KUMA_DB_PORT

数据库端口

UPTIME_KUMA_DB_NAME

数据库名

UPTIME_KUMA_DB_USERNAME

数据库用户名

UPTIME_KUMA_DB_PASSWORD

数据库密码

UPTIME_KUMA_DB_SSL

是否启用 SSL 连接(true/false)

UPTIME_KUMA_DB_SSL_CA

SSL CA 证书路径(启用 SSL 时)

提示:普通用户保持默认 SQLite 即可,无需设置上表。其余如自定义 CA 可用 NODE_EXTRA_CA_CERTS 注入。

6.5 反向代理相关

Uptime Kuma 使用 WebSocket 实时推送数据,反代必须放行 Upgrade 头;若挂子路径,还需在「Settings → Reverse Proxy」中设置 Base URL。详见第八章与第九章。


七、启动 / 后台常驻 / 开机自启 / 改端口 教程

7.1 启动与后台常驻

  • Docker / Compose:-d(run)或 docker compose up -d 即后台运行;--restart=always / unless-stopped 保证退出后自动拉起。

  • 源码 PM2:pm2 start server/server.js --name uptime-kuma 即后台常驻。

常用运维命令:

# 查看容器日志
docker logs -f uptime-kuma
# 查看容器状态
docker ps | grep uptime-kuma
# 停止 / 启动
docker stop uptime-kuma && docker start uptime-kuma
# PM2 日志
pm2 monit

7.2 改端口(三种做法)

做法 A:docker run 改映射

docker run -d --restart=always -p 8080:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:2
# 访问 http://<IP>:8080

做法 B:docker compose 改 ports

编辑 compose.yaml:

ports:
  - "8080:3001"   # 把宿主机端口改为 8080

然后 docker compose up -d。

做法 C:仅本机 + 反代 / SSH 隧道

docker run -d --restart=always -p 127.0.0.1:3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:2

7.3 开机自启

环境

做法

Docker(Linux systemd)

只要用了 --restart=unless-stopped/always,Docker 守护随系统启动后会自动拉起容器(需 Docker 自身开机启用:sudo systemctl enable docker)

源码 PM2

执行 pm2 startup(生成开机脚本)后 pm2 save 固化进程列表

群晖 Synology

Container Manager 项目默认开机自启;或「控制面板 → 任务计划 → 新增 → 触发的任务 → 开机」运行 docker start uptime-kuma

Unraid

安装应用时勾选「Start on Boot」

systemd 原生(源码/二进制)

新建 /etc/systemd/system/uptime-kuma.service,ExecStart=/usr/bin/node /opt/uptime-kuma/server/server.js,systemctl enable --now uptime-kuma


八、功能实操教程

8.1 首次登录与初始化

  1. 浏览器打开 http://<IP>:3001(或你改过的端口)。

  2. 首次进入会要求创建管理员账号(用户名 + 密码)。请使用强密码并牢记——v2 支持 2FA,建议随后在设置中开启。

  3. 进入主控制台,界面即类似第一章的仪表盘截图。

8.2 添加监控项(Monitor)

  1. 点击左上角 「+ 新建监控」(Add New Monitor)。

  2. 选择监测类型(Type),常用: - HTTP(s):填 URL,判断返回 200 即认为在线。 - HTTP(s) Keyword:额外填写期望包含的「关键字」,防止「200 但内容错误」。 - HTTP(s) JSON Query:用 JSONPath 校验返回 JSON 字段,适合 API 健康检查。 - TCP:填 host:port,判断端口可达(数据库、邮件服务端口)。 - Ping:ICMP 探测主机存活。 - DNS:检查域名解析记录与 TTL。 - Docker / Push / Steam / WebSocket 等按场景选择。

  3. 设置监测间隔(默认 20 秒,可调大)。

  4. 选择通知渠道(见 8.3)与重试/超时参数。

  5. 保存后即开始探活,仪表盘实时显示状态与延迟图表。

8.3 设置通知渠道(Notifications)

  1. 进入 Settings → Notifications(或监控项内「通知」) → 「+ 新建通知」。

  2. 选择渠道类型,例如 Telegram: - 先与 @UptimeKumaBot 对话,获取 Chat ID; - 填入 Bot Token 与 Chat ID 保存并「测试(Test)」。

  3. 其他常用:Discord(Webhook URL)、Email(SMTP 账号密码)、Slack、Gotify、Webhook(可中转钉钉/企业微信)。

  4. 可在每个监控项里指定「生效通知」,实现不同服务告警发往不同群。

Telegram 通知示例:在「Settings → Notifications → Telegram」填入 Bot Token 与 Chat ID 后保存,即可在监控项中选择该渠道接收告警(官方文档含配图,本机未成功拉取,故以文字说明代替)。

8.4 状态页分享(Status Page)

  1. Dashboard → Status Pages → 新建状态页。

  2. 选择要对外展示的监控项分组、设置标题/Logo/域名。

  3. 可把状态页映射到独立域名(在反代/DNS 中指向 Uptime Kuma,并在状态页设置域名)。

  4. 状态页无需登录即可访问,适合对客户提供可用率公示。

状态页效果截图(官方):

Uptime Kuma 状态页截图

8.5 反向代理配置(Nginx 示例)

生产环境强烈建议把 Uptime Kuma 放在反代后终止 TLS。关键点:必须支持 WebSocket(Upgrade 头)。

server {
    listen 443 ssl;
    server_name status.example.com;

    # SSL 配置省略...

    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;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
  • 子路径部署(如 https://example.com/uptime):除上面反代外,还需在 Uptime Kuma「Settings → Reverse Proxy」中设置 Base URL 为 /uptime,否则前端资源路径会 404。

  • Caddy / Traefik 同理需放行 WebSocket;Caddy 默认 reverse_proxy 已自动处理 Upgrade 头。


九、全套报错故障排查

以下为高频问题(覆盖题目要求:端口占用、容器退出、数据卷权限、通知失败、反代 WS、内存不足等,共 10 条)。

#

现象

可能原因

排查 / 解决

1

端口被占用:docker: Error ... bind: address already in use

宿主机 3001 已被其它进程占用

sudo lsof -i :3001 查占用进程并停止;或改映射端口(见第七章 7.2)

2

容器频繁退出 / Restarting:docker ps 显示状态反复重启

数据目录权限错误、磁盘满、NFS 不支持

docker logs uptime-kuma 看报错;确认 /app/data 为本地目录非 NFS;检查磁盘 df -h;v2 rootless 需数据属主 UID 1000(见 #3)

3

数据卷权限拒绝:日志报 EACCES / permission denied 写 /app/data

v2 镜像默认非 root(UID 1000),宿主机目录属主不匹配

宿主目录执行 sudo chown -R 1000:1000 /path/to/data 再重启;或从 v1 升级时做一次 chown

4

通知发送失败(Telegram/邮件无告警)

Token/Chat ID 错误、网络不通、Bot 未对话

在通知设置点「Test」看具体错误;Telegram 需先与 Bot 发起对话;服务器需能访问外网/对应 API;检查防火墙

5

反向代理下页面卡在加载 / 实时数据不刷新

WebSocket 的 Upgrade 头未放行

Nginx 必须包含 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";;见 8.5

6

子路径访问静态资源 404

未设置 Base URL

在「Settings → Reverse Proxy」设置 Base URL 与反代子路径一致

7

内存不足 / OOM 被杀

监控项过多 + 历史保留久,容器被系统 OOM Killer 终止

减小监控数量/间隔;增大主机内存;公网小规模建议 ≥1 GB;大批量改用 MariaDB 外部库;用 docker stats 观察占用

8

HTTPS 证书监控报错 / 证书告警异常

目标站点证书链不完整、用了自签/内网 CA

在监控项正确填写;自签 CA 用 NODE_EXTRA_CA_CERTS 注入容器;确认系统时间正确

9

数据库锁 / database is locked

多进程并发写、用了 NFS、磁盘 IO 慢

确认非 NFS;单机 SQLite 避免多实例同写;大批量迁移到 MariaDB;停机后备份再操作

10

升级后无法启动 / 迁移报错

v1→v2 未做数据迁移或镜像直接换 rootless

先按官方 Wiki 完成 v1→v2 迁移,不要同时切换 rootless 镜像;升级前务必备份 /app/data

通用排查顺序:docker ps 看状态 → docker logs uptime-kuma 看错误 → 检查端口/磁盘/权限 → 查官方 Wiki 与 GitHub Issues。


十、升级 / 回滚 / 卸载 教程

10.1 自动升级(Watchtower)

适合「始终跟进最新稳定版」的个人用户:

docker run -d \
  --name watchtower \
  -v /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower \
  --cleanup uptime-kuma

注意:Watchtower 会自动拉取最新标签并重建容器。v1→v2 这类大版本跳跃有数据迁移风险,不建议用 Watchtower 跨大版本,应手动按 Wiki 迁移。

10.2 手动升级(推荐,可控)

# 1. 先备份数据(停机最安全)
docker stop uptime-kuma
sudo tar czf uk-backup-$(date +%F).tar.gz -C /path/to/data .

# 2. 拉取最新镜像并重建
docker pull louislam/uptime-kuma:2
docker rm -f uptime-kuma
docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:2

10.3 回滚(回退版本)

Uptime Kuma 镜像支持版本标签,回滚只需指定旧标签重建(确保已有兼容备份):

docker rm -f uptime-kuma
# 回退到指定版本(示例标签,请按实际可用标签调整)
docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1

⚠️ v2 的数据结构与 v1 不兼容;跨大版本回滚前必须恢复对应版本的数据库备份,否则可能损坏数据。生产环境「先备份、再升级、可回退」。

10.4 卸载与数据清理

# 停止并删除容器
docker stop uptime-kuma && docker rm uptime-kuma

# 删除命名卷(数据一并清除,不可恢复!)
docker volume rm uptime-kuma

# 若是宿主机目录挂载,手动删除目录
# rm -rf /path/to/uptime-kuma/data

# 卸载 Watchtower(若使用)
docker rm -f watchtower

卸载即永久删除所有监控配置与历史,请确认已导出/备份所需数据(设置中可导出配置 JSON)。


十一、商用许可与合规风险提示

11.1 许可证:MIT,可商用

Uptime Kuma 采用 MIT License,允许商业使用、修改、再分发,仅要求保留版权与许可声明,无 Copyleft 传染、无需开源你的私有改动、无功能限制。你可以在公司内部、对客户提供的付费服务背后使用它。

11.2 商用注意事项

  • 保留许可声明:再分发(如打包进产品)时需附带 MIT 原文与版权声明。

  • 商标:MIT 不授予「Uptime Kuma」名称/Logo 的商标使用权,对外宣传注意避免误导为官方。

  • 无担保:MIT 明确「按原样提供,不提供担保」,生产关键链路请自行评估与加固。

11.3 监控他人的合规边界(重要)

  • 监控你自己拥有/授权的资产(自有服务器、域名、API)完全合规。

  • 监控第三方公网服务(如探测竞品网站是否在线)一般属于正常可达性探测,但高频、大并发探测可能被视为骚扰或违反对方服务条款(ToS),建议控制频率、遵守 robots/ToS。

  • 切勿用于:

  • 未经授权扫描/探测他人内网、端口或设备(可能触犯《网络安全法》及类似法规,构成非法侵入);

  • 分布式高频探活对他人服务造成拒绝服务(DoS)影响;

  • 在他人不知情下监控其私有系统。

  • 数据合规:若状态页/通知中包含客户名称、IP 等个人信息,注意遵循相关隐私保护法规(如 GDPR/个保法),最小化展示。

11.4 运维责任提示

Uptime Kuma 是社区开源项目,无商业 SLA。用于业务关键监控时,建议:① 监控实例本身独立部署并外部心跳保活;② 定期备份 /app/data;③ 启用 2FA 与反代 TLS;④ 重要告警配置多通道冗余(如同时 Telegram + 邮件),避免单点通知失败导致漏报。


本文所有截图均来自 Uptime Kuma 官方 README 引用的官方演示图,命令与参数以官方仓库当前(master)文档为准。部署前请再次核对官方 Wiki 与镜像标签的最新说明。

评论交流

文章目录