1. 雲主機
  2. 部落格
  3. 雲端 Mac mini 環境冷啟動加速:Homebrew 鏡像與依賴快取實戰

雲端 Mac mini 環境冷啟動加速:Homebrew 鏡像與依賴快取實戰

遠端 Mac ·約 7 分鐘閱讀

雲端 Mac mini 環境冷啟動加速:Homebrew 鏡像與依賴快取實戰

凌晨兩點,你剛花 9 美元租下一台香港節點的 Mac mini M4,SSH 金鑰五分鐘內就寄到信箱。興沖沖連上去,第一件事是打一行 brew install node,接著眼看進度條卡在下載 bottle 那一步,一動不動。刷新終端機,curl 顯示連線逾時又重連,二十分鐘過去了,你還在等一個本該三秒就能下完的 tarball。這不是網路故障,而是海外機房存取 Homebrew 官方 CDN 的常態延遲——而這種延遲,每次你重開一台新實例都要再等一輪。

場景:新機器到手,依賴安裝就吃掉大半租期

雲端 Mac mini 按天計費的好處是隨開隨用,壞處是每次新實例都是一張白紙。裝完 Xcode Command Line Tools、跑一次團隊的 setup.sh,一般流程裡 brew install 一堆套件、npm install 一堆相依套件、pod install 再拉一次 CocoaPods 索引,官方來源全部指向海外源站,光看下載速度就能吃掉整台機器一天租金對應的工作時間。如果你只是租一天做一次性任務,這筆成本尤其扎心。

為什麼官方源在雲端節點上特別慢

Homebrew 的 bottle(預編譯套件)預設存放在 GitHub Packages,npm 的官方登錄檔、CocoaPods 的 spec 倉庫也都託管在海外基礎設施上。雲端服務商的國際出口頻寬通常夠用,但到具體 CDN 節點的路由品質參差不齊,尤其第一次建立連線時的 TLS 握手加上 DNS 解析,累加起來就是幾十毫秒到幾百毫秒的延遲,乘上幾百個相依套件,就變成分鐘級甚至小時級的等待。這不是你的機器慢,是鏈路慢。

三步搭建可重複使用的加速鏈路

第一步:切換 Homebrew 的倉庫與 Bottle 網域

先確認現有 Homebrew 是否已經指向境內可達的鏡像,再統一改環境變數,重新啟動終端機工作階段後才會生效:

git -C "$(brew --repo)" remote set-url origin \
  https://mirrors.example-mirror.net/homebrew-core.git
export HOMEBREW_API_DOMAIN="https://mirrors.example-mirror.net/homebrew-bottles/api"
export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.example-mirror.net/homebrew-bottles"
brew update

把這三行寫進 ~/.zprofile,下次開機就不用重複設定。

第二步:用 Brewfile 固化相依套件清單

別一條一條敲 brew install,把團隊常用套件寫進 Brewfile,一次 bundle 就能裝完,還能讓多台節點之間版本保持一致:

tap "homebrew/cask"
brew "node@20"
brew "cocoapods"
brew "watchman"
brew "git-lfs"
cask "visual-studio-code"
brew bundle --file=~/Brewfile

Brewfile 本身只有幾十行,存進程式碼倉庫,新機器到手直接 git clone 專案倉庫再跑一次 bundle,比逐條搜尋安裝指令快得多,也不會漏裝某個隱藏相依套件。

第三步:給程式語言套件管理器配上同款鏡像

Homebrew 提速只解決了一部分,npm、pip、CocoaPods 各有自己預設的來源,得逐一設定:

npm config set registry https://registry.example-npm-mirror.com
pip config set global.index-url https://pypi.example-mirror.com/simple
pod repo-art add master https://cdn.example-cocoapods-mirror.com/master.git

四條鏈路都換完之後,一台全新的 Mac mini 從解壓相依套件到跑完第一次建置,時間對比十分直觀:

環節 官方源實測 鏡像加速後
Xcode CLT + Homebrew 核心套件 約 22 分鐘 約 4 分鐘
npm install(中型專案) 約 9 分鐘 約 2 分鐘
pod install(iOS 專案) 約 7 分鐘 約 2 分鐘
合計 約 40 分鐘 約 8 分鐘

換鏡像不是免費午餐:鏡像站同步官方倉庫存在幾分鐘到幾小時的延遲窗口,關鍵版本升級後建議先跑一次 brew doctor 自我檢查,再對核心 bottle 做一次 shasum -a 256 校驗,確認雜湊值與官方發布一致後才進生產流程。

把預熱好的環境存成快照,下次開機直接沿用

如果你打算按週或按月續租同一節點,加速鏈路還能再往前走一步:裝好相依套件、跑通一次建置之後,把 ~/Library/Caches/Homebrewnode_modules 的公共快取目錄、~/.cocoapods 打包成一個壓縮檔上傳到自己的物件儲存,或者直接在 OnceMini 主控台對目前實例發起一次快照。下次續期或重裝系統後,直接從快照還原磁碟狀態,連鏡像設定這一步都能省掉——實測這套使用者目錄快取打包後大約落在 8GB 到 15GB 之間,OnceMini 256GB 起的 SSD 規格留出這部分空間完全夠用,不影響一般專案檔案的儲存配額。

檢查清單

上線前逐條對照,別等建置失敗才發現漏了一步:

  • Homebrew 三個環境變數是否寫進了 ~/.zprofile(不是只在目前工作階段裡 export)
  • Brewfile 是否已提交進專案倉庫,而不是留在某個人的本機終端機歷史裡
  • npm/pip/CocoaPods 三處鏡像是否都已切換,而不是只改了 Homebrew
  • 關鍵 bottle 是否做過一次 shasum 校驗
  • 若打算續租同一節點,是否已發起過一次環境快照

常見問題

換了鏡像源後 brew update 會不會拉到不完整的套件?

正規鏡像站多為定時全量同步官方倉庫,但存在數分鐘到數小時的延遲窗口。建議安裝後執行 brew doctor 並用 shasum 校驗關鍵 bottle。

環境快照要多大空間才夠?

裝好 Command Line Tools、Homebrew 核心套件與常用語言環境的快取,實測落在 8GB~15GB,OnceMini 256GB 起的 SSD 檔位留有餘量。

只租一天的機器,做這套加速值得嗎?

一次性任務只需三條 export 命令換鏡像源即可,不必做快照;只有按週/月複租同一節點時,快照複用才划算。

需要一台獨享 Mac mini 跑通你的建置流程嗎?

前往控制台租用 Mac mini