All Posts

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

将闲置的 Mac mini 通过 Cloudflare Tunnel 变成在线服务器的完整教程

Published Dec 12, 2024·6 min read

使用的平台

  • Mac mini (2018)
    • macOS Sonoma 14.5
    • 3.6 GHz 四核 Intel Core i3
    • 8GB RAM
    • 256GB SSD
  • Cloudflare
    • 免费账户
    • 自有域名

参考资源

前言

去年搬家时,我发现了几年前购买的 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 或其他计算机,不妨尝试这个方法,给它一个新的使命。