私有php包管理应根据团队需求选择Satis或private Packagist:Satis适合预算有限、需完全控制的静态部署;Private Packagist更适合高频发布、注重协作与自动同步的团队环境。

在企业或团队开发中,维护内部 PHP 包时,直接将代码发布到公共的 Packagist.org 并不合适。使用私有的包仓库(如 Satis 或 Private Packagist)可以安全地管理这些私有组件,同时保持与 composer 的无缝集成。
选择合适的私有包管理方案
Satis 是一个静态的 Composer 仓库生成器,由 Composer 官方提供。它从指定的 VCS 源(如 git)拉取包信息,生成一个可被 Composer 使用的 jsON 文件列表,并部署为静态站点。适合对安全性要求高、不频繁更新的场景。
Private Packagist 是一个商业托管服务(也支持自托管),提供完整的 Web 界面、自动同步、权限控制和 webhook 集成,更适合团队协作和高频发布的环境。
如果需要完全控制基础设施且预算有限,Satis 更合适;若追求易用性和维护效率,Private Packagist 是更优选择。
使用 Satis 搭建私有仓库
1. 全局安装 Satis:
composer global require composer/satis
2. 创建 satis.json 配置文件:
{ "name": "My Company Package Repository", "homepage": "https://packages.example.com", "repositories": [ { "type": "vcs", "url": "https://git.example.com/internal/package-a" }, { "type": "vcs", "url": "ssh://git@gitlab.internal/package-b.git" } ], "require": { "company/package-a": "^1.0", "company/package-b": "^2.5" } }
3. 生成静态仓库:
satis build satis.json web/
4. 将生成的 web/ 目录部署到 Web 服务器,确保可通过 HTTPS 访问。
5. 在项目中使用该仓库,在 composer.json 中添加:
"repositories": [ { "type": "composer", "url": "https://packages.example.com" } ]
之后即可像使用公共包一样 require 私有包。
配置 Private Packagist 实现自动化管理
1. 注册并登录 Private Packagist,创建组织账户。
2. 添加你的私有 Git 服务(github、GitLab、Bitbucket Server 等),通过 OAuth 或 SSH 授权访问。
3. 在控制台添加包,可手动输入名称或自动扫描所有可见仓库。
4. 设置自动同步:当 Git 提交新标签或分支时,Private Packagist 会自动抓取并更新元数据。
5. 在本地项目中配置仓库:
"repositories": [ { "type": "composer", "url": "https://yourcompany.packagist.com" } ]
6. 添加认证信息,避免每次请求都弹出凭据框:
运行命令:composer config http-basic.yourcompany.packagist.com username Token
凭证将保存在 auth.json 中,建议加入版本控制或 CI 环境变量。
安全与最佳实践
确保所有私有包使用命名空间隔离,例如 acme/internal-user-bundle,避免与公开包冲突。
限制仓库访问权限,Satis 可通过 nginx 做 Basic Auth,Private Packagist 支持用户角色和 IP 白名单。
定期清理旧版本,防止包体积膨胀。Satis 支持只包含特定版本,Private Packagist 提供删除功能。
将私有仓库地址统一写入公司模板项目的 composer.json,减少配置错误。
基本上就这些。只要配置一次仓库,后续开发中就可以像使用 laravel 或 symfony 组件一样方便地引入内部包。关键是选型要匹配团队规模和技术能力。