什么是Satis,如何用它搭建一个私有的composer仓库?

发布时间 - 2025-11-29 00:00:00    点击率:
Satis 是一个轻量级私有 PHP 包仓库生成器,由 Composer 团队开发,通过 satis.json 配置文件抓取指定包(支持私有 Git 等源),生成静态 composer.json 和网页用于内部依赖管理;适合团队安全分发私有包,无需复杂服务,结合 HTTPS 与访问控制可高效运行。

Satis 是一个由 Composer 团队开发的静态包仓库生成器,它可以帮你创建一个私有的 PHP 包仓库。你不需要运行复杂的数据库或服务,Satis 会根据你的配置文件(通常是 satis.json)抓取指定的 Composer 包(可以是私有 Git 仓库、公开包或镜像),然后生成一个静态的 composer.json 文件和相关网页,供你在公司内部或其他私有环境中使用。

为什么使用 Satis?

当你在团队或企业中开发多个私有 PHP 包时,不想把它们发布到公共的 Packagist 上,但又希望用 Composer 来统一管理依赖,这时 Satis 就非常有用。你可以通过私有仓库安全地分发这些包,并控制谁可以访问。

安装 Satis

Satis 是一个命令行工具,可以通过 PHAR 或 Composer 全局安装:

  • 推荐方式:使用 Composer 全局安装
composer global require composer/satis

确保你的 Composer 全局 bin 目录在系统 PATH 中,这样可以直接运行 satis 命令。

  • 或下载 PHAR 文件
curl -sSL https://getcomposer.org/download/latest-stable/satis.phar -o satis.phar

配置 satis.json

在项目根目录创建一个 satis.json 文件,定义你的仓库设置和要包含的包:

{ "name": "My Private Composer Repository", "homepage": "https://packages.example.com", "repositories": [ { "type": "vcs", "url": "git@github.com:mycompany/package-one.git" }, { "type": "vcs", "url": "https://github.com/mycompany/package-two" }, { "type": "package", "package": { "name": "vendor/existing-package", "version": "1.0.0", "dist": { "url": "https://example.com/dist/existing-package-1.0.0.tgz", "type": "tar" } }} ], "require-all": true, "output-dir": "web" }

说明:

  • name / homepage:仓库名称和访问地址
  • repositories:列出你要抓取的包源,支持 Git、SVN、Mercurial 等 VCS 类型,也支持直接打包
  • require-all:自动包含所有版本(按标签)
  • 你也可以用 "require" 字段精确控制哪些包和版本被包含,例如:
    "require": {
    "mycompany/package-one": "^2.0"
    }
  • output-dir:生成的静态文件存放路径

生成仓库

运行以下命令生成静态仓库:

satis build satis.json ./web

这会拉取你配置中的所有包信息,并生成一个 web/composer.json 文件,以及一个可选的 HTML 页面用于浏览。

部署私有仓库

将输出目录(如 web/)部署到一个可通过 HTTPS 访问的 Web 服务器上(比如 Nginx 或 Apache)。假设你的域名是 packages.example.com,用户就可以通过这个地址访问仓库。

在项目中使用私有仓库

在你的 PHP 项目中,修改 composer.json,添加你的私有仓库:

{ "repositories": [ { "type": "composer", "url": "https://packages.example.com" } ], "require": { "mycompany/package-one": "^1.0" } }

执行 composer install 时,Composer 会优先从你的私有仓库查找包。

安全建议

  • 使用 HTTPS 防止中间人攻击
  • 配合 HTTP Basic Auth 或 IP 白名单限制访问
  • 私有 Git 仓库应配置 SSH 密钥或令牌进行认证,Composer 会使用系统的 Git 凭据

自动化更新

你可以设置定时任务(如 cron)定期重新运行 satis build,以同步最新代码提交或标签:

0 * * * * /usr/local/bin/satis build /path/to/satis.json /path/to/web

基本上就这些。Satis 轻量、稳定,适合中小型团队搭建私有包管理平台。只要配置好 Git 权限和 Web 访问控制,就能安全高效地管理私有 PHP 包。不复杂但容易忽略细节,比如权限和 HTTPS。


# php  # html  # js  # git  # json  # composer  # apache  # github  # nginx  # 工具  # ssl  # require  # cURL  # private  # svn  # 数据库  # http  # https  # ssh  # 自动化  # 是一个  # 你可以  # 你在  # 创建一个  # 配置文件  # 访问控制  # 就能  # 多个  # 你要  # 你也 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  如何用虚拟主机快速搭建网站?详细步骤解析  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  北京专业网站制作设计师招聘,北京白云观官方网站?  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  Laravel怎么实现验证码(Captcha)功能  javascript中对象的定义、使用以及对象和原型链操作小结  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  中山网站制作网页,中山新生登记系统登记流程?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  如何在自有机房高效搭建专业网站?  非常酷的网站设计制作软件,酷培ai教育官方网站?  中山网站推广排名,中山信息港登录入口?  微信小程序 HTTPS报错整理常见问题及解决方案  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  什么是javascript作用域_全局和局部作用域有什么区别?  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  制作公司内部网站有哪些,内网如何建网站?  如何为不同团队 ID 动态生成多个“认领值班”按钮  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  如何快速上传自定义模板至建站之星?  Laravel模型事件有哪些_Laravel Model Event生命周期详解  如何在云服务器上快速搭建个人网站?  如何彻底删除建站之星生成的Banner?  详解Android图表 MPAndroidChart折线图  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  米侠浏览器网页背景异常怎么办 米侠显示修复  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  JS弹性运动实现方法分析  香港服务器租用每月最低只需15元?  Laravel如何使用Telescope进行调试?(安装和使用教程)  大型企业网站制作流程,做网站需要注册公司吗?  香港服务器选型指南:免备案配置与高效建站方案解析  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  如何选择PHP开源工具快速搭建网站?  如何在腾讯云免费申请建站?  高防服务器:AI智能防御DDoS攻击与数据安全保障  JavaScript模板引擎Template.js使用详解  iOS验证手机号的正则表达式  Mybatis 中的insertOrUpdate操作  重庆市网站制作公司,重庆招聘网站哪个好?  Laravel怎么发送邮件_Laravel Mail类SMTP配置教程  html如何与html链接_实现多个HTML页面互相链接【互相】  如何在阿里云完成域名注册与建站?  如何利用DOS批处理实现定时关机操作详解