必须设http-max-concurrent-downloads为10(parallel-downloads已弃用),镜像url末尾须带/,并删vendor与composer.lock强制刷新dist.url,否则流量无法到达网卡。

高带宽服务器上 Composer 下载仍跑不满带宽,不是网络没跑起来,是并发参数没对上、镜像 URL 没配准、或旧缓存锁死了 dist 地址。
http-max-concurrent-downloads 必须设为 10,parallel-downloads 已失效
Composer 2.2+ 彻底弃用 parallel-downloads,设了也白设,且不报错。真实生效的是 http-max-concurrent-downloads:
- 默认值是 3,相当于只开 3 条 HTTP 连接,再快的带宽也压不起来
- 高带宽环境(如千兆内网、云服务器直连 CDN)建议设为
10:运行composer config -g http-max-concurrent-downloads 10 - 设到
15或更高可能触发临时文件竞争,报file_put_contents(/tmp/): failed to open stream,立刻降回8或10 - 该参数仅对
composer install生效;composer update仍串行解析依赖图,和并发无关
镜像 URL 必须匹配 dist 包分发路径,否则 fallback 到 packagist.org
镜像源不仅要能返回 packages.json,还必须提供同构的 dist ZIP 路径。比如清华源的完整结构是:
https://mirrors.tuna.tsinghua.edu.cn/composer/packages.json https://mirrors.tuna.tsinghua.edu.cn/composer/dists/
如果配置写成 https://mirrors.tuna.tsinghua.edu.cn/composer(缺结尾 /),Composer 会拼出 https://mirrors.tuna.tsinghua.edu.cn/composerdists/ —— 404,然后静默 fallback 到官方源下载。必须确保:
- 全局配置命令为:
composer config -g repo.packagist composer https://mirrors.tuna.tsinghua.edu.cn/composer/ - URL 末尾有且只有一个
/ - 验证输出必须是完整 JSON:
{"type": "composer", "url": "https://mirrors.tuna.tsinghua.edu.cn/composer/"}
composer.lock 中的 dist.url 不会自动更新,必须强制重写
即使镜像已生效,老项目 composer.lock 里仍存着旧的 dist.url,比如 "https://packages.packagist.org/dists/..."。Composer 会先尝试这个地址,超时后才 fallback —— 在高延迟或防火墙环境下,这一步就卡死。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
解决办法只有一条:
- 删掉
vendor/和composer.lock - 运行
composer update --lock --no-dev(加--no-dev减少解析量) - 检查新生成的
composer.lock,确认所有dist.url字段都指向镜像域名下的/dists/路径
CI/CD 和多用户环境必须用项目级配置,全局配置不可靠
高带宽服务器常用于 CI 流水线(GitHub Actions、GitLab CI)或多租户部署(宝塔、Docker),此时 -g 配置极易失效:
- GitHub Actions 默认以
runner用户运行,读不到你本地~/.composer/config.json - 宝塔面板常用
www用户执行命令,但composer config -g写的是root的配置 - Docker 容器每次重建都会丢失全局配置
正确做法是进项目根目录,执行:
composer config repo.packagist composer https://mirrors.tuna.tsinghua.edu.cn/composer/
这条命令会向 composer.json 的 repositories 字段安全追加条目,不覆盖已有私有源,且拉代码即生效。
高带宽不等于高速度——真正卡点往往在 lock 文件里的 dist 地址没刷新、并发参数名写错、或镜像 URL 少了个斜杠。这些地方一错,流量根本走不到网卡上。










