Uptime Kuma:在 VPS 上搭建自己的站点监控系统
网站可能已经出现故障,却仍然返回 200 OK。备份任务也可能在没有明显报错的情况下停止运行。Uptime Kuma 可以发现这两类问题:它会检查网站、API、端口和后台任务,并在异常时发送通知。
下面将介绍监控系统应该部署在哪里、需要怎样的 VPS,以及如何安装 Uptime Kuma 2、配置 HTTPS、接入 Telegram 并创建状态页。
七步部署 Uptime Kuma
- 准备一台与被监控项目分离的小型 VPS。
- 将一个子域名指向该 VPS,例如
monitor.example.com。 - 安装 Docker 并启动 Uptime Kuma 2。
- 关闭对外开放的内部端口
3001,并配置 HTTPS。 - 创建 HTTP、DNS、TCP 或 Push 监控项。
- 配置 Telegram,并在需要时创建状态页。
- 设置更新机制,并将数据目录备份到外部位置。
什么是 Uptime Kuma
Uptime Kuma 是一款免费、开源的自托管工具。管理面板和检查历史都会保存在你自己的服务器上。
它可以检查 HTTP(S)、TCP 端口、ping、DNS、WebSocket、响应中的文本与 JSON、Push 信号以及 Docker 容器。最短检查间隔为 20 秒。此外,它还支持数十种通知渠道、2FA、延迟图表、TLS 证书监控和多个状态页。
如何发现隐藏在 200 OK 后面的故障
普通 HTTP 检查只能看到响应状态码。但 Web 服务器可能显示空白页面或应用程序的错误占位页,同时仍然返回成功状态。
为了提高检查准确性,可以使用:
- Keyword — 查找预期文本,例如网站名称或“用户中心”;
- JSON Query — 检查 API 响应中的值,例如
status: healthy。
这样,监控系统确认的不只是端口可以访问,还会验证应用至少具备一个正常工作的基本特征。
用 Push 监控备份和 cron 任务
Push 监控不会主动轮询服务,而是等待服务定期发送信号。备份脚本或 cron 任务成功完成后,会访问一个唯一 URL。如果信号没有按时到达,Uptime Kuma 就会报告故障。
这种方式可以发现“静默”问题:网站仍然正常运行,但每日备份已经连续几天没有生成。
Uptime Kuma 不能替代什么
Uptime Kuma 主要监控可用性和响应时间。对于 CPU、RAM、磁盘、日志和容器指标,可以搭配 Prometheus、Netdata、Zabbix 或其他监控系统使用:Kuma 从外部发现问题,而指标系统帮助定位原因。
为什么监控系统最好部署在独立 VPS 上
如果把 Uptime Kuma 与网站安装在同一台服务器上,当 VPS、网络或数据中心发生故障时,项目和监控系统可能会同时离线,通知也就无法发出。
应将监控面板部署在独立 VPS 上;对于重要项目,最好放在不同地区或不同服务商处。还可以用外部服务监控 Kuma 本身:监控系统也需要有人监控。
Uptime Kuma 的服务器要求
项目没有规定严格的官方 CPU 和 RAM 最低配置。对于小规模部署,可以从以下实用配置开始:
- 1 vCPU;
- 1 GB RAM;
- 10 GB SSD;
- Ubuntu 24.04 LTS;
- IPv4;
- 用于 HTTPS 的域名或子域名。
这套配置通常足以运行几十个简单检查。若需要数百个监控项、保存较长历史记录或使用浏览器检查,建议选择 2 GB RAM 或更高配置。
如何在 VPS 上安装 Uptime Kuma
下面的示例使用 Ubuntu 24.04 和子域名 monitor.example.com。
1. 配置 DNS 和防火墙
创建一条指向 VPS IPv4 地址的 DNS A 记录。通过 SSH 连接服务器,并开放必要端口:
ssh root@SERVER_IP
apt update && apt upgrade -y
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw --force enable在确认新的 SSH 连接可以正常建立之前,不要关闭当前会话。
2. 安装 Docker 和 Docker Compose
apt install -y ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
apt update
apt install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
docker compose version3. 启动 Uptime Kuma 2
mkdir -p /opt/uptime-kuma
cd /opt/uptime-kuma
cat > compose.yaml <<'EOF'
services:
uptime-kuma:
image: louislam/uptime-kuma:2
restart: unless-stopped
ports:
- "127.0.0.1:3001:3001"
volumes:
- ./data:/app/data
EOF
docker compose up -d
docker compose ps请使用 :2 标签:latest 仍然指向已经过时的 v1 分支。目录 /app/data 应放在本地磁盘或普通 Docker volume 中。NFS 以及无法正确处理文件锁的存储可能损坏数据库。
端口 3001 仅能通过 127.0.0.1 访问。之后由带 HTTPS 的反向代理将管理面板发布到外网。
4. 使用 Caddy 配置 HTTPS
apt install -y caddy
cat > /etc/caddy/Caddyfile <<'EOF'
monitor.example.com {
reverse_proxy 127.0.0.1:3001
}
EOF
caddy validate --config /etc/caddy/Caddyfile
systemctl reload caddy如果 DNS 已指向 VPS,Caddy 会自动申请 TLS 证书并代理 WebSocket。管理面板必须部署在域名或子域名的根路径下,不支持 example.com/kuma 这样的地址。
5. 创建管理员账户
打开 https://monitor.example.com,使用较长且唯一的密码创建账户,并启用双重身份验证。
如何添加第一个监控项
点击 Add New Monitor,然后选择 HTTP(s):
- 填写名称和完整 URL。
- 设置检查间隔,例如 60 秒。
- 添加两次重试,以避免偶发网络故障造成误报。
- 选择通知渠道。
- 保存监控项,并确认页面开始显示成功检查记录。
对于主站,建议同时使用 HTTP 和 Keyword 检查;对于 API,则可以使用健康检查端点和 JSON Query。不要仅为了监控而把数据库或管理端口直接暴露到互联网,应使用可信网络或 VPN。
备份任务的 Push 监控示例
创建 Push 类型的监控项后,将其唯一 URL 添加到脚本末尾:
backup-command && \
curl -fsS "https://monitor.example.com/api/push/SECRET_TOKEN?status=up&msg=backup-ok"该请求只会在备份成功后执行。Push token 应像密码一样保管:知道这个 URL 的人可以发送虚假成功信号。
如何接入 Telegram
通过 @BotFather 创建机器人,向它发送一条消息,然后打开 Settings → Notifications → Telegram。填写 Bot Token 和 Chat ID,点击 Test,再将该通知渠道绑定到监控项。对于关键服务,建议再添加一个通知渠道,例如电子邮件。
如何创建状态页
在 Status Pages 中,可以对监控项进行分组、展示当前状态和可用性历史、绑定域名,并通过 Maintenance 发布计划维护信息。不要公开内部 IP 或技术 URL:客户通常只需要看到“网站”“API”“用户中心”和“支付”等组件。
更新与备份
在进行重大更新前,先停止容器并保存数据目录:
cd /opt/uptime-kuma
docker compose down
tar -czf /root/uptime-kuma-$(date +%F).tar.gz \
data compose.yaml
docker compose up -d将压缩包复制到另一台设备或外部存储。保存在同一台 VPS 上的副本无法防止服务器被删除或磁盘故障。
普通更新可以执行:
cd /opt/uptime-kuma
docker compose pull
docker compose up -d --force-recreate启动后,检查 docker compose ps、管理面板以及测试通知是否正常。
Uptime Kuma 应该选择怎样的 VPS
小规模部署只需要一台配备 1 vCPU 和 1 GB RAM 的 Linux VPS。相比性能,独立性更重要:主项目无法访问时,监控系统仍然必须在线。
如果被监控的服务运行在其他平台或独立节点上,可以将 Uptime Kuma 部署到 tropic.host 的 VPS。Ubuntu、Docker 和固定 IP 可以帮助快速启动管理面板,并且可以随着检查数量增加而扩展资源。
如果生产环境已经位于同一套基础设施中,应选择另一个节点,或增加外部备用监控。隔离故障域比额外增加一个 CPU 核心更有价值。
常见错误
| 错误 | 为什么会造成问题 | 更好的做法 |
|---|---|---|
| 监控系统与项目部署在一起 | 发生共同故障时,服务和通知都会消失 | 使用独立 VPS 或不同地区 |
端口 3001 直接暴露到公网 | 管理面板在没有反向代理和 HTTPS 的情况下可被访问 | 将端口绑定到 127.0.0.1 |
只检查 200 状态码 | 应用故障也可能看起来像成功 | 添加 Keyword 或 JSON Query |
使用 latest 标签 | 它仍然指向过时的 v1 分支 | 使用 louislam/uptime-kuma:2 |
| 备份保存在同一台 VPS 上 | 服务器故障时备份也会一起丢失 | 将 data 目录复制到外部位置 |
简短总结
Uptime Kuma 可以把一台小型 VPS 变成用于监控网站、API、DNS、端口、证书和后台任务的独立中心。Keyword 能发现损坏的页面,JSON Query 能识别错误的 API 响应,而 Push 则可以发现停止运行的备份或 cron 任务。
为了提高可靠性,应将监控系统与生产环境分离,关闭端口 3001 的公网访问,配置 HTTPS、2FA 和两个通知渠道。之后,再为数据目录设置外部备份,并通过独立服务检查 Uptime Kuma 本身。
FAQ
Uptime Kuma 免费吗?
免费。该项目以 MIT 许可证开源发布。你只需要支付基础设施、域名和外部备份的费用。
Uptime Kuma 需要多少 RAM?
小规模部署可以从 1 GB RAM 开始。若需要数百个检查、较长历史记录或 Browser Engine,建议分配 2 GB 或更多内存。
可以不使用 Docker 安装 Uptime Kuma 吗?
可以,可以通过 Node.js 和 PM2 安装。不过在 VPS 上,Docker Compose 通常更容易更新、迁移和恢复。
Uptime Kuma 可以不使用域名吗?
技术上可以,可以通过 IP 地址或 SSH 隧道访问。但如果需要长期从互联网访问,使用子域名和 HTTPS 更安全。
Uptime Kuma 能显示 CPU、RAM 和磁盘使用率吗?
它不是完整的服务器指标系统。如需监控服务器资源,建议搭配 Prometheus、Netdata、Zabbix 或其他专业工具。
