開發者VPN完整方案:GitHub、Docker與npm加速設定
GitHub、Docker 映像檔、npm 與 pip 套件若經常逾時,會直接拖慢開發流程。本指南依照實際工作情境整理 VPN、分流與終端機設定,也補充 CI 連線、API 使用和預算建議。
GitHub、Docker 映像檔、npm 與 pip 套件若經常逾時,會直接拖慢開發流程。本指南依照實際工作情境整理 VPN、分流與終端機設定,也補充 CI 連線、API 使用和預算建議。
開發者為什麼需要分開處理 GitHub、Docker 與套件來源
開發工作中的網路請求並不是單一類型。Git clone、GitHub API、Docker Hub 映像檔拉取、npm install、pip install,各自使用不同的網域、連接埠和快取邏輯。瀏覽器能正常開啟 GitHub,不代表 Docker daemon 一定能拉取映像檔;本機終端機可以安裝 npm 套件,也不代表 CI runner 能使用同一份代理設定。
因此,最穩妥的做法不是把所有流量一律導向同一個出口,而是先把工作拆成三層:
- 互動式開發流量。包括 Git、GitHub CLI、套件管理器和 API 測試工具,通常由作業系統代理或終端機環境變數接管。
- 背景服務流量。Docker daemon、容器內的套件安裝、桌面 IDE 的外掛下載,不一定會讀取目前終端機的代理設定,需要另外配置。
- CI/CD 流量。GitHub Actions、自建 runner 或其他建置主機具有獨立的網路環境,本機設定不會自動帶過去,而且代理憑證不能直接寫進公開工作流程檔案。
分層處理還有一個好處:內部 Git 伺服器、公司 API、資料庫和區域網路服務可以維持直連,只有需要跨境存取的公開開發資源才經過加速線路。這樣比較容易排查問題,也不會因為全域代理改變內部服務的來源 IP 或 DNS 行為。
先選擇全域、規則或應用程式代理模式
VPN 客戶端通常提供全域模式、規則分流和直連三種思路。Windows、macOS、Android、iOS、Linux 官方客戶端一般可以直接登入後取得訂閱;Clash Verge、sing-box、Shadowrocket 等相容客戶端則通常透過訂閱連結匯入節點與規則。具體名稱可能因客戶端而不同,但判斷方式基本一致。
| 模式 | 適合場景 | 需要留意的問題 |
|---|---|---|
| 全域代理 | 首次排查 GitHub 或套件下載問題,需要快速確認出口是否有效 | 所有流量都可能經過 VPN,內部網站、區域網路和本地服務可能受到影響 |
| 規則分流 | 日常開發,只讓 GitHub、Docker Hub、npm、PyPI 等目標網域走加速線路 | 規則不完整時,可能出現主站走代理、驗證網域卻直連的情況 |
| 應用程式代理 | 只需要讓 Git、Docker 或套件管理器使用代理 | 每個程式都要單獨設定,換電腦或換 runner 後需要重新配置 |
建議第一次設定時先使用全域模式驗證。確認 GitHub 頁面、Git 操作和套件下載都能完成後,再切換到規則分流。分流規則的核心不是把所有含有 github 字樣的網域都加入,而是同時考慮程式實際請求的 API、登入、下載和物件儲存網域。GitHub Release、套件 tarball 和容器映像檔也可能來自不同的 CDN,只加入主網域往往不夠。
如果使用 Clash Verge 或 sing-box,不要只看節點名稱判斷品質。先更新訂閱,確認代理羣組有可用節點,再檢查模式是否真的切換成功。若使用 Shadowrocket,則要留意「代理」與「直連」規則的優先順序,規則匹配通常是由上到下判定。
動手設定:從 Git 到 npm、pip 的逐項驗證
以下步驟以「先讓本機開發工具能工作,再縮小代理範圍」為順序。正式套用前,請先在客戶端匯入訂閱並連接一條線路。若尚未取得客戶端,可先查看教程;官方客戶端和相容客戶端的操作介面不同,但訂閱匯入、更新節點和選擇線路的邏輯相近。
Git 與 GitHub CLI
Git 對 HTTP(S) 遠端倉庫通常可以使用 HTTP 代理。以下示例中的代理位址只是格式示例,實際主機、連接埠和協議應以客戶端提供的本機代理資訊為準:
git config --global http.proxy http://127.0.0.1:PORT
git config --global https.proxy http://127.0.0.1:PORT
git config --global --get http.proxy
git config --global --get https.proxy
如果客戶端只提供 SOCKS5,Git 也可以使用對應格式:
git config --global http.proxy socks5h://127.0.0.1:PORT
git config --global https.proxy socks5h://127.0.0.1:PORT
socks5h 的重點是讓網域解析也交給 SOCKS 代理處理,避免 Git 的 DNS 請求仍從本地網路發出。若要取消全域設定,不要直接刪除設定檔,使用以下指令即可:
git config --global --unset http.proxy
git config --global --unset https.proxy
GitHub CLI 的登入和 API 請求通常會讀取系統代理或 HTTP_PROXY、HTTPS_PROXY 環境變數。可以在目前終端機工作階段暫時設定:
export HTTP_PROXY=http://127.0.0.1:PORT
export HTTPS_PROXY=http://127.0.0.1:PORT
export ALL_PROXY=socks5h://127.0.0.1:PORT
Windows PowerShell 對應寫法如下:
$env:HTTP_PROXY="http://127.0.0.1:PORT"
$env:HTTPS_PROXY="http://127.0.0.1:PORT"
$env:ALL_PROXY="socks5h://127.0.0.1:PORT"
驗證時先執行 git ls-remote 或使用 GitHub CLI 查詢公開倉庫,再進行 clone。這樣可以區分「代理沒有生效」和「特定倉庫權限不足」兩種問題。若 SSH remote 一直逾時,不要以為 Git 的 HTTP 代理設定會自動接管 SSH;可以先改用 HTTPS remote,或另外為 SSH 配置相容的 SOCKS 跳轉。
npm 與 pip 套件管理器
npm 可以單獨設定 registry 和代理。除非團隊有固定的私有 registry,否則不要隨意更改套件來源;先確認目前設定:
npm config get registry
npm config get proxy
npm config get https-proxy
npm config set proxy http://127.0.0.1:PORT
npm config set https-proxy http://127.0.0.1:PORT
若只想在一次安裝中使用代理,可以改用環境變數,避免把本機連接埠寫入專案設定:
HTTPS_PROXY=http://127.0.0.1:PORT npm install
npm 的快取有時會讓人誤判問題已經修好。一次成功安裝可能來自本機快取,不代表新的套件或新的版本也能正常下載。排查時可先執行 npm cache verify,再安裝一個本機尚未使用過的依賴,並觀察錯誤是解析失敗、TLS 失敗還是下載逾時。
pip 的代理通常透過 --proxy 或環境變數指定:
python -m pip install PACKAGE --proxy http://127.0.0.1:PORT
export HTTPS_PROXY=http://127.0.0.1:PORT
python -m pip install PACKAGE
pip 使用 HTTPS 下載時,憑證驗證仍然重要。不要為了繞過錯誤而長期關閉 TLS 驗證,也不要把不明憑證加入系統信任庫。若只有某個套件失敗,先檢查它的依賴是否來自不同的來源,再確認 Python、pip 和虛擬環境是否是同一套環境。很多「代理沒生效」其實是 IDE 使用了另一個 Python interpreter。
每完成一項就驗證請求路徑
推薦採用「一個工具、一個測試、一個結果」的方式,不要一次修改多個設定。Git 成功讀取遠端,只代表 Git 的請求已通;npm 安裝成功,只代表 npm 到 registry 的請求已通;兩者不能互相代替。可以把錯誤簡單分為以下幾類:
- DNS 錯誤。網域無法解析,先檢查客戶端是否接管 DNS,以及分流規則是否把相關網域錯誤地判為直連。
- 連線逾時。檢查代理位址、連接埠和目前節點,再確認程式是否真的讀取了環境變數。
- TLS 或憑證錯誤。不要直接關閉憑證驗證,先檢查系統時間、公司中間憑證、代理類型和目標網域。
- 401、403 或權限錯誤。這通常是帳號權限、Token、私有 registry 或倉庫存取設定,不一定與 VPN 有關。
Docker Hub 與映像檔:為什麼要設定 daemon 代理
Docker 是最容易讓初學者誤判的部分。你在終端機裡設定了 HTTP_PROXY,只會影響該終端機啟動的程序;Docker CLI 發出的指令通常交給 Docker daemon 執行,真正下載映像檔的是 daemon。因此,即使瀏覽器、Git 和 npm 都已經正常,docker pull 仍可能逾時。
在使用 systemd 的 Linux 主機上,可以為 Docker 服務建立代理設定目錄與 drop-in 設定:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf <<'EOF'
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:PORT"
Environment="HTTPS_PROXY=http://127.0.0.1:PORT"
Environment="NO_PROXY=localhost,127.0.0.1,.local"
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
這裡的 NO_PROXY 很重要。內部 registry、localhost、容器網路和公司內部網域通常不應繞到外部代理,否則可能造成登入失敗或路由迴圈。套用後可以先查看 Docker 服務狀態,再執行 docker pull 測試。若 Docker Desktop 使用 Windows 或 macOS,應在 Docker Desktop 的設定中尋找代理選項,不要直接套用 Linux 的 systemd 檔案。
容器建置還有另一層差異:daemon 能拉取 base image,不代表 Dockerfile 裡的 RUN npm install 或 RUN pip install 會自動使用同一份代理。建置時可以傳入代理參數,但不要把含有帳號密碼的代理網址寫進映像檔歷史紀錄:
docker build \
--build-arg HTTP_PROXY=http://127.0.0.1:PORT \
--build-arg HTTPS_PROXY=http://127.0.0.1:PORT \
-t example-image .
如果專案使用 BuildKit,應依照建置環境的 secret 或安全變數方案傳遞敏感資訊。對公開專案而言,最需要避免的是把訂閱連結、代理憑證、私有 registry Token 或 CI Secret 寫入 Dockerfile、package.json、requirements.txt 和版本控制紀錄。
CI/CD、API 與自動化工作的設定邊界
本機可以成功 clone,不代表 CI 也能成功。GitHub Actions 或自建 runner 可能位於完全不同的網路環境,它們的 DNS、出口、Docker daemon 和憑證信任庫都要獨立檢查。若工作流程需要從 GitHub、Docker Hub、npm registry 或 PyPI 下載依賴,應把代理設定放在 runner 層或受保護的環境變數中,而不是在公開 YAML 檔案內硬編碼。
可以按照以下順序排查 CI:
- 確認 runner 是否能解析目標網域,並確認代理服務在 runner 所在網路可達。
- 在不輸出祕密值的前提下,檢查
HTTP_PROXY、HTTPS_PROXY和NO_PROXY是否被工作執行程序繼承。 - 先測試 Git checkout,再測試 Docker pull,最後測試依賴安裝。每一步都保留清楚的錯誤日誌。
- 如果使用自建 registry 或內部 API,把內部網域放入
NO_PROXY,避免請求繞行外部線路。 - 工作結束後檢查建置日誌,確保代理網址、Token 和訂閱資訊沒有被命令列回顯。
API 使用則要特別注意連線池、重試和速率限制。代理只能改善請求到達目標服務的路徑,不能替 API Token 增加權限,也不能消除服務端的限流。對需要長時間執行的腳本,建議設定合理的逾時、指數退避和可重試錯誤清單;不要在網路不穩時無限制重試,否則可能觸發服務端風控。
按開發用量選方案,不要只看單月價格
開發者的流量消耗差異很大。純粹查文件、讀 issue 和偶爾拉取小型套件,與經常重新建置容器、下載大型映像檔、多人共用終端,使用節奏完全不同。選擇前可以先分辨流量是「每月固定重置」還是「用完為止永久保留」,再看是否需要多台裝置同時使用。
| 方案 | 適合情境 | 計費特點 |
|---|---|---|
| ¥9.9/月 | 輕量 Git、文件查閱和少量套件下載 | 含 60GB,流量按開通日每月重置 |
| ¥18/月 | 日常開發、頻繁安裝依賴和多端使用 | 含 250GB,流量按開通日每月重置 |
| ¥28/月 | 較多 Docker 映像檔、團隊共用或高頻建置 | 含 500GB,流量按開通日每月重置 |
| 流量包 | 短期專案或用量集中但不想按月重置 | ¥158/300GB、¥358/1000GB、¥658/3000GB,用完為止且永久不過期 |
月付方案中途升級時,差價會按剩餘天數折算,不需要等到週期結束才調整。若只是一次性的容器建置或短期開發工作,流量包的「用完為止」更容易控制預算。付款方式包括支付寶、微信和 USDT;註冊只需要用戶名與密碼,不需要電子郵件地址。首次付費後若不符合使用需求,14 天內可申請全額退款。
另一個實際考量是終端數量。Windows、macOS、iOS、Android、Linux 都有對應支援,也可依客戶端相容性匯入訂閱連結。CKVPN 提供不限台數的同時在線裝置,適合把筆電、桌面工作站、測試機和手機分開連線;不過流量仍是同一個帳號的共享額度,多台裝置同時拉取映像檔時,消耗速度會更快。