使用的平台
- Mac mini (2018)
- macOS Sonoma 14.5
- 3.6 GHz 四核 Intel Core i3
- 8GB RAM
- 256GB SSD
- Cloudflare
- 免费账户
- 自有域名
参考资源
- Cloudflare Tunnel 官方文档:https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/
- Cloudflare Zero Trust 指南:https://developers.cloudflare.com/cloudflare-one/
前言
去年搬家时,我发现了几年前购买的 Mac mini 被我遗忘在角落里积灰。这台小机器性能其实还不错,扔掉太可惜,而且我一直想要一个家庭服务器来托管一些个人项目。问题是,我住的公寓不允许从外部直接访问内网设备,而且我也不想暴露家庭网络的 IP 地址。
经过一番研究,我发现 Cloudflare Tunnel 是一个完美的解决方案 - 它可以让我的 Mac mini 在不需要公网 IP、不需要开放端口的情况下,安全地将服务发布到互联网上。这里我将分享如何实现这一过程的完整步骤。
步骤
准备工作
-
确保你有一个 Cloudflare 账户
- 注册一个免费的 Cloudflare 账户
- 将你的域名添加到 Cloudflare 进行管理(如果还没有完成这一步)
-
准备你的 Mac mini
- 确保 Mac mini 已经更新到最新的系统版本
- 保持机器通电并连接到网络
安装 Cloudflared
-
使用 Homebrew 安装 cloudflared
-
如果未安装 Homebrew,先安装它:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
-
安装 cloudflared:
brew install cloudflare/cloudflare/cloudflared
-
-
验证安装
cloudflared --version
应该会显示类似
cloudflared version 2025.5.0
的内容
登录并创建 Tunnel
-
登录 Cloudflare 账户
cloudflared tunnel login
这会打开浏览器窗口,要求你登录 Cloudflare 并授权 cloudflared 访问
-
创建 Tunnel
cloudflared tunnel create mac-mini-tunnel
这里的
mac-mini-tunnel
是你的 tunnel 名称,可以根据喜好命名 -
创建成功后,会显示一个 UUID 和一个配置文件路径,请记下这个 UUID,后面会用到
配置 Tunnel
-
创建配置文件
mkdir -p ~/.cloudflared nano ~/.cloudflared/config.yml
-
在配置文件中添加以下内容,替换
your-tunnel-uuid
为之前记下的 UUIDtunnel: your-tunnel-uuid credentials-file: /Users/你的用户名/.cloudflared/your-tunnel-uuid.json ingress: - hostname: mac-mini.yourdomain.com service: http://localhost:80 - hostname: nextcloud.yourdomain.com service: http://localhost:8080 - service: http_status:404
这个配置会将
mac-mini.yourdomain.com
的流量转发到本地的 80 端口,将nextcloud.yourdomain.com
的流量转发到本地的 8080 端口。你可以根据自己的需求修改这些配置。
在 DNS 中添加记录
-
登录 Cloudflare 控制面板
-
为你的 tunnel 添加 CNAME 记录
cloudflared tunnel route dns mac-mini-tunnel mac-mini.yourdomain.com cloudflared tunnel route dns mac-mini-tunnel nextcloud.yourdomain.com
这会自动在 Cloudflare DNS 中添加必要的 CNAME 记录
运行 Tunnel
-
手动启动 tunnel 进行测试
cloudflared tunnel run mac-mini-tunnel
如果一切正常,你应该能看到类似
2025-05-06T16:30:00Z INF Tunnel mac-mini-tunnel successfully established connections
的输出 -
设置 tunnel 作为系统服务自动启动
sudo cloudflared service install
这会创建一个 LaunchDaemon,使 tunnel 在系统启动时自动运行
安装和配置你的服务
现在你的 tunnel 已经建立,接下来就可以在 Mac mini 上安装你想要的服务了。以下是几个简单的示例:
-
简单的网站(使用 nginx)
brew install nginx sudo nano /usr/local/etc/nginx/nginx.conf
配置 nginx 监听 80 端口,然后启动它:
brew services start nginx
-
Nextcloud 云存储
你可以使用 Docker 快速部署:
brew install docker docker-compose mkdir ~/nextcloud cd ~/nextcloud
创建 docker-compose.yml 文件:
version: '3' services: nextcloud: image: nextcloud ports: - 8080:80 volumes: - ./data:/var/www/html restart: always
启动服务:
docker-compose up -d
测试访问
-
在浏览器中访问你设置的域名,例如
https://mac-mini.yourdomain.com
或https://nextcloud.yourdomain.com
-
如果一切配置正确,你应该能看到相应的服务页面,并且所有流量都是通过 Cloudflare 的安全隧道传输的
进阶配置
启用访问控制
为了增加安全性,你可以设置 Cloudflare Zero Trust 访问策略:
- 在 Cloudflare 控制台中进入 Zero Trust > Access > Applications
- 添加一个新的应用程序,选择你的 tunnel 和域名
- 配置访问策略,例如只允许特定的邮箱地址访问
设置自动备份
我将重要数据设置为自动备份:
-
安装 restic 备份工具
brew install restic
-
设置一个简单的备份脚本
mkdir -p ~/scripts nano ~/scripts/backup.sh
添加以下内容:
#!/bin/bash RESTIC_PASSWORD="your-password" restic -r /Volumes/ExternalDrive/backups backup /path/to/your/data
-
使用 crontab 设置定时任务
crontab -e
添加:
0 2 * * * ~/scripts/backup.sh > ~/backup.log 2>&1
故障排除
Tunnel 连接问题
如果 tunnel 无法连接:
- 检查网络连接
- 验证 Cloudflare 账户状态
- 检查配置文件路径是否正确
- 查看日志:
cloudflared tunnel run mac-mini-tunnel --loglevel debug
服务不可访问
如果通过域名无法访问服务:
- 确认本地服务是否正在运行:
lsof -i :80
或lsof -i :8080
- 检查 DNS 记录是否正确配置
- 确认 ingress 规则是否正确配置
最后的话
这个设置让我的闲置 Mac mini 重获新生,变成了一个功能强大的家庭服务器。我现在用它托管个人网站、Nextcloud 云存储和一些开发项目。最令人满意的是,整个过程不需要公网 IP,不需要开放家庭网络的端口,所有流量都通过 Cloudflare 的安全隧道加密传输。
虽然 Mac mini 不是传统意义上的服务器,但对于个人使用来说,它安静、低功耗、性能足够,是一个非常理想的选择。加上 Cloudflare Tunnel 提供的安全性和便利性,这个组合简直是完美!
如果你也有闲置的 Mac mini 或其他计算机,不妨尝试这个方法,给它一个新的使命。