返回文章列表

閒置 Mac mini 透過 Cloudflare Tunnel 變身線上伺服器

將閒置的 Mac mini 透過 Cloudflare Tunnel 變成線上伺服器的完整教學

發佈於 2024年12月12日·6 分鐘

使用的平台

  • 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.com 或 https://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 :80 或 lsof -i :8080
  2. 檢查 DNS 記錄是否設定正確
  3. 確認 ingress 規則是否設定正確

最後的話

這個設定讓我閒置的 Mac mini 重獲新生,變成了一台功能強大的家用伺服器。我現在用它架設個人網站、Nextcloud 雲端儲存和一些開發專案。最令人滿意的是,整個過程不需要公共 IP,也不需要開放家用網路的連接埠,所有流量都透過 Cloudflare 的安全隧道加密傳輸。

雖然 Mac mini 不是傳統意義上的伺服器,但對個人使用來說,它安靜、低功耗、效能足夠,是非常理想的選擇。加上 Cloudflare Tunnel 提供的安全性與便利性,這個組合簡直完美!

如果你也有閒置的 Mac mini 或其他電腦,不妨試試這個方法,賦予它新的使命。