Hey, guy, how are you?

在国内仅IPv6服务器上搭建Uptime Kuma

在入手这个廉价服务器的第三个月,我才发现部署一个网页状态监控服务是为数不多的能让这个“鸡肋”避免吃灰命运的选择;而且由于其特殊的网络条件,通知服务的选择又极大地受限了……

从下单到吃灰

学期初,我在刷狗云的官方群聊时,意外发现了他们刚刚上架了重庆机房的服务器,还推出了不少优惠活动──一个卖给中国大陆客户“优化线路”的商家开始卖国内服务器了,倒是挺稀奇。

简单看了一眼价格,发现最低配的仅IPv6服务器通过优惠码,只需要70元就能包年,1C1G25M的配置也挺能打,想到可以搭建内网穿透服务,顺便还能测试一下使用廉价国内服务器进行校园网IPv6免流的可行性测试,何乐而不为呢?

可惜事与愿违,我下单后,SSH登陆上服务器后才猛然想起:在公网IPv6环境下完全不需要内网穿透,直接配置DDNS就行了;IPv6免流服务器至少需要一个IPv6入口和IPv4出口,前者大部分国内廉价NAT服务器没有,这台服务器有;而后者正是这台服务器所缺少的……而且,由于服务器在国内,使用不管是使用DNS64、Hurricane Electric IPv6 Tunnel Broker 还是 CloudFlare Warp 接管出站流量都不能提供令人满意的体验(毕竟这些服务都在海外架设,没有大陆节点);自己架设国内DNS64?那我买这台服务器干嘛……

折腾了一圈,我对这台服务器的满意度降到了最低,就连apt update后的等待也令我焦躁。但是为了积分到账,我已经点过确认订单了,退款不太现实;把网站迁移到这上面来?大部分访客还得借助CDN提供的IPv4地址访问,这个尽管有经营性备案,但是堪比oneman的商家的SLA保证我也不大敢想象,还是先就这样放着吃灰吧。

吃灰小鸡的“无用之用”

十一小长假期间,我入手了一台二手威廉通TS-251+,由此入坑了NAS,不过这是后话,暂且不表;随着在NAS上使用容器搭建的自用服务越来越多,怎么监测这些服务的可用性也成了问题──手头的常用服务器没有IPv6地址,再专门购买专业的监测服务或者服务器也不划算。查看这各家服务器价格时,我突然发现了这台“吃灰”了将尽3个月的服务器正好能派上用场。

安装前的简单准备

用SSH登陆上服务器,先把软件源更换为MirrorZ镜像(教育网IPv6软件镜像智能分流),再参考烧饼大佬的Debian 12 / Ubuntu 22.04 安装 Docker 以及 Docker Compose 教程顺利的安装了Docker环境,只需要使用Nginx Proxy ManagerUptime Kuma两个容器即可,理论上两行命令即可,不过为了方便后期维护,我还是使用 Docker Compose 进行配置。

P.S. 为了避免繁琐的路由配置,我使用了Host网络模式来运行容器,但是这样可能带来一些潜在的问题和风险,请根据自己的需求自行更改配置。

具体运行配置

Nginx Proxy Manager

docker-compose.yml文件如下:

version: '3.8'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    network_mode: host
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

在配置文件目录下执行docker compose up -d,运行成功后打开http://服务器IP:82(如果是IPv6地址,两边需要加上中括号)即可打开WebUI,默认的账号和密码为admin@example.comchangeme

Uptime Kuma

docker-compose.yml文件如下:

version: '3.8'

services:
  uptime-kuma:
    image: louislam/uptime-kuma:1
    container_name: uptime-kuma
    volumes:
      - uptime-kuma:/app/data
    network_mode: host
    restart: always

volumes:
  uptime-kuma:

在配置文件目录下执行docker compose up -d,运行成功后打开http://服务器IP:3001(如果是IPv6地址,两边需要加上中括号)即可打开WebUI,此时就可以创建管理员账号。

反向代理

以反向代理Uptime Kuma为例,在 Nginx Proxy Manager 的 Proxy Hosts 选项卡中选择Add Proxy HostDomain Names填入你已经配置好DNS并解析到服务器的域名,Scheme一般保持http即可,Forward Hostname / IP一项,如果Docker容器以Host网络模式运行,填入127.0.0.1(本机IP),如果是默认的Bridge模式则需要填入172.17.0.1(docker0 网桥的IP),Forward Port则是容器对外提供服务的端口,在刚刚的例子中为3001

下方的选项中,建议开启Websockets Support(部分容器需要,开了也不多余)和Block Common Exploits(阻止常见漏洞,提高安全性),而Cache Assets(缓存文件)不建议开启,配置不佳的缓存策略可能会造成奇奇怪怪的问题。

如果需要HTTPS访问的话就需要准备SSL证书,不知道是不是国内服务器的网络条件所限,不管是使用HTTP-01还是DNS-01都没能成功申请 Let's Encrypt 证书,其实阿里云或者腾讯云提供的一年期单域名证书就够用了,不过为了方便后面折腾,我还是选择使用HTML5网页版ACME客户端申请了一张三个月有效期的泛域名证书。

将证书上传到 Nginx Proxy Manager 之后,就可以编辑 Proxy Hosts 中站点的 SSL 选项,SSL Certificate选择你刚刚上传的证书即可,至于Force SSLHTTP/2 SupportHSTS EnableHSTS Subdomains都可以打开,基本上没用什么副作用。

通知设置

Uptime Kuma 的 WebUi 设计的相当的美观易用,我很快就将自己部署的网站和服务加入了检测列表。

但是配置通知时却犯了难──我常用的飞书群机器人依赖webhook实现通知,但是 webhook URL 仅仅能通过IPv4协议访问,有找了其他一众第三方推送,也都不支持IPv6……通过SMTP协议发送电子邮件也是不错的选择,国内的QQ邮箱、网易企业邮和国外的Gmail、Yandex Mail 都支持IPv6,但是使用 Uptime Kuma 自己提供的SMTP选项就是不能成功访问邮件服务器──不知为何,程序总是试图访问完全不可达的 IPv4 地址,哪怕修改IPv6优先级或是修改hosts文件都无济于事……

正要放弃是,突然发现 Uptime Kuma 支持 Apprise,其中就包含了两种不同的SMTP访问方式,抱着试一试的心态填入了配置,这次尽然成功了!

所以,如果你也打算在国内IPv6 Only机器上使用QQ邮箱进行消息提醒,Apprise的配置只需要一行──mailto://<你的QQ号>:<QQ邮箱授权码>@qq.com/?to=<收件人邮箱>,然后就可以正常使用了。

顺带一提,邮箱通知其实只开启SSL证书过期通知就行了,尤其是你的服务器SLA没有那么高的情况下,相信你也不希望一打开邮箱就是这么“壮观”的景象……

经过一番折腾,终于给这个吃灰的国内IPv6 Only小鸡找了一个“无用之用” 的用途,但是话说回来,我当初为什么要买这台服务器来着?

在国内仅IPv6服务器上搭建Uptime Kuma

https://www.alpacabro.com/archives/deploy-uptime-kuma-on-cn-ipv6-vps.html

作者

alpacabro

发布时间

2023-11-21

许可协议

CC BY 4.0

添加新评论