Composer 访问私有 GitHub/GitLab 仓库需组合配置:1. 配置 Git 认证(SSH 或 PAT);2. 在 composer.json 中通过 vcs 类型 repositories 声明具体仓库地址并 require;3. 多包场景可选 Satis 或 Private Packagist;4. 私有包自身须规范 name、autoload 和 tag 发布。

要让 Composer 能从私有 GitHub 或 GitLab 组织(Group/Organization)下的仓库拉取包,核心不是“把整个组织设为源”,而是让 Composer 能安全、自动地访问组织内特定的私有仓库。这需要组合配置:认证机制 + 包定义方式 + 可选的自建包发现服务。
1. 配置 Git 认证凭证(必需)
Composer 通过 Git 协议克隆私有仓库,所以必须让系统级 Git 能无交互地认证。推荐用 SSH 密钥或个人访问令牌(PAT):
-
GitHub 推荐 SSH:生成 SSH 密钥并添加到 GitHub 账户;确保
git@github.com:org-name/repo-name.git可手动 clone 成功;Composer 会自动复用系统 Git 的 SSH 配置。 -
GitLab 或需 HTTPS + PAT:在
~/.gitconfig中配置凭证 helper,或使用git config --global url."https://TOKEN@gitlab.com/".insteadOf "https://gitlab.com/"(注意 TOKEN 要 URL 编码,且需read_repository权限)。
2. 在项目中声明私有包(直接引用)
不需要全局注册组织,只需在项目的 composer.json 中明确写明包名和仓库地址:
- 确保包的
name字段符合规范,如"myorg/my-package"(与 GitHub/GitLab 的org-name/repo-name对应)。 - 在
repositories段添加类型为vcs的条目:"repositories": [{ "type": "vcs", "url": "https://gitlab.com/myorg/my-package.git" }] - 然后在
require中写"myorg/my-package": "^1.0",Composer 就会从该地址拉取。
3. 使用 Satis 或 Private Packagist(适合多包管理)
如果组织下有几十个私有包,每次手动加 repositories 很麻烦。这时可部署一个包发现服务:
-
Satis(免费轻量):配置
satis.json扫描组织下所有仓库(支持 GitHub/GitLab API),生成静态packages.json;再在项目中把 Satis 地址设为composer.json的repositories(type:composer)。 - Private Packagist(商业托管):直接连接 GitHub/GitLab 组织,自动同步权限和包元数据,提供 Web 界面和细粒度访问控制。
4. 注意 composer.json 的 name 和 autoload 规范
私有包本身也要正确配置,否则即使能拉下来也无法被自动加载:
-
name必须与require中一致,且不能包含非法字符(如大写字母、下划线)。 -
autoload建议用"psr-4"映射命名空间,例如"MyOrg\\Package\\": "src/"。 - 发布时打 Git tag(如
v1.2.3),Composer 才能识别版本号。
基本上就这些。没有“一键开启组织源”的魔法开关,关键是让 Git 认证通、包地址可访问、包定义清晰。小团队用前两步足够,中大型组织建议上 Satis 或 Private Packagist。










