Uptime Kuma 完整教學 2026:91K 星自架監控神器,Docker 安裝、10 種監控類型、狀態頁與 Telegram 通知一次學會

Uptime Kuma 是一套 MIT 授權、GitHub 91,221 星的開源自架監控工具,支援 HTTP、TCP、Ping、DNS、Push、Docker 容器等 10 種監控類型,最低 20 秒檢查一次,內建 108 種通知整合(含 Telegram、Discord、LINE、Ntfy、SMTP)與多個公開狀態頁。這篇 2026 完整教學從 Docker Compose 安裝、新增監控、通知設定、Caddy 反向代理搭配 WebSocket,到 kuma.db 正確備份與升級陷阱,全部附可直接執行的指令與設定檔。

  • Dennis
  • 9 分鐘閱讀
Uptime Kuma 完整教學 2026:91K 星自架監控神器,Docker 安裝、10 種監控類型、狀態頁與 Telegram 通知一次學會

Uptime Kuma 是一套 MIT 授權、GitHub 91,221 星的開源自架監控工具,用一個 Docker 容器就能監控網站、API、資料庫、DNS、Docker 容器與遊戲伺服器,最低 20 秒檢查一次,內建 108 種通知整合與多組公開狀態頁——完全免費、資料留在自己手上。 這篇教學從安裝、新增監控、通知設定,到 Caddy 反向代理與 kuma.db 備份陷阱,全部附可直接複製執行的指令。

什麼是 Uptime Kuma?

Uptime Kuma 由開發者 Louis Lam 於 2021 年 7 月開源,採用 MIT 授權、以 Node.js + Vue 3 撰寫。它的定位非常明確:「簡單易用的自架版 UptimeRobot」

作者在 README 裡直白寫下動機:他想要一套華麗 UI 的自架監控工具,但當時最接近的 statping 已不再維護,於是乾脆自己寫一套。這個「順手做」的專案,五年後長成了 91,221 顆星、8,396 個 fork 的基礎設施級工具,最新版本為 2.5.3(2026 年 8 月 22 日發布)。

它跟 Grafana + Prometheus 那類 Metrics 系統最大的差別是:Uptime Kuma 只回答一個問題——「這個服務現在活著嗎?」,而且用最好懂的介面回答你。 你不需要寫 exporter、不需要學 PromQL,開瀏覽器點兩下就能加一個監控。

flowchart TB
    subgraph VPS["你的 VPS / 家用主機"]
        UK["Uptime Kuma 容器<br/>:3001<br/>/app/data/kuma.db"]
    end
    UK -->|HTTP 檢查| A["網站 most.tw"]
    UK -->|HTTP 檢查| B["外部 API"]
    UK -->|TCP 檢查| C["PostgreSQL :5432"]
    UK -->|Ping| D["路由器 / 內網主機"]
    UK -->|DNS 查詢| E["MX / A 記錄"]
    UK -->|Push 心跳| F["cron job / 備份腳本"]
    UK -->|docker.sock| G["其他容器狀態"]
    UK -->|108 種通知| H["Telegram / Discord<br/>LINE / Ntfy / Email"]
    I["公開狀態頁<br/>status.most.tw"] --> J["客戶 / 使用者"]
    UK -.->|Caddy 反向代理 + WebSocket| I

為什麼要自架?跟 UptimeRobot 差在哪

項目Uptime Kuma(自架)UptimeRobot(雲端 SaaS)
費用完全免費(MIT)免費方案 + 付費 Pro
監控數量上限無硬性上限(看你的硬體)免費版 50 個
檢查間隔最低 20 秒免費版 5 分鐘
通知整合108 種,含自架 Ntfy、Gotify主流雲端服務
資料主權全在自家 kuma.db存在第三方伺服器
監控節點單一節點(你部署的那台)全球多區域節點
公開狀態頁支援多組 + 自訂網域支援

一句話總結:UptimeRobot 的價值在「全球多節點」——從外部多個地點確認服務是否活著;Uptime Kuma 的價值在「免費、無限、資料自持」。如果你同時想監控外網網站與內網設備(例如家裡的 NAS、內網資料庫),Uptime Kuma 是唯一能在同一介面裡搞定的選擇,因為它就跑在你的內網裡。

Docker Compose 安裝(推薦)

官方 Compose 檔只有 9 行,先建目錄再下載啟動:

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

compose.yaml 官方內容如下:

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

啟動後打開 http://你的主機IP:3001 就能看到首次設定畫面。這裡有個資安細節:上面的 -p "3001:3001" 會把介面曝露在所有網路介面上。 如果你打算用反向代理搭配網域存取,建議改成只綁本機:

    ports:
      - "127.0.0.1:3001:3001"

不想用 Compose?一行 docker run 也可以

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

⚠️ 官方明確警告:不支援 NFS 等網路檔案系統。 Uptime Kuma 內部用 SQLite(kuma.db)儲存資料,掛在 NFS 上很容易遇到資料庫鎖定與損毀。請務必映射到本地目錄或本地 Docker volume

第一步:開帳號與 2FA

首次登入時建立管理員帳號,接著立刻做兩件事:

  1. 設定 → 安全性 → 啟用 2FA:Uptime Kuma 支援 Two-Factor Authentication。若日後遺失驗證器,可以透過官方 CLI 工具重置。
  2. 更改預設監控間隔:預設 60 秒,最低可以調到 20 秒。注意調越短,對目標網站與你自己 VPS 的負擔越大,內網服務可以短,外部網站建議 60 秒就好。

支援的 10 種監控類型

監控類型用途實務範例
HTTP(s)檢查狀態碼監控 https://most.tw 回 200
HTTP(s) Keyword檢查頁面是否含特定關鍵字確認首頁仍包含「AI 新聞」字樣,避免監控到錯誤頁
HTTP(s) JSON Query對 JSON 回應做條件檢查監控 API /health 回傳 {"status":"ok"}
TCP檢查連接埠是否可連PostgreSQL 5432、Redis 6379
PingICMP 延遲與存活路由器、內網 NAS、VPS
DNS Record檢查 DNS 記錄解析確認 MX 或 A 記錄沒被誤改
Push由目標端主動回報心跳cron job、備份腳本、IoT 裝置
Docker Container監控容器執行狀態需要掛載 docker.sock(見下方警告)
Steam Game Server遊戲伺服器存活自架 Minecraft/Steam 伺服器
WebsocketWebSocket 連線可用性即時通訊服務

新增方式:右上角「+ 新增監控」→ 輸入名稱、選類型、填 URL/主機 → 設定心跳間隔(Heartbeat Interval)與重試次數(Retries)

⚠️ 重試次數是最容易被忽略的設定。若設為 0,一次網路抖動就會觸發告警,一個晚上可能收上百則通知。建議外部網站設 Retries = 2~3、重試間隔 60 秒,確認真的掛了才通知。

Push 監控:讓 cron job 自己回報

這是 Uptime Kuma 最有價值的功能之一。新增一個 Push 類型監控後,它會給你一組專屬 URL,只要在腳本結尾打一個 HTTP 請求就完成回報:

# 例如每日備份腳本的最後一行
curl -fsS -m 10 --retry 5 \
  "http://127.0.0.1:3001/api/push/你的PushToken?status=up&msg=OK&ping=5"

如果某天腳本沒跑完、沒送出心跳,Uptime Kuma 會在設定的寬限期後發出告警。「排程沒跑」這種靜默失敗,只有 Push 監控能抓到。

通知整合:108 種,這裡教最常用的四個

Uptime Kuma 內建 108 種通知管道(實際是 src/components/notifications/ 下的 108 個整合),從 Telegram、Discord、Slack、Ntfy、Gotify、Pushover、PagerDuty,到 LINE、HomeAssistant、Google Sheets 通通有。

管道設定要點
Telegram@BotFather 建立 Bot 拿 Token → 取得 Chat ID → 貼進設定,可調靜音時段
Discord頻道設定 → 整合 → 建立 Webhook URL → 貼上即可
LINE支援 LINE 通知管道,適合已經用 LINE 當工作通訊的團隊
SMTP Email填主機與 Port(25 / 465 / 587);Gmail 需用應用程式密碼,並建議設定 SPF/DKIM 避免進垃圾信
Ntfy / Gotify自架推播首選,填伺服器網址 + Topic 或 Access Token,完全不出自己的網路

實戰建議:設定兩層通知。 第一層用免費、即時的 Telegram/Ntfy;第二層用 Email 當備援。如果第一層的通道本身掛了(例如你的 Telegram Bot 被限流),第二層還能救你一次。

公開狀態頁:給客戶看的那一面

狀態頁(Status Page)是 Uptime Kuma 的另一個殺手級功能:

  • 支援多個獨立狀態頁(自 v1.13.0 起)
  • 支援依網域對應不同狀態頁(自 v1.14.0 起),例如 status.example.com 給 A 客戶、status.example.org 給 B 客戶
  • 預設 slug 是 default,所以 https://你的網域/status 實際會導到 /status/default

⚠️ 狀態頁有快取。 為了降低負載,公開狀態頁的結果會快取 5 分鐘、頁面每 5 分鐘自動刷新一次。也就是說管理後台已經紅燈了,客戶看到狀態頁可能還要再等幾分鐘才會變色。這是設計取捨,不是 bug。

搭配 Caddy 反向代理(含 WebSocket)

Uptime Kuma 前端是 SPA,透過 **WebSocket(Socket.io)**與後端即時通訊。反向代理必須正確轉發 HTTP UpgradeConnection 標頭,否則介面會連不上、數據不會更新。

Caddy 2 的 reverse_proxy 預設就會處理 WebSocket 升級,所以設定只要三行:

status.most.tw {
    reverse_proxy 127.0.0.1:3001
}

Nginx 就必須手動補上:

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-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
}

HostX-Forwarded-Host 一定要轉發,否則 Uptime Kuma 無法辨識請求來自哪個網域,多網域狀態頁對應就會失效。若你前面還掛了 authentik 之類的 SSO,記得把 /status/*/api/status-page/*/assets/* 設為免驗證路徑,並在 Uptime Kuma 裡把 Trust Proxy 打開。

(延伸:Caddy 的完整設定與 HTTPS 自動化可參考站內的 Caddy 完整教學 2026。)

監控 Docker 容器:方便但危險

想在 Uptime Kuma 裡直接看到其他容器狀態,需要把 Docker socket 掛進去:

services:
  uptime-kuma:
    image: louislam/uptime-kuma:2
    restart: unless-stopped
    volumes:
      - ./data:/app/data
      - /var/run/docker.sock:/var/run/docker.sock   # 監控容器用
    ports:
      - "127.0.0.1:3001:3001"

⚠️ 掛載 /var/run/docker.sock 等於把主機的極高權限交給這個容器。 任何能存取 Uptime Kuma 管理介面的人,理論上都能透過 Docker API 做更多事。如果你只需要監控 HTTP/TCP 服務,官方建議把這行移除。 若真的需要,請務必搭配 2FA 與只綁 127.0.0.1

備份與升級(最多人踩雷的地方)

備份正確做法

# 1. 先停容器,避免 SQLite WAL 寫入中
docker stop uptime-kuma

# 2. 打包整個資料目錄
tar czf uptime-kuma-backup-$(date +%F).tar.gz ./data

# 3. 再啟動
docker start uptime-kuma

⚠️ 陷阱:不要只依賴「設定 → 備份」匯出的 JSON 檔。 那只是設定備份,無法用來做完整災難復原。真正的資料是 /app/data/kuma.db(以及 kuma.db-walkuma.db-shmuploads/ 目錄)。SQLite 在線熱備份容易損毀,務必先停容器再打包

升級方式

cd uptime-kuma
docker compose pull
docker compose up -d

升級前請先備份 data/ 目錄。建議加個 Docker Hub 的版本標籤檢視,確認鏡像 :2 對應的最新版本(目前為 2.5.3)。

常見陷阱速查

陷阱解法
監控間隔設太短、告警洗版外部網站 60 秒 + Retries 2~3;內網可縮到 20 秒
介面連上後數據不動反向代理沒轉發 WebSocket 的 UpgradeConnection 標頭
多個狀態頁全部顯示同一組沒轉發 HostX-Forwarded-Host
資料庫損毀掛在 NFS 上,或備份時沒停容器
只備份 JSON 匯出檔那不是完整備份,要打包整個 /app/data
容器監控用了卻被入侵docker.sock 權限過大,非必要不要掛
狀態頁顏色沒即時更新公開狀態頁快取 5 分鐘,屬正常行為

小結:三十分鐘就能補上的可觀測性底線

多數自架族的監控是「服務掛了、客戶先發現、你才發現」。Uptime Kuma 的價值不在於它能做到 Prometheus 那種深度指標分析,而在於它把「服務活著嗎」這件事的成本降到接近零——9 行程式碼、一個容器、三十分鐘設定,就換到 20 秒級的可用性檢查、Push 心跳、以及一個能給客戶看的公開狀態頁。

建議的下一步順序是:先監控你的網域與 VPS(HTTP + Ping),接著補上資料庫的 TCP 檢查,再加一個 Push 監控給每日備份腳本。等你收到第一則「備份沒跑」的 Telegram 通知,就會知道這三十分鐘有多划算。


延伸閱讀

資料來源

📬 訂閱 most.tw 電子報

每週精選 AI 工具教學與技術乾貨,直接送到你的信箱。免費、隨時可退訂。

💬 有問題想討論?加 LINE 聯絡我

歡迎透過 LINE 官方帳號直接留言,我會盡快回覆你的問題。

加入 LINE 好友