在浏览其他博主的博客时偶然发了这个监控工具,觉得还是很有用和好玩的,于是顺手搭建了一个,简单记录一下。

这是一个开源项目,代码在GitHub上,有比较全面的英文文档,搭建起来很容易,官网上对它是这样描述的:It is a self-hosted monitoring tool like "Uptime Robot".(不知道Uptime Robot是啥,查了一下就是个监控工具,和Uptime Kuma最大的区别就是Uptime Kuma可以self-hosted 自托管)

部署运行

Uptime Kuma支持docker部署,我采用的docker-compose的方式,编辑完yml文件直接启动就可以了。

# docker-compose.yml
version: '3.3'

services:
  uptime-kuma:
    image: louislam/uptime-kuma:1
    container_name: uptime-kuma
    volumes:
      - ./uptime-kuma-data:/app/data
      - /var/run/docker.sock:/var/run/docker.sock # 映射Docker宿主
    ports:
      - 3001:3001  # <Host Port>:<Container Port>
    restart: always

直接访问配置的端口号,打开后就可以使用了。官方预览图如下:

img

监控Docker容器

监控项中是可以监控Docker容器的,但是需要配置Docker 宿主,查阅文档后得知,By default, a docker container is self-contained, which means Uptime Kuma cannot access your host. You need to bind the /var/run/docker.sock to your container. 将docker.sock 绑定到的容器有两种方法,一种Share docker.sock with Uptime Kuma Container也是就与Uptime Kuma Container共享docker.sock,所需要的操作就是在docker启动命令上,或docker-compose.yml加上参数。另一种是TCP - Bridge Mode,TCP桥接模式,需要在TCP 端口上公开 Docker 守护进程,有些麻烦,采用第一种方法,需要添加的参数如下:

Command argument:

-v /var/run/docker.sock:/var/run/docker.sock

docker-compose:

volumes:
   - /var/run/docker.sock:/var/run/docker.sock

docker宿主配置完成后,就可以通过容器名称 / ID来监控Docker容器了。

反向代理

通过IP端口访问不方便,配置个域名,使用nginx反向代理一下,即可实现域名访问。反向代理配置如下:

With SSL:

server {
  listen 443 ssl http2;
  # Remove '#' in the next line to enable IPv6
  # listen [::]:443 ssl http2;
  server_name sub.domain.com;
  ssl_certificate     /path/to/ssl/cert/crt;
  ssl_certificate_key /path/to/ssl/key/key;

  location / {
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   Host $host;
    proxy_pass         http://localhost:3001/;
    proxy_http_version 1.1;
    proxy_set_header   Upgrade $http_upgrade;
    proxy_set_header   Connection "upgrade";
  }
}

Without SSL:

server  {
    listen 80;
    # Remove '#' in the next line to enable IPv6
    # listen [::]:80;
    server_name    sub.domain.com;
    location / {
        proxy_pass         http://localhost:3001;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection "upgrade";
        proxy_set_header   Host $host;
    }
}
文章目录