内网中composer config -g repo.packagist常失效,因宝塔/Docker/CI等以www或runner用户运行,读取各自家目录的config.json;须用sudo -u www composer config -g配置,或改用项目级composer config repo.packagist composer https://mirrors.aliyun.com/composer/并清缓存验证。

内网环境里配 Composer 镜像,composer config -g repo.packagist 命令本身几乎必然失效——不是命令写错了,而是它根本没写到对的地方。
为什么 composer config -g 在内网里总不生效
内网常见运行环境(宝塔、Docker、GitLab Runner、Jenkins)默认不以你当前终端用户身份执行 composer。比如你在 root 下执行了 composer config -g,但宝塔后台用的是 www 用户,CI 流水线用的是 runner 或 gitlab-runner 用户,它们读的都是各自家目录下的 ~/.composer/config.json,互不相通。
- 查实际执行用户:
whoami或看日志 UID - 给目标用户配镜像:例如宝塔用
www,就运行sudo -u www composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - CI 环境(如 GitHub Actions)建议放弃全局配置,改用项目级:
composer config repo.packagist composer https://mirrors.aliyun.com/composer/(不加-g),它会安全写入composer.json的repositories字段,Git 可追踪、CI 可复现
repo.packagist 键名和 URL 格式必须严格匹配
Composer 2.x+ 对这个配置项极其敏感,任意一处出错就静默 fallback 到 https://packagist.org,不报错、不提示、不警告。
- 键名必须是
repo.packagist(单数,不能是repos.packagist、repositories.packagist.org或mirror) - 第二个参数
composer是 type 值,不可省略;漏掉它,composer diagnose会报Repo is not configured properly - URL 必须是 HTTPS 且末尾带
/:https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌(会拼成/composerpackages.json导致 404)
验证是否真写进去了,只看这一行:composer config -g repo.packagist。输出必须是完整 JSON 对象,比如 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。空、null、报 Key not found,都说明失败。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
缓存不清理 + 项目级配置覆盖 = 镜像白配
即使全局配置写对了、用户也对了,仍可能走官方源——因为缓存没清,或者项目里已有 repositories 字段,它会彻底屏蔽全局配置。
- 先清缓存:
composer clear-cache,再删本地缓存目录:rm -rf ~/.composer/cache/repo/https---packagist.org/(Linux/macOS)或%APPDATA%\Composer\Cache\repo\https---packagist.org\(Windows) - 检查项目级是否覆盖:
composer config repositories,如果输出里还有https://repo.packagist.org,说明项目级正在接管 - 临时禁用项目级:
composer config --unset repositories(注意没-g),再试composer install -vvv - 安全追加(推荐):
composer config repo.packagist composer https://mirrors.aliyun.com/composer/,它会自动 merge 到composer.json的repositories字段中,不覆盖已有私有源
怎么确认流量真走国内镜像
别信配置命令的输出,要看实际发出去的请求路径。
- 运行
composer diagnose,找到Repo packagist.org:这一行,后面域名必须是你配的镜像(如mirrors.aliyun.com) - 新建空目录,执行
composer init -n && composer require monolog/monolog -vvv,日志第一行Downloading https://的域名必须匹配镜像地址 - 真实生效的日志特征是类似
Reading packages.json from cache at /https---mirrors-aliyun-com-composer/——路径里出现镜像域名的转义形式,才是真走镜像
内网里最容易被忽略的点是:镜像配置成功 ≠ 请求一定走镜像。权限隔离、缓存残留、项目级覆盖、甚至系统时间不同步(WSL2 常见),都会让流量悄悄绕回境外源。验证必须落到网络请求层面,而不是配置命令返回值。

















