0

0

Composer如何发布私有Packagist_搭建Satis私有仓库教程【专业】

冰火之心

冰火之心

发布时间:2026-02-05 18:04:02

|

355人浏览过

|

来源于php中文网

原创

不能直接用 Composer install 私有 Git 仓库,因需本地配置认证、不支持版本稳定解析与团队复用,必须通过 Satis 等私有 Packagist 实现可发现性与可分发性。

composer如何发布私有packagist_搭建satis私有仓库教程【专业】

为什么不能直接用 Composer install 私有 Git 仓库?

Composer 默认支持通过 git 协议或 HTTPS 克隆私有仓库,但前提是:你本地已配置好 SSH 密钥或 Git 凭据,且 composer.json 中的 repositories 类型设为 vcs。问题在于——这无法被团队其他成员复用,也不支持版本约束(如 "dev-main""1.2.0")的稳定解析,更不提供包搜索、依赖图谱、Web 界面等能力。

真正需要私有 Packagist,本质是解决「可发现性」和「可分发性」:让任意能访问仓库服务的机器,仅靠 composer require vendor/package 就能拉取、缓存、校验、安装。

常见踩坑点:

  • 误以为加个 "type": "vcs"repositories 就等于有了私有仓库——这只是临时绕过方案,不是发布流程
  • 把 Satis 配置成全量扫描 Git 服务器(如 Gitee/GitLab),结果每次 build 都超时或漏包——Satis 不自动发现仓库,必须显式列出 packages
  • 忽略 requirerequire-dev 的作用域差异,导致 Satis 构建时把测试工具也打进 dist 包,体积暴涨

如何用 Satis 搭建最小可用私有仓库?

Satis 是最轻量、最可控的私有 Packagist 替代方案,它不运行服务,只生成静态 packages.json 和 dist 归档,适合内网或 CI/CD 场景。

实操要点:

  • 新建 satis.json,核心字段必须包含:name(仓库名)、homepage(输出目录 URL 前缀)、repositories(明确列出每个私有包的 Git 地址)、require-allrequire(指定哪些包要纳入索引)
  • 确保所有私有仓库的 composer.json 中有合法 version 字段(或打 Git tag),否则 Satis 无法识别可用版本
  • 执行 php bin/satis build satis.json web/,生成的 web/packages.json 就是 Composer 能读取的源数据
  • web/ 目录用 Nginx/Apache 托管,确保能通过 HTTP 访问到 https://pkgs.your.org/packages.json

示例 satis.json 片段:

秘塔写作猫
秘塔写作猫

秘塔写作猫是一个集AI写作、校对、润色、配图等为一体的创作平台

下载
{
  "name": "Your Private Repository",
  "homepage": "https://pkgs.your.org",
  "repositories": [
    { "type": "vcs", "url": "https://git.your.org/internal/logger.git" },
    { "type": "vcs", "url": "https://git.your.org/internal/http-client.git" }
  ],
  "require-all": true,
  "archive": {
    "directory": "dist",
    "format": "tar",
    "skip-dev": true
  }
}

如何让 Composer 客户端信任你的私有仓库?

关键不在「加源」,而在「加源 + 关闭安全校验 + 处理认证」三步闭环。缺一不可。

常见错误现象:Could not fetch https://pkgs.your.org/packages.json, please review your configured sources,往往是因为以下任一环节失败:

  • composer config -g repositories.your-name composer https://pkgs.your.org —— 必须用 composer 类型,不是 vcs
  • 内网仓库无 HTTPS 或证书自签:需在全局 config 中设 "secure-http": false(仅限可信内网)
  • 仓库启用了 Basic Auth:需提前运行 composer config -g http-basic.pkgs.your.org username password,否则请求直接 401
  • Git 仓库本身需要 token 认证:Satis 构建时要用 auth.json 配置凭据,否则 clone 失败,packages.json 缺失该包

验证是否生效:运行 composer show -p | grep your-vendor,应能列出私有包;再试 composer require your-vendor/logger,看是否走 pkgs.your.org 下载 dist 包而非直连 Git。

Satis 构建慢 / 包缺失 / 版本不更新?排查这三点

Satis 不是守护进程,构建即快照。所有问题都源于「输入配置」与「Git 状态」不一致。

  • 构建慢:默认会 clone 每个仓库并 checkout 所有 tag/branch。用 "only": ["1.2.0", "dev-main"] 限定版本范围,或启用 "no-api": true 跳过 GitHub/GitLab API 查询(适用于自建 Git)
  • 包缺失:检查 Satis 日志中是否有 Skipping package ... because no version could be determined。90% 是因为 Git 仓库没打 tag,或 composer.jsonversion,或分支名不符合 dev- 前缀规范
  • 版本不更新:Satis 不监听 Git 变更。必须重新运行 build,且建议配合 Git hook 或 CI 在 push tag 后自动触发——否则新 tag 永远不会进 packages.json

真正容易被忽略的是:Satis 生成的 packages.json 里每个包的 dist.url 默认指向 GitHub/GitLab 的 zipball,而不是你自己的 dist/ 目录。务必确认 archive.directoryhomepage 路径拼接后,能真实返回 tar 文件(例如 https://pkgs.your.org/dist/your-vendor/logger/1.2.0.zip)。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
composer是什么插件
composer是什么插件

Composer是一个PHP的依赖管理工具,它可以帮助开发者在PHP项目中管理和安装依赖的库文件。Composer通过一个中央化的存储库来管理所有的依赖库文件,这个存储库包含了各种可用的依赖库的信息和版本信息。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

157

2023.12.25

nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

233

2023.07.27

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

509

2023.08.04

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

521

2023.08.04

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

235

2024.02.23

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

406

2024.07.09

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

3584

2024.08.07

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

41

2026.01.13

java连接字符串方法汇总
java连接字符串方法汇总

本专题整合了java连接字符串教程合集,阅读专题下面的文章了解更多详细操作。

7

2026.02.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 11.1万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号