搭建uptime-kuma服务监控面板

随着在互联网VPS和家里软路由搭建了不少项目后,为了监控探活,及时通知报告,我物色到了一款叫uptime-kuma的服务监控面板。

一 简介

uptime-kuma是一款开源监控工具,类似于“Uptime Robot”,UI简洁美观,支持TCP/PING/HTTP监控等,支持多语言其中包括中文。当服务出现故障时,可自动通过 Telegram、Discord、Gotify、Slack、Pushover、Email (SMTP) 等多种服务发送通知消息。

项目地址:https://github.com/louislam/uptime-kuma

二 Docker搭建

1 使用docker-compose

创建docker-compose.yml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
version: "3.0"
services:
  uptime-kuma:
    image: louislam/uptime-kuma:latest
    container_name: uptime-kuma
    volumes:
      - ./data/:/app/data
    ports:
      - 3037:3001
    restart: always

然后docker-compose up -d

2 设置Telegram消息通知

2.1 设置TG消息通知

点击新增,创建监控项,填写 Bot Token 和 Chat ID 即可配置好 Telegram 消息通知。

2.2 解决国内部署无法发送TG通知的问题

2.2.1 CloudFlare workers创建workers
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
const whitelist = ["/bot1111111111:"];
const tg_host = "api.telegram.org";

addEventListener('fetch', event => {
    event.respondWith(handleRequest(event.request))
})

function validate(path) {
    for (var i = 0; i < whitelist.length; i++) {
        if (path.startsWith(whitelist[i]))
            return true;
    }
    return false;
}

async function handleRequest(request) {
    var u = new URL(request.url);
    u.host = tg_host;
    if (!validate(u.pathname))
        return new Response('Unauthorized', {
            status: 403
        });
    var req = new Request(u, {
        method: request.method,
        headers: request.headers,
        body: request.body
    });
    const result = await fetch(req);
    return result;
}
2.2.2 修改uptime-kuma的代码
1
2
3
4
5
6
$ docker exec -it uptime-kuma /bin/bash
$ apt-get update && apt-get install vim -y             // 安装vim
$ vim /app/src/components/notifications/Telegram.vue   // 找到:api.telegram.org,将其替换成你的反代域名(就一处)
$ vim /app/server/notification-providers/telegram.js   // 找到:api.telegram.org,将其替换成你的反代域名(就一处)
$ exit 
$ docker restart uptime-kuma

三 参考资料

0%