在入手这个廉价服务器的第三个月,我才发现部署一个网页状态监控服务是为数不多的能让这个“鸡肋”避免吃灰命运的选择;而且由于其特殊的网络条件,通知服务的选择又极大地受限了……
从下单到吃灰
学期初,我在刷狗云的官方群聊时,意外发现了他们刚刚上架了重庆机房的服务器,还推出了不少优惠活动──一个卖给中国大陆客户“优化线路”的商家开始卖国内服务器了,倒是挺稀奇。
简单看了一眼价格,发现最低配的仅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 Manager和Uptime 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.com
和changeme
。
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 Host
,Domain 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 SSL
、HTTP/2 Support
、HSTS Enable
和HSTS 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小鸡找了一个“无用之用” 的用途,但是话说回来,我当初为什么要买这台服务器来着?
高端玩家。
青山 2023-11-21
基本上也就是吃灰服务器再利用了,手头的服务器太多,用一个闲置服务器去监测那些服务的可用性也不为过吧😂
alpacabro 2023-11-21 回复 @青山