Skip to content

闲置 Mac mini 通过 Cloudflare Tunnel 变身在线服务器

Updated: at 10:21 PM

使用的平台

参考资源

前言

去年搬家时,我发现了几年前购买的 Mac mini 被我遗忘在角落里积灰。这台小机器性能其实还不错,扔掉太可惜,而且我一直想要一个家庭服务器来托管一些个人项目。问题是,我住的公寓不允许从外部直接访问内网设备,而且我也不想暴露家庭网络的 IP 地址。

经过一番研究,我发现 Cloudflare Tunnel 是一个完美的解决方案 - 它可以让我的 Mac mini 在不需要公网 IP、不需要开放端口的情况下,安全地将服务发布到互联网上。这里我将分享如何实现这一过程的完整步骤。

步骤

准备工作

  1. 确保你有一个 Cloudflare 账户

    • 注册一个免费的 Cloudflare 账户
    • 将你的域名添加到 Cloudflare 进行管理(如果还没有完成这一步)
  2. 准备你的 Mac mini

    • 确保 Mac mini 已经更新到最新的系统版本
    • 保持机器通电并连接到网络

安装 Cloudflared

  1. 使用 Homebrew 安装 cloudflared

    • 如果未安装 Homebrew,先安装它:

      /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
      
    • 安装 cloudflared:

      brew install cloudflare/cloudflare/cloudflared
      
  2. 验证安装

    cloudflared --version
    

    应该会显示类似 cloudflared version 2025.5.0 的内容

登录并创建 Tunnel

  1. 登录 Cloudflare 账户

    cloudflared tunnel login
    

    这会打开浏览器窗口,要求你登录 Cloudflare 并授权 cloudflared 访问

  2. 创建 Tunnel

    cloudflared tunnel create mac-mini-tunnel
    

    这里的 mac-mini-tunnel 是你的 tunnel 名称,可以根据喜好命名

  3. 创建成功后,会显示一个 UUID 和一个配置文件路径,请记下这个 UUID,后面会用到

配置 Tunnel

  1. 创建配置文件

    mkdir -p ~/.cloudflared
    nano ~/.cloudflared/config.yml
    
  2. 在配置文件中添加以下内容,替换 your-tunnel-uuid 为之前记下的 UUID

    tunnel: 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 中添加记录

  1. 登录 Cloudflare 控制面板

  2. 为你的 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

  1. 手动启动 tunnel 进行测试

    cloudflared tunnel run mac-mini-tunnel
    

    如果一切正常,你应该能看到类似 2025-05-06T16:30:00Z INF Tunnel mac-mini-tunnel successfully established connections 的输出

  2. 设置 tunnel 作为系统服务自动启动

    sudo cloudflared service install
    

    这会创建一个 LaunchDaemon,使 tunnel 在系统启动时自动运行

安装和配置你的服务

现在你的 tunnel 已经建立,接下来就可以在 Mac mini 上安装你想要的服务了。以下是几个简单的示例:

  1. 简单的网站(使用 nginx)

    brew install nginx
    sudo nano /usr/local/etc/nginx/nginx.conf
    

    配置 nginx 监听 80 端口,然后启动它:

    brew services start nginx
    
  2. 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
    

测试访问

  1. 在浏览器中访问你设置的域名,例如 https://mac-mini.yourdomain.comhttps://nextcloud.yourdomain.com

  2. 如果一切配置正确,你应该能看到相应的服务页面,并且所有流量都是通过 Cloudflare 的安全隧道传输的

进阶配置

启用访问控制

为了增加安全性,你可以设置 Cloudflare Zero Trust 访问策略:

  1. 在 Cloudflare 控制台中进入 Zero Trust > Access > Applications
  2. 添加一个新的应用程序,选择你的 tunnel 和域名
  3. 配置访问策略,例如只允许特定的邮箱地址访问

设置自动备份

我将重要数据设置为自动备份:

  1. 安装 restic 备份工具

    brew install restic
    
  2. 设置一个简单的备份脚本

    mkdir -p ~/scripts
    nano ~/scripts/backup.sh
    

    添加以下内容:

    #!/bin/bash
    RESTIC_PASSWORD="your-password" restic -r /Volumes/ExternalDrive/backups backup /path/to/your/data
    
  3. 使用 crontab 设置定时任务

    crontab -e
    

    添加:

    0 2 * * * ~/scripts/backup.sh > ~/backup.log 2>&1
    

故障排除

Tunnel 连接问题

如果 tunnel 无法连接:

  1. 检查网络连接
  2. 验证 Cloudflare 账户状态
  3. 检查配置文件路径是否正确
  4. 查看日志:cloudflared tunnel run mac-mini-tunnel --loglevel debug

服务不可访问

如果通过域名无法访问服务:

  1. 确认本地服务是否正在运行:lsof -i :80lsof -i :8080
  2. 检查 DNS 记录是否正确配置
  3. 确认 ingress 规则是否正确配置

最后的话

这个设置让我的闲置 Mac mini 重获新生,变成了一个功能强大的家庭服务器。我现在用它托管个人网站、Nextcloud 云存储和一些开发项目。最令人满意的是,整个过程不需要公网 IP,不需要开放家庭网络的端口,所有流量都通过 Cloudflare 的安全隧道加密传输。

虽然 Mac mini 不是传统意义上的服务器,但对于个人使用来说,它安静、低功耗、性能足够,是一个非常理想的选择。加上 Cloudflare Tunnel 提供的安全性和便利性,这个组合简直是完美!

如果你也有闲置的 Mac mini 或其他计算机,不妨尝试这个方法,给它一个新的使命。


Previous Post
Coolify部署记录
Next Post
PostgreSQL 查询语法基础教程