全局换源最快但宝塔中可能因用户权限失效;项目级配置更安全且适合团队协作;临时指定镜像仅当次有效;镜像仅加速下载,不解决依赖解析慢问题。

全局换源最简单,但不是所有情况都适用
直接运行 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 就能生效,90% 的本地开发场景下这是最快解法。它把镜像写进 /root/.composer/config.json(宝塔里就是 /root/.composer 目录),之后所有项目、所有用户(只要没被项目级配置覆盖)都会走阿里云镜像。
但要注意:全局配置对宝塔面板里用「PHP 管理器」或「计划任务」跑的 Composer 命令不一定起作用——因为那些进程可能以 www 用户身份运行,而 -g 写的是 root 的配置。如果发现宝塔后台点「一键部署」还是慢,得确认实际执行命令的用户是谁,再针对性配对应用户的 ~/.composer/config.json。
- 阿里云镜像目前最稳,同步快、CDN 覆盖全,
https://mirrors.aliyun.com/composer/末尾斜杠不能少 - 腾讯云地址是
https://mirrors.cloud.tencent.com/composer/,华为云是https://mirrors.huaweicloud.com/repository/php/composer/(注意路径含/repository/php/,不是/composer/) - 别用已停更的
packagist.phpcomposer.com,现在访问会 404
项目级配置更安全,尤其要提交到 Git
进项目根目录,运行 composer config repo.packagist composer https://mirrors.aliyun.com/composer/(去掉 -g)。这条命令会往 composer.json 的 repositories 字段里加一条 "packagist" 配置,不碰全局设置,也不会影响其他项目。
这种写法适合团队协作:队友拉代码后,composer install 自动走镜像,生成的 composer.lock hash 也一致。但如果项目已有 repositories 字段,别手动覆盖,否则可能删掉私有包源;用命令追加才是安全做法。
- 检查是否写入成功:
composer config repo.packagist,输出应为完整 JSON 对象,不是空或报错 - 如果
composer.json已存在"repositories": { ... },命令会自动 merge,不会清空原有内容 - 换源后首次
composer install若报 hash 不匹配,删掉vendor和composer.lock重来即可
临时指定镜像只对当次命令有效,适合排查问题
不想改任何配置,又想验证某个镜像是否可用?直接在安装或更新时加参数:composer install -vvv --repository-url=https://mirrors.huaweicloud.com/repository/php/composer/。加上 -vvv 才能看到真实请求地址,否则你根本不知道命令到底连了谁。
这个方式会完全忽略项目和全局的所有仓库配置,强制只用你给的 URL。但它不持久,下一次命令就得重输。另外 composer create-project 不支持 --repository-url,得先用 config -g 临时设好再跑。
-
composer update -vvv --repository-url=xxx同样适用,日志里能看到每个包从哪个域名下载 - 公司内网若拦截
mirrors.aliyun.com,可尝试浏览器直连测试;不通的话,可能需要改/etc/hosts或联系运维放开域名 - 别用
-r缩写,部分旧版 Composer 不识别,必须写全--repository-url
换源后还慢?别急着换镜像,先看是不是别的地方卡住了
镜像只加速「下载」,不解决「依赖解析」慢的问题。如果你发现 composer update 卡在 Resolving dependencies 几分钟不动,和镜像无关——那是 Composer 在本地穷举版本组合,跟 PHP 版本、composer.json 里约束太宽、或启用了 prefer-stable 等策略有关。
另外,新版 Composer(2.2+)默认开启 packagist.org 回退机制:镜像返回 404 或 503 时,会自动切回官方源再试一次。这是防同步延迟的保险丝,别轻易关掉。真遇到某个包在镜像里找不到,先去镜像站首页查「最后更新时间」,刚发布不到一小时的包,等会儿再试就行。
- 执行
composer diagnose,重点看Repo packagist.org is default这一行——如果出现,说明镜像根本没接管 - 执行
composer clear-cache,旧缓存可能残留国外源的元数据,导致误判 - 宝塔终端里如果提示
Could not resolve host: mirrors.aliyun.com,大概率是 DNS 被劫持或屏蔽,不是 Composer 配置问题











