必须同步降并发至2、配至少3个带"canonical": false的国内镜像、清缓存并验证URL结尾含/,三者缺一不可;CI/CD中还需启用--no-dev/--no-scripts/--no-autoloader。

Composer install卡在Downloading并报429怎么办
这是镜像源对单IP的QPS限流触发了,不是网络慢、不是机器差,必须同步降并发 + 配多镜像 + 清缓存,三者缺一不可。
- 默认并发太高:Composer下载阶段默认开5–10个连接,而阿里云/腾讯云/清华镜像普遍限制60次/分钟,超限直接返回
429 Too Many Requests或静默丢包 - 日志里出现
curl: (28) Operation timed out或Connection refused就是典型信号 - 一个包下载超时(默认300秒),后续所有并发请求都得排队等它结束,形成“一个拖垮全部”的雪崩
必须一次性执行的三项操作
只换镜像或只调参数,基本无效。以下三步要同时做:
- 全局设低并发:
composer config -g repos.packagist.org.concurrent-downloads 2(注意键名是repos.packagist.org.concurrent-downloads,不是旧版http-max-concurrent-downloads) - 启用多镜像负载均衡:在
composer.json的repositories下添加至少3个国内镜像,每个都带"canonical": false——缺这个字段,Composer只认第一个,后面全失效 - 清缓存并验证URL结尾含
/:composer clear-cache后,用composer config -g repo.packagist确认输出是完整JSON(如{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}),且结尾有/,否则拼接路径出错导致404
CI/CD中必须关闭的三个干扰项
开发环境有用的参数,在CI中全是性能杀手:
-
--no-dev:跳过require-dev包(如phpunit),避免测试类污染autoload classmap -
--no-scripts:禁用post-install-cmd等钩子,防止意外触发npm install或DB清理 -
--no-autoloader:不生成vendor/autoload.php,后续用composer dump-autoload --optimize单独补,避免安装时同步扫描PSR-4目录
漏掉任意一个,composer install都可能多花30%–60%时间。别信“看起来快一点”,要跑composer install -vvv看日志里是否真有多个Downloading https://行交错出现。
镜像同步延迟容易被当成配置错误
阿里云/腾讯云镜像同步通常5–15分钟,所谓“不同步”八成是本地缓存没刷新。CI/CD构建中若发现刚发布的包装不上,先等5分钟再重试,而不是反复改composer.json或升级Composer版本。


















