COMPOSER_AUTH 是唯一安全的私仓认证方式,因其不落地、不记录、仅由 Composer 原生解析,支持 http-basic 和 github-oauth;其他如 composer.json 中硬编码或 dotenv 注入均存在泄露或失效风险。

敏感信息不能写进 composer.json,也不能塞进 scripts 或 extra 字段——哪怕加了注释“请替换”,提交到 Git 就等于泄露。
为什么 COMPOSER_AUTH 是唯一安全的认证变量
Composer 原生只认 COMPOSER_AUTH 这个环境变量做私仓认证,它会被自动解析并用于 http-basic 和 github-oauth 场景,且不落地、不记录、不写入任何配置文件。
- CI/CD 中直接注入:
export COMPOSER_AUTH='{"http-basic": {"repo.example.com": {"username": "u", "password": "t0k3n"}}}' - Docker 启动时传入:
docker run -e COMPOSER_AUTH="$AUTH_JSON" myapp - GitHub Actions 示例:
env: { COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }} - 错误做法:把 token 写在
composer.json的config.http-basic里——该字段不支持变量插值,且会随代码提交
composer.json 里哪些字段支持 ${VAR} 插值
不是所有字段都支持环境变量占位符,只有明确文档标注的才生效;插值发生在 Composer 启动瞬间,靠 getenv() 读取,不是靠 .env 文件。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 支持插值的字段:
repositories[].url、config.http-basic(注意:是 config 下的,不是 global config)、config.process-timeout - 不支持插值的字段:
config.repos、config.github-protocols、autoload.files、extra - 变量未定义时,Composer 默认跳过该字段,不报错——容易静默失效,建议用 CI 检查脚本验证
composer config --list输出是否含预期值 -
vendor/autoload.php完全不参与插值过程,它只加载类映射,不会触发Dotenv加载逻辑
CI/CD 中密钥注入必须显式声明
CI 环境默认不继承本地 shell 的 export,也不加载 .env 文件。依赖 .env 的 composer install 在 CI 里必然失败。
- GitHub Actions 必须写
env:块,不能只靠dotenv类库 - GitLab CI 必须在
variables:或before_script:中export - Docker 构建中,
ARG不等于ENV,要用ENV COMPOSER_AUTH=${COMPOSER_AUTH}显式传递 - systemd 服务启动 PHP CLI 时,需在
.service文件中写Environment=COMPOSER_AUTH=...,否则getenv()返回空
别让 dotenv 干 composer 的活
vlucas/phpdotenv 是运行时加载器,对 Composer 自身行为零影响。试图用它“统一管理所有配置”会导致两个硬伤:
- 在
autoload.files里 require dotenv —— 项目还没装它时,composer install直接失败(循环依赖) - 在入口文件顶部加载 dotenv —— 此时 Composer 已完成解析,
composer.json里的${API_KEY}早已被跳过 - 真正需要 dotenv 的地方,是业务代码读取
$_ENV['DB_PASSWORD'];Composer 只负责依赖安装,不该也不必介入这个环节 - 生产环境应绕过
.env,改用系统级环境变量(如 K8s Secret 挂载、Docker-e、php-fpmenv[KEY])
最易被忽略的一点:COMPOSER_AUTH 的 JSON 格式必须严格合法,多一个逗号或少一对引号,composer install 就会静默跳过认证,报 Could not fetch 却不提示原因。

















