快速定位
别一上来就换源,看慢在哪:docker pull、npm ci、pnpm install、pip install,还是 CI 的 cache miss。每次只改一层,否则你不知道是哪一步救了项目。
| 层 | 典型症状 | 处理方向 |
|---|---|---|
| Docker | 基础镜像拉不动 | 固定 digest,预构建镜像 |
| npm/pnpm | install 半天无输出 | registry、store cache、lockfile |
| PyPI/pip | wheel 下载超时 | pip cache、timeout、二进制包 |
| CI | 本地快 CI 慢 | actions/cache、buildx cache |
本地开发环境怎么固定?
第一,版本写进文件。Node 用 .nvmrc 或 Volta,Python 用 .python-version 或 uv,Docker 镜像写 tag 还不够,关键基础镜像可以固定 digest。
第二,lockfile 必须进仓库。package-lock.json、pnpm-lock.yaml、poetry.lock 不要忽略。独立开发者有时觉得麻烦,但没有 lockfile,你每次安装都在抽奖。
第三,registry 配置要可见。不要只在自己电脑全局改 npm config。项目里放 .npmrc,Python 写 pip config 示例,Docker 在 README 或已有开发文档里写清基础镜像策略。
registry、缓存和 fallback 怎么配?
| 工具 | 主配置 | fallback |
|---|---|---|
| npm | 项目 .npmrc | 官方 registry |
| pnpm | store cache | 清 store 后重装 |
| pip | pip.conf 或命令参数 | --index-url 切回 PyPI |
| Docker | GHCR 预构建 | Docker Hub 官方镜像 |
镜像源能省时间,但不要把它当永久基础设施。我的习惯是:默认用较快源,出错时一条命令切回官方源;私有包永远先保证鉴权正确,再谈速度。
CI 里怎么处理?
GitHub Actions 里缓存要按 lockfile 做 key。Node 项目缓存 npm 或 pnpm store,Python 项目缓存 pip,Docker 用 buildx cache。不要缓存整个工作目录,那会把旧产物和权限问题带进来。
Dockerfile 也要按缓存友好写,复制 lockfile 安装依赖,再复制业务代码。否则你改一行页面文案,Docker 也会重装所有依赖。
团队 runbook 写什么?
写短一点,能执行就行:
- 新电脑安装顺序:Node、Python、Docker、包管理器
- 常用安装命令:
pnpm install、pip install -r requirements.txt - 慢的时候先查哪三条命令
- 切 registry 和切回官方源的命令
- 清缓存命令和风险提示
- CI 失败时谁来处理
小团队最怕「只有某个人电脑能跑」。runbook 的目标不是漂亮,是让下一个人 30 分钟内能把环境拉起来。
跨地区协作怎么兜底?
如果你经常在不同城市、共享办公或云桌面里开发,Docker、npm、PyPI 的下载体验会波动。基础设施项目可以准备独立开发者出海稳定专线,同时保留 registry fallback 和 CI cache。线路只能减少抖动,不能替代版本锁定。