satis未生效主因是composer未读取私有源:packages.json须返回200、客户端repositories需显式配置并禁用packagist.org、satis.json字段结构及archive url必须精准。

直接用 composer install 卡在 packagist.org,不是 Composer 慢,而是它默认必须连通官方源拉取元数据——哪怕只装一个包。Satis 的作用是彻底绕过公网,但前提是:配置对、文件可访问、客户端不 fallback。
为什么 satis build 后 composer 还走外网
绝大多数情况,根本不是 Satis 没生效,而是 Composer 根本没读到你的镜像源。核心就三点:
-
packages.json必须能被curl -I https://satis.example.com/packages.json直接返回 HTTP 200;Nginx/Apache 返回 403/404 时,Composer 会静默 fallback 到packagist.org - 客户端
composer.json中的"repositories"必须显式写成{"type": "composer", "url": "https://satis.example.com/"}(注意结尾斜杠) - 必须同时设
"packagist.org": false,否则哪怕写了私有源,Composer 仍会兜底查公网
satis.json 配置里最容易错的三个字段
结构错位或语义误用,会导致生成空 packages.json 或构建失败:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
"repositories"必须是顶层数组,每个元素是完整对象,不能写成字符串 URL;例如{"type": "vcs", "url": "https://git.internal/lib.git"},不是"https://git.internal/lib.git" -
"require-all": true和"require": {...}不能共存;前者抓取所有分支/Tag,后者只抓指定包名+版本约束(如"vendor/package": "1.2.*") -
"output-dir"强烈建议用绝对路径(如/var/www/satis),相对路径在不同工作目录下容易解析失败,且权限问题更难排查
dist ZIP 文件下载失败的常见原因
明明 packages.json 有内容,composer install 却报 Could not fetch dist,通常卡在这几个环节:
- Web 服务器未正确配置 MIME 类型:
application/json对应.json,application/zip对应.zip;Nginx 需加types { application/json json; application/zip zip; } -
"archive": {"prefix-url": "https://satis.example.com"}中的 URL 必须和实际部署地址完全一致,大小写、协议、端口、斜杠都不能差 - Git 仓库根目录下缺少合法
composer.json,或其中"name"字段含大写字母/下划线(如MyPackage或my_package),Satis 会跳过该包且不报错
构建时内存耗尽或 GitHub API 被限流
执行 php bin/satis build 报 Allowed memory size exhausted 或 Could not fetch https://api.github.com,别急着重装:
- PHP 内存限制不够:修改
php.ini中的memory_limit至少为512M,用php --ini确认生效路径 - GitHub API 限流:在
satis.json加"github-protocols": ["https"];若需更高配额,设环境变量GITHUB_TOKEN(Satis 会自动读取) - 企业防火墙拦截 API 域名:确保构建服务器能
curl -v https://api.github.com通,否则加"github-domains": ["api.github.com"]显式声明
最常被忽略的是:Satis 不是服务,只是静态文件生成器;没有 Web 服务器托管、没有客户端显式禁用 packagist.org、没有验证 packages.json 可 GET,三者缺一,整个链路就断在第一步。










