必须通过composer_auth环境变量向composer透传私有仓库认证信息,其值为单行合法json,支持http基础认证、bearer token和gitlab oauth三种格式,需在composer install/update前导出并验证生效。

在CI/CD流水线或容器化部署中,需要避免将敏感凭证写入配置文件或版本库,此时必须通过环境变量向Composer透传私有仓库认证信息。
设置COMPOSER_AUTH环境变量
在运行composer命令前,导出COMPOSER_AUTH环境变量,其值为合法JSON字符串,结构与auth.json完全一致。
执行命令:export COMPOSER_AUTH='{"http-basic": {"my-private-repo.example.com": {"username": "ci-bot", "password": "s3cr3t-token"}}}'
这一步必须在composer install或composer update之前完成;变量未导出或拼写错误(如写成COMPOSER_AUTHS)会导致认证完全不生效。
验证是否生效:运行echo $COMPOSER_AUTH,确认输出为完整JSON且无换行、无多余空格。
不同认证方式的环境变量写法
方法一:HTTP基础认证(最常用)
直接将用户名密码嵌入JSON:{"http-basic": {"repo.example.org": {"username": "user", "password": "pass"}}}
注意:若密码含双引号或反斜杠,必须用反斜杠转义,否则JSON解析失败——Composer不会报错,而是静默忽略整个认证块。
方法二:Bearer Token认证
格式为:{"bearer": {"api.example.com": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."}}
方法三:GitLab OAuth认证
使用gitlab-oauth字段:{"gitlab-oauth": {"gitlab.example.com": "glpat-xxxxxxxxxxxxxxxxxxxx"}}
在Docker或GitHub Actions中使用
第一步:在Dockerfile中添加ENV指令
ENV COMPOSER_AUTH='{"http-basic": {"my-repo.internal": {"username": "deploy", "password": "abc123"}}}'
第二步:确保该ENV在RUN composer install之前生效,且不能被后续RUN指令覆盖。
第三步:在GitHub Actions中,把密钥设为Secrets,然后在step中引用:COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH_JSON }}
【COMPOSER_AUTH必须是单行JSON,不能换行或缩进,否则PHP json_decode()会返回null】
验证环境变量是否被正确读取
① 运行composer config --list --global | grep auth,确认输出中不包含http-basic等字段(说明未从config.json读取,正走环境变量路径)
② 执行composer diagnose,观察输出末尾是否有“Authentication configured via COMPOSER_AUTH”提示
③ 尝试安装一个需认证的私有包,如composer require internal/utils:dev-main,成功即表示认证已就绪











