1. 首頁
  2. 部落格
  3. 開發者加速

開發者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 行為。

NOTE VPN 連線成功只表示加密通道已建立,不代表每一個程式都會自動使用它。遇到逾時時,先確認「請求由哪個程序發出」,再檢查該程序是否支援系統代理、HTTP(S) 代理或 SOCKS5。

先選擇全域、規則或應用程式代理模式

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_PROXYHTTPS_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 installRUN 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.jsonrequirements.txt 和版本控制紀錄。

CI/CD、API 與自動化工作的設定邊界

本機可以成功 clone,不代表 CI 也能成功。GitHub Actions 或自建 runner 可能位於完全不同的網路環境,它們的 DNS、出口、Docker daemon 和憑證信任庫都要獨立檢查。若工作流程需要從 GitHub、Docker Hub、npm registry 或 PyPI 下載依賴,應把代理設定放在 runner 層或受保護的環境變數中,而不是在公開 YAML 檔案內硬編碼。

可以按照以下順序排查 CI:

  1. 確認 runner 是否能解析目標網域,並確認代理服務在 runner 所在網路可達。
  2. 在不輸出祕密值的前提下,檢查 HTTP_PROXYHTTPS_PROXYNO_PROXY 是否被工作執行程序繼承。
  3. 先測試 Git checkout,再測試 Docker pull,最後測試依賴安裝。每一步都保留清楚的錯誤日誌。
  4. 如果使用自建 registry 或內部 API,把內部網域放入 NO_PROXY,避免請求繞行外部線路。
  5. 工作結束後檢查建置日誌,確保代理網址、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 提供不限台數的同時在線裝置,適合把筆電、桌面工作站、測試機和手機分開連線;不過流量仍是同一個帳號的共享額度,多台裝置同時拉取映像檔時,消耗速度會更快。

免費試用