凌晨兩點,你剛花 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/Homebrew、node_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