composer install卡在github是因api限速(60次/小时),需配置github token提升至5000次/小时:执行composer config -g github-oauth.github.com ,ci中用composer config --auth或$github_token动态注入,并定期用composer diagnose检查有效性。

Composer install 时卡在 github.com 或报 rate limit 错误
Composer 默认用未认证方式访问 GitHub API,每小时最多 60 次请求。一旦超限,composer install 就会卡住或直接报错:Failed to download vendor/package: Could not fetch https://api.github.com/... 403 rate limit exceeded。这不是网络问题,是 GitHub 的硬性限制。
解决办法是让 Composer 带上个人 GitHub Token 认证,把配额提到每小时 5000 次。不需要改项目代码,只改本地 Composer 配置:
- 去 GitHub Settings → Developer settings → Personal access tokens → Generate new token,勾选
repo(仅需这一个 scope) - 执行命令:
composer config -g github-oauth.github.com <your_token_here></your_token_here> - 确认生效:
composer config -g --list | grep github-oauth应该输出你的 token 哈希(不显示明文)
为什么不能用 auth.json 放项目里
有人试过在项目根目录放 auth.json 并写入 token,但这是危险且无效的常规操作——因为 auth.json 默认只读取全局或用户家目录下的版本,项目级的 auth.json 不会被 Composer 加载(除非显式指定 --auth,但 install 过程中不会用到)。
更关键的是:把 token 提交进 Git,等于公开泄露凭证。GitHub 会自动扫描并禁用这类 token。所以必须用 composer config -g 写入全局配置,既安全又生效。
-
-g表示 global,写入~/.composer/auth.json,仅当前用户可见 - 不要手动编辑
auth.json文件,容易格式出错导致后续所有 Composer 命令失败 - 如果已误提交 token,请立刻去 GitHub 后台 revoke,并重生成
CI 环境(如 GitHub Actions)怎么配 Token
CI 场景下不能用 -g,因为每次都是干净环境。必须在运行前动态注入,且不能硬编码。
以 GitHub Actions 为例,正确做法是利用 GITHUB_TOKEN(自带、作用域受限但足够)或自定义 secret:
- 在 workflow 中加一步:
composer config github-oauth.github.com ${{ secrets.MY_GITHUB_TOKEN }} - 或者更稳妥地用
composer config --auth(作用于当前项目目录):composer config --auth github-oauth.github.com ${{ secrets.MY_GITHUB_TOKEN }} - 避免用
echo '{"github-oauth": {"github.com": "xxx"}}' > auth.json,JSON 转义易错,且权限可能不对
Token 失效后 Composer 不报错但降级回限速模式
Token 被 revoke 或过期后,Composer 不会提示“token invalid”,而是静默退回到未认证状态——于是又回到每小时 60 次限制,错误重现。这个降级行为极难察觉,尤其在 CI 上表现为偶发失败。
排查方法很简单:
- 运行
composer diagnose,看输出里是否有GitHub API: OK(有 token 且有效)或GitHub API: Not working(token 失效或没配) - 临时加
-v参数跑一次composer update -v,留意日志里是否出现Using GitHub token from configuration - 别依赖 “没报错=没问题”,rate limit 是服务端返回 403,Composer 客户端默认吞掉细节
真正麻烦的不是配不上,而是配了却失效了还浑然不觉。定期检查 composer diagnose 输出比等 CI 报错更省时间。










