答案是使用SSH密钥或GitHub Personal Access Token(PAT)配置Composer访问私有仓库。推荐根据环境选择:开发环境可用SSH密钥,通过ssh-keygen生成密钥并添加公钥到GitHub;CI/CD环境则推荐使用PAT,通过环境变量GITHUB_TOKEN传递认证信息,避免凭据泄露。

Composer要依赖私有GitHub包,核心在于让Composer获得访问这些私有仓库的权限。最常见且推荐的做法是使用SSH密钥或GitHub Personal Access Token (PAT)进行认证。这两种方式都能让Composer在执行
composer install或
composer update时,顺利拉取到你拥有权限的私有代码。
要让Composer能够顺利拉取私有的GitHub包,你需要配置好认证凭据。这里我们主要讨论两种主流且可靠的方案:SSH密钥和GitHub Personal Access Token。
方案一:使用SSH密钥 这是许多开发者偏爱的方式,因为它与Git本身的认证机制高度兼容。
生成SSH密钥对(如果还没有的话): 如果你还没有SSH密钥,或者想为Composer专门生成一个,可以在终端运行:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
按照提示操作,通常会保存在~/.ssh/id_rsa
和~/.ssh/id_rsa.pub
。将公钥添加到GitHub账户或组织: 登录GitHub,进入
Settings -> SSH and GPG keys
,点击New SSH key
,将id_rsa.pub
文件的内容粘贴进去。如果你是在组织层面使用,也可以在组织设置中添加部署密钥(Deploy Key),但部署密钥通常只给单个仓库使用。对于多个私有包,账户级别的SSH密钥更方便。配置Composer的Git客户端: Composer在内部会调用Git命令来克隆仓库。确保你的Git客户端配置了SSH。通常情况下,只要你的SSH代理(
ssh-agent
)运行着,并且私钥被正确添加,Composer就能自动利用SSH进行认证。 你可以通过运行ssh-add ~/.ssh/id_rsa
来添加私钥到ssh-agent
。-
在
composer.json
中指定仓库: 在你的项目composer.json
文件中,你需要明确告诉Composer你的私有包在哪里。{ "name": "your-project/app", "description": "My main application", "type": "project", "require": { "php": "^8.0", "your-vendor/private-package": "^1.0" }, "repositories": [ { "type": "vcs", "url": "git@github.com:your-vendor/private-package.git" } ], "config": { "allow-plugins": { "php-http/discovery": true } } }注意
"url": "git@github.com:your-vendor/private-package.git"
,这里使用的是SSH协议的Git URL。
方案二:使用GitHub Personal Access Token (PAT) 当SSH不太方便,比如在CI/CD环境中,或者你不想管理SSH密钥时,PAT是个很好的替代方案。
生成Personal Access Token: 登录GitHub,进入
Settings -> Developer settings -> Personal access tokens -> Tokens (classic)
(或者Fine-grained tokens
,但classic更常用)。 点击Generate new token
,给它一个有意义的名字(例如"Composer for My Project")。 关键是权限(Scopes): 至少需要勾选repo
权限,以便Composer能够读取私有仓库。如果你的包需要发布到Packagist或者其他操作,可能还需要更多权限。 生成后,请务必复制这个Token,因为它只会显示一次。-
配置Composer使用PAT: 你可以通过多种方式让Composer使用这个PAT:
全局配置(不推荐用于生产环境):
composer config -g github-oauth.github.com
这会将Token保存在你的全局Composer配置中(通常是~/.composer/config.json
)。在开发机上方便,但生产环境或共享环境不安全。-
项目级别配置(推荐): 在你的项目根目录运行:
composer config github-oauth.github.com
这会将Token保存在项目composer.json
同级的一个auth.json
文件中。请务必将auth.json
添加到.gitignore
中,绝不能提交到版本控制!// auth.json { "github-oauth": { "github.com": "" } } 环境变量(CI/CD环境推荐): 在CI/CD管道中,你可以设置一个环境变量,例如
COMPOSER_AUTH
:export COMPOSER_AUTH='{"github-oauth": {"github.com": "或者更直接地,设置"}}' GITHUB_TOKEN
环境变量(Composer 2.0+ 会自动识别):export GITHUB_TOKEN=
这是最安全和灵活的方式,因为Token不会持久化在文件系统中。
-
在
composer.json
中指定仓库: 与SSH方式类似,但URL可以使用HTTPS协议。{ "name": "your-project/app", "description": "My main application", "type": "project", "require": { "php": "^8.0", "your-vendor/private-package": "^1.0" }, "repositories": [ { "type": "vcs", "url": "https://github.com/your-vendor/private-package.git" } ] }Composer会尝试使用配置的PAT来认证HTTPS请求。
如何选择SSH密钥还是Personal Access Token?哪种方式更适合我的场景?
选择SSH密钥还是










