Satis是静态包仓库生成器而非镜像站;其“发布”本质是Satis拉取Git仓库、解析tag、生成packages.json和ZIP包,需确保vcs仓库配置正确、tag符合语义化版本、项目配置指向Satis站点。
直接说结论:Satis 不是镜像站,而是静态包仓库生成器;发布私有包到 Satis 站点,本质是让 Satis 扫描你的 Git 仓库并生成 packages.json 和对应 ZIP 归档——不是「推送」,而是「拉取+生成」。
为什么 composer publish 不存在?
Satis 没有服务端 API,也不接受 HTTP 推送。它只是一个命令行工具,运行时会:
- 克隆你配置的 Git 仓库(支持
git@、https://、甚至本地路径) - 检出指定分支或标签(如
v1.2.0) - 读取其中的
composer.json,提取name、version、dist下载地址等元数据 - 打包源码为 ZIP(可选),写入
dist字段,并生成最终的packages.json
所以「发布」= 提交带正确 version 的 tag + 触发 Satis 构建。别在本地跑 composer install 后试图上传 vendor —— Satis 不认这个。
satis.json 中必须配对的两个关键字段
很多人卡在构建后包不出现,问题常出在这两处没对齐:
-
repositories里每个仓库的type必须是vcs(不是package或composer) - 每个
vcs仓库的url必须能被 Satis 主机直接git clone通(比如填[email protected]:php/my-utils.git,而非https://gitlab.internal/php/my-utils—— 后者可能因无凭据失败)
示例片段:
{
"repositories": [
{
"type": "vcs",
"url": "[email protected]:php/my-utils.git"
}
],
"require-all": true
}
注意:require-all 表示拉取所有 tagged 版本;若只想要特定包,改用 "require": { "mycompany/my-utils": "*" }。