Composer install 卡在 GitHub API 限流是因为未认证请求每小时上限60次,需配置带 repo 权限的 GitHub PAT:composer config -g github-oauth.github.com <token>,并排查项目级覆盖、vcs 仓库未嵌入令牌、CI 未注入等常见问题。

为什么 composer install 突然卡在 GitHub API 限流?
因为 Composer 默认用未认证的 GitHub API 请求下载包元数据(比如 composer.json 中的 repositories 指向 GitHub),每小时最多 60 次。一旦超限,你会看到类似错误:Could not fetch https://api.github.com/...: 403 rate limit exceeded。这不是网络问题,也不是 Composer 坏了,是 GitHub 在拦你。
解决路径只有一条:让 Composer 带上你的 GitHub 个人访问令牌(PAT)去调用 API。
怎么生成并配置 GitHub 令牌给 Composer?
令牌必须带 repo 权限(读私有库也要),不能只选 public_repo —— 否则连公开包都可能失败(某些组织启用 SSO 或私有依赖时会校验完整权限)。
- 去 https://www.php.cn/link/9c450eb90c31bc12f1691f235da5a0cc 创建新令牌,勾选
repo(别漏掉delete_repo以外的全部 repo 子项) - 复制生成的令牌(只显示一次!)
- 运行命令写入全局配置:
composer config -g github-oauth.github.com <your_token_here> - 验证是否生效:
composer config -g github-oauth.github.com应该输出令牌前几位(Composer 会自动掩码)
为什么配了令牌还是被限流?常见踩坑点
令牌配了≠万事大吉。以下情况仍会走未认证请求流:
- 项目级配置覆盖了全局配置:检查项目根目录下
composer.json是否有"config": { "github-oauth": {...} },且值为空或错位 - 用了自定义
repositories类型为vcs+ GitHub HTTPS 地址,但没加令牌——Composer 不会自动复用全局令牌去拉取这些仓库的composer.json,得手动在repositories里写成https://<token>@github.com/user/repo.git - CI 环境没同步令牌:GitHub Actions 中需用
${{ secrets.GITHUB_TOKEN }}(注意它权限有限,建议另配 PAT 并设为 secret);GitLab CI 则要自己注入变量并用composer config github-oauth.github.com $GITHUB_TOKEN
有没有更安全、更省心的替代方案?
直接往 URL 里塞令牌(如 https://token:x-oauth-basic@github.com/...)看着就容易泄露,尤其在日志或调试输出里。推荐两个收敛方式:
- 用 SSH 替代 HTTPS:把
repositories的 URL 改成git@github.com:user/repo.git,前提是机器已配好 SSH key 并能ssh -T git@github.com连通——这样完全绕过 GitHub API 限流 - 换镜像源:国内可用
https://packagist.phpcomposer.com(已停)或https://packagist.proxy.ustclug.org,但注意镜像不保证实时同步,且对私有包无效
真正稳定的解法不是换源,而是确保每次 GitHub API 调用都带合法令牌。令牌本身要定期轮换,别硬编码进任何配置文件或脚本里。










