外网服务器上 composer config -g 配置无效,因非交互式用户无法读取全局配置;必须在项目 composer.json 中以数组形式配置 repositories,首项禁用 packagist.org,url 须 https 且结尾带 /,并清理缓存、vendor 和 lock 后执行 install。

外网服务器上 composer config -g 配置基本无效
外网服务器(如云主机、CI runner、Docker 容器)通常以非交互式用户(www、runner、app)运行 composer install,而 composer config -g 默认写入当前登录用户的 ~/.composer/config.json。如果你用 root 或个人账号执行配置,实际运行命令的用户根本读不到它。
常见现象:composer config -g repo.packagist 在你终端里输出正确,但 CI 日志或宝塔后台仍卡在 Loading composer repositories——不是镜像慢,是压根没读到配置。
- 验证方式:切到实际运行用户下执行,例如
sudo -u www composer config -g repo.packagist - 若返回空或
Key not found,说明该用户未配置,-g对此环境无意义 - Docker 中更典型:构建阶段用
root,运行时用nonroot用户,全局配置完全隔离
项目级配置是外网服务器唯一可靠方案
必须把镜像源写进项目根目录的 composer.json,由 Git 管理、CI 自动加载、所有用户一致读取。Composer 2.2+ 要求 repositories 是数组,且首项必须显式禁用官方源。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
正确写法(手动编辑或用命令生成):
"repositories": [
{"packagist.org": false},
{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}
]
- 顺序不能错:
{"packagist.org": false}必须是第一项,否则 Composer 仍 fallback 到硬编码的packagist.org - 不要写成对象格式:
"repositories": {"packagist.org": false, "aliyun": {...}}会被静默忽略 - 用命令追加(推荐):
composer config repo.packagist composer https://mirrors.aliyun.com/composer/(不加-g,且在项目根目录执行) - 已有私有源?先确认
composer.json中repositories是数组;若是空对象{},需先手动改为[]再运行命令
换源后 vendor 和 composer.lock 必须全删再 install
镜像只加速元数据(packages.json)下载,不改变已锁死的依赖地址。旧 composer.lock 里记录的是 packagist.org 的 dist URL,哪怕你刚配好镜像,composer update 仍会按旧地址去拉 zip 包——导致 404 或超时。
- 清理三步不可跳过:
composer clear-cache→ 删除vendor/→ 删除composer.lock - 然后必须跑
composer install -vvv,观察日志中Downloading行是否出现mirrors.aliyun.com - 别用
update替代install:它不会重生成 lock 文件,也不会重新解析源地址 - CI 脚本中建议加检查:
grep -q "mirrors.aliyun.com" composer-install.log || exit 1
HTTPS 末尾斜杠和 type 值是静默失效的高频雷区
外网服务器环境对配置格式更敏感——比如容器内 PHP 禁用 proc_open 时,config 命令可能直接失败;但更多时候是配置写进去了,却因格式错误被 Composer 完全忽略,fallback 到官方源且不报错。
-
repo.packagist键名不能多 s(repos.packagist)、不能少repo.(packagist)、不能带点后缀(repositories.packagist.org) -
type值必须显式为composer,漏掉就等同于没配 - URL 必须 HTTPS + 末尾
/:https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌(请求路径变成/composerpackages.json,404) - 验证唯一有效方式:
composer diagnose输出中的Repo packagist.org:行,显示的才是真实生效地址,比config -g更可信










