必须配置repo.packagist镜像源(如https://mirrors.aliyun.com/composer/)并清缓存,因Composer 3.x+硬编码直连packagist.org,仅显式设置该配置才覆盖元数据请求路由。

Composer安装卡在 packages.json 或一堆 provider-*.json 请求上,不是网络差,而是你没配对镜像源类型——repo.packagist 配置必须显式设置,否则 Composer 3.x+ 仍硬编码走 repo.packagist.org。
为什么改 repositories 数组没用
很多人往 composer.json 的 repositories 里加了阿里云镜像,但 composer install 还是慢或报错。这是因为 Composer 2.2+ 把 Packagist 元数据源视为“全局单例”,repositories 列表只影响非 packagist 类型的源(比如私有包仓库),而所有官方包的元数据(packages.json、provider-laravel~9.0.json 等)默认绕过该列表,直连 packagist.org。
真正起效的只有:composer config --global repo.packagist composer https://mirrors.aliyun.com/composer/。这条命令会覆盖 Composer 内部的元数据源路由逻辑,后续所有 provider 查询、package list、version metadata 请求都会发往镜像站。
- 别手写
~/.composer/config.json:容易格式错误、覆盖auth字段 - 项目级配置用
composer config repo.packagist composer ...,但要先确认composer.json里没重复声明packagist类型源,否则项目配置优先生效 - 验证是否生效:运行
composer show packagist/support,输出的 URL 应含镜像域名;或composer config repo.packagist直接看值
composer diagnose 报 “Could not fetch packages.json” 怎么定位
这个错误常被误判为网络不通,实际多因镜像同步滞后导致——Packagist 的 provider 文件是分片生成的(如 provider-laravel~10.0.json),镜像若落后几小时,就会返回 404 或空响应。
- 先测镜像是否返回 200:
curl -I https://mirrors.aliyun.com/composer/p2/laravel/framework/10.0.0.json - 再比对官方源:
curl -I https://repo.packagist.org/p2/laravel/framework/10.0.0.json,确认包是否存在 - 若官方有、镜像无,说明该镜像暂未同步,可临时切中科大源:
composer config -g repo.packagist composer https://mirrors.ustc.edu.cn/composer/ - 别信
-vvv日志里 “Resolving dependencies” 那行——那只是开始,真正卡点在后续几百次 provider 请求
并发下载调到 15 才压得满带宽
Composer 2.2+ 默认启用并行下载,但并发数仅 5,对国内多节点镜像来说太保守。实测调到 15 能显著提速,又不触发阿里云/腾讯云镜像的限流阈值。
- 查当前值:
composer config -g parallel-downloads - 设为 15:
composer config -g parallel-downloads 15 - 注意:这个参数不影响元数据请求,只控制 dist 包(ZIP/TAR)下载并发
- 搭配
classmap-authoritative关闭可进一步减少 autoload 生成耗时(尤其在 CI 中)
想搭自己的全量镜像?得补 Redis + OSS + GitHub Token
阿里云开源的 packagist-mirror 工具不是开箱即用的 Docker 镜像,它依赖三类基础设施:
- OSS Bucket 存储镜像文件(需手动开通,选就近 Endpoint)
- Redis 实例存任务队列(要求 ≥4GB,
REDIS_ADDR和密码必填) - Github Token(用于拉取 GitHub 上的 package dists,避免限流)
-
DATA_URL建议设为已同步稳定的镜像(如中科大或阿里云),而不是直接设https://repo.packagist.org,否则首次同步极慢且易中断
全量镜像不是“搭完就跑”,同步延迟、dist 文件缺失、provider 分片漏同步都是常态,日常需监控 provider-*.json 是否存在、p2/ 下版本文件 HTTP 状态码是否全为 200——这些细节,比配置本身更消耗运维精力。











