前言

前段时间发现一个开源可自托管的网站服务运行状态监控服务—— Uptime Kuma,最近在整理 Oracle 免费服务器,早就想玩 Cloudflare Zero Trust 了,这次先来试试 Cloudflare Tunnel。

Uptime Kuma

初始条件:

  • 域名已经添加到 Cloudflare 上
  • 在 Cloudflare Zero Trust 平台注册一个 Team (Free Plan 即可)

准备环境

Cloudflare Tunnel

本文演示的服务器是新开的 Oracle 免费服务器 (Ubuntu 22.04.1 LTS x86_64),通过 SSH 登录

# 刷新软件源 && 更新软件包
$ sudo apt update && \
apt upgrade -y

# 安装环境所需的软件包
$ sudo apt install -y curl wget && \
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - && \
sudo apt install -y nodejs

# 验证安装
$ node -v
$ npm -v

# 安装 PM2 守护进程管理器
$ sudo npm install pm2 -g

[可选] 设置系统 Swap 交换分区

因为 Oracle 免费服务器的运行内存很小,所以这里先设置下 Swap

# 1GB RAM with 2GB Swap
$ sudo fallocate -l 2G /swapfile && \
sudo dd if=/dev/zero of=/swapfile bs=1024 count=2097152 && \
sudo chmod 600 /swapfile && \
sudo mkswap /swapfile && \
sudo swapon /swapfile && \
echo "/swapfile swap swap defaults 0 0" | sudo tee -a /etc/fstab && \
sudo swapon --show && \
sudo free -h

部署 Uptime Kuma

上面的「准备环境」完成后就可以开始部署 Uptime Kuma 了

$ git clone https://github.com/louislam/uptime-kuma.git && \
cd uptime-kuma && \
npm run setup

# 使用 PM2 守护运行 Uptime Kuma
$ pm2 start server/server.js --name uptime-kuma
# 设置 PM2 跟随系统启动(执行提示的命令)
$ pm2 startup
# 开始守护 uptime-kuma 服务(现在 Uptime Kuma 运行在本地 3001 端口上)
$ pm2 start uptime-kuma

后续 PM2 对 Uptime Kuma 的进程守护和管理

# 启动 Uptime Kuma
$ pm2 start uptime-kuma
# 查看 Uptime Kuma 运行状态
$ pm2 status uptime-kuma
# 停止 Uptime Kuma 服务
$ pm2 stop uptime-kuma
# 重启 Uptime Kuma 服务
$ pm2 restart uptime-kuma

配置 Cloudflare Tunnel

登录 Cloudflare Zero Trust 控制台,选择左侧导航栏的 Access 菜单,进入 Tunnels 配置,点击 Create a tunnel 创建一个 Tunnel,输入 Tunnel 隧道名称

Tunnel Name

选择服务器的操作系统和平台架构

Choose Environment

复制左边命令粘贴到 SSH 会话里安装 Cloudflared(注意保护 Refresh Token 不要泄漏)

Install Cloudflared

现在 Cloudflared 服务已经正常安装在我们的服务器上了,接下来配置 Cloudflared 监听服务即可

Add Public Hostname

点击保存,Cloudflare 会自动给托管的域名添加一条 DNS 解析记录。现在打开你的域名就可以愉快的访问了。

点击本站页脚的「运行状态」就可以查看 刚刚部署的 Uptime Kuma 服务啦~

PS:只要是能安装 Cloudflared 的机器、并且可以访问 Cloudflare 的网络(中国大陆的机器可能速度会有点慢),就可以使用 Cloudflare Tunnel 保护你的访问。

Cloudflare Tunnel 可以用是内网穿透、反向代理、完全自动的 HTTPS,支持 HTTP, HTTPS, TCP, UNIX, SSH, RDP, SMB, UNIX+TLS… 等协议,如果配合 Cloudflare 的零信任策略,还可以有更安(hao)全(wan)的玩法,比如:零信任 SSH、浏览器在线 SSH……

参考资料