宝塔中composer config -g不生效是因为执行用户为www,而命令默认写入/root/.composer/config.json,www无法读取;需用sudo -u www composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/并确保键名、type值、url斜杠正确,再执行composer clear-cache验证。

宝塔里 composer config -g 为啥不生效
因为宝塔后台执行 Composer 的用户通常是 www,而 composer config -g 默认写进 /root/.composer/config.json,www 用户根本读不到这个文件。你看到的“配了还是慢”,大概率是镜像压根没走。
验证方式:在宝塔【终端】里先运行 whoami,再执行 composer config -g repo.packagist。如果输出为空、null 或仍是 https://packagist.org,说明当前用户没配好。
- 给
www用户单独配镜像:sudo -u www composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 确认路径正确:
/home/www/.composer/config.json或/www/wwwroot/xxx/.composer/config.json(取决于宝塔版本和用户家目录设置) - 别信“全局配置一次搞定”——宝塔的 PHP 管理器、计划任务、一键部署都可能用不同用户跑,得按实际 UID 配
镜像 URL 写错一个字符就等于没配
Composer 2.x 对配置格式极其严格,漏掉任意一个硬性条件就会静默 fallback 到官方源,且不报错。你看到的卡在 Loading composer repositories,90% 是这里错了。
- 键名必须是
repo.packagist(单数repo,不是repos.packagist) - type 值不能省:
composer必须显式传入,命令里漏掉它,就会回退 - URL 必须是 HTTPS + 末尾斜杠:
https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌(少斜杠会拼出/composerpackages.json,404) - 验证是否写对:
composer config -g repo.packagist输出应为{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}
parallel-downloads=10 和 --prefer-dist 要一起开
parallel-downloads 默认值是 3(Composer 2.2+),相当于单线程下载;不调高它,哪怕镜像再快,下载仍是瓶颈。但只设并发不加 --prefer-dist,效果会打折扣。
- 全局启用并发:
composer config -g parallel-downloads 10 - CI 或宝塔脚本中显式带上:
composer install --prefer-dist --no-dev - 注意:
composer.json里若存在"prefer-source": true,会强制覆盖--prefer-dist,必须删掉 - 并发设太高(如 20)容易触发阿里云/腾讯云镜像限流或 SSL 握手失败,10 是实测稳定上限
缓存不清,镜像白配
Composer 缓存里存着旧源的 packages.json 和 provider 元数据,即使你切了镜像,它仍优先读本地缓存——结果就是反复尝试从 packagist.org 解析、握手、超时,卡在 DNS 或 TLS 阶段。
- 必须执行:
composer clear-cache(不是composer cache-clear,后者已废弃) - 宝塔环境下要针对实际用户执行:
sudo -u www composer clear-cache - CI/CD 或 Docker 构建前,确保挂载的缓存目录干净,否则每次都是“假新缓存”
- 临时验证是否绕过缓存:
composer install -vvv --no-cache,看日志里请求的域名是不是镜像地址
镜像配置、并发参数、缓存清理三者缺一不可。最容易被忽略的是缓存和用户权限——很多人反复重试换源命令,却忘了 clear-cache 和 sudo -u www 这两步。











