Terminal 先怎么设?

临时排查用当前 shell,确认有效后再写入 ~/.zshrc

export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
export NO_PROXY=localhost,127.0.0.1,.local,.test

curl -I -L https://github.com --connect-timeout 10 -m 20
env | grep -i '_proxy'

撤回命令也要会:

unset HTTP_PROXY HTTPS_PROXY NO_PROXY http_proxy https_proxy no_proxy

不要把这些变量写进项目 package.json 脚本。你的端口、工具和网络环境不一定适合同事,更不适合 CI。

Git 怎么单独设置?

HTTPS Git 可以用 Git config,SSH Git 要看 ~/.ssh/config。两者不是同一个层级。

# 查看
git config --global --get http.proxy
git config --global --get https.proxy

# 临时单次
git -c http.proxy=http://127.0.0.1:7890 clone https://github.com/owner/repo.git

# 长期个人机器
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890

# 撤回
git config --global --unset http.proxy
git config --global --unset https.proxy

如果仓库远端是 [email protected]:owner/repo.git,HTTP 代理不一定生效,要排查 SSH key、端口和 ~/.ssh/config

npm 和 pnpm 怎么设?

npm 文档说明 proxyhttps-proxyregistryfetch-timeoutfetch-retries 都是配置项。建议项目 .npmrc 只写团队共识:

registry=https://registry.npmjs.org/
@your-scope:registry=https://npm.pkg.github.com/
//npm.pkg.github.com/:_authToken=${NPM_TOKEN}

个人机器才写:

npm config set proxy http://127.0.0.1:7890
npm config set https-proxy http://127.0.0.1:7890
pnpm config set proxy http://127.0.0.1:7890
pnpm config set https-proxy http://127.0.0.1:7890

撤回:

npm config delete proxy
npm config delete https-proxy
pnpm config delete proxy
pnpm config delete https-proxy

认证 token 必须限定 registry host,不要裸写 _authToken

Docker Desktop 怎么处理?

Docker 官方文档强调:Docker Desktop 会忽略 daemon.json 中的代理配置。Desktop 用户应在 Docker Desktop 设置里配置代理;Linux 或非 Desktop daemon 才考虑 daemon.json、dockerd flags 或 systemd drop-in。

命令行可以这样检查 Docker 是否真正能拉取:

docker info
docker pull hello-world
docker pull ghcr.io/library/alpine:latest

注意 Docker CLI 代理、Docker daemon 代理和容器运行时环境变量是三回事。镜像拉取慢看 daemon;容器内访问慢看容器环境;docker build 下载依赖慢还要看 build args 和包管理器配置。

团队怎么避免配置污染?

把规则写进团队 runbook:项目仓库只提交 registry scope、Brewfile、Dockerfile 和 lockfile;个人代理、端口、证书、DNS 不进仓库。CI 只从 secret 和 runner 配置读取敏感值。

跨地区工作时,GitHub、npm、Docker、Vercel 和 Cloudflare 可能同时受网络路径影响。需要稳定处理构建和 Dashboard 时,可以准备独立开发者出海稳定专线,但仍要按工具限制配置,别用一个开关覆盖所有问题。

相关阅读

长尾问题映射表

开发者搜索经常是故障式长尾,比如「GitHub clone 很慢」「Docker pull 超时」「npm install 卡住」「Stripe 后台打不开」「Cloudflare 登录验证」。这些词要保留,但正文要把它们落到 DNS、代理变量、认证、CI runner、浏览器会话和团队权限上。

中文长尾说法工程化排查项团队记录字段
GitHub clone 慢DNS、HTTPS、SSH、仓库体积协议、耗时、错误日志
Docker pull 超时registry、镜像层、代理变量镜像名、runner、出口网络
npm / pnpm 卡住registry、lockfile、缓存、代理包管理器、版本、失败阶段
Stripe / Cloudflare 验证设备、浏览器、IP、2FA登录设备、角色、时间

这样写能覆盖中文长尾,同时保留开发者文章的证据链和可复用 SOP,而不是只给一个“换网络”的泛化建议。

几个容易踩的坑

写进 .zshrc 后为什么 VS Code Terminal 不生效

可能是 shell 启动方式不同,或窗口还没重新加载,在目标 Terminal 里 env | grep -i _proxy,不要假设所有终端读取同一份配置。

可以把代理写进 Dockerfile 吗?

不建议写死。需要构建期代理时用 build args 或 CI secret 注入,并确认最终镜像不会留下个人地址或 token。

NO_PROXY 不写会怎样?

本地服务、数据库、容器网络和内网域名可能被转发到错误路径,表现为本地 API 变慢或连接失败。它和代理地址同样重要。

GitHub SSH 慢要改 npm proxy 吗?

没用。npm proxy 影响 npm 请求;SSH 要查 key、端口、known_hosts 和 SSH 配置。不同工具不要混着改。

团队新人要给一键脚本吗?

可以给一键检查脚本,但不要给写死个人代理的一键配置脚本。新人脚本应输出当前状态、缺失依赖和下一步,而不是替他改全局环境。