根本原因是composer默认直连https://repo.packagist.org且不回退,换源是唯一可靠解法;需用composer config -g repo.packagist配置内网镜像并验证输出,同时确保web服务器正确配置mime类型、url末尾斜杠及dist路径可读。

内网服务器用 Composer 装不了包,根本原因不是“没网”,而是它默认死命连 https://repo.packagist.org,且不 fallback —— 换源是唯一可靠解法,其他都是临时糊弄。
确认全局源是否真已切到内网镜像
很多团队部署了 Satis 或 Artifactory,但构建机上 composer config -g repo.packagist 一查,还是 {"type": "composer", "url": "https://repo.packagist.org"}。这说明配置压根没生效。
- 必须用
-g(global)参数改,项目级配置composer config repo.packagist在 CI/CD 中基本无效 - 内网地址如果是 HTTPS,确保证书可信;否则先关校验:
composer config -g secure-http false - 如果是
file:///协议,注意三个斜杠:file:///data/packagist,少一个就 404 - 执行后立刻验证:
composer config -g repo.packagist输出必须是你填的内网地址,不能是空或默认值
Satis 构建后 composer install 报 404 或 “file could not be downloaded”
这不是网络不通,是服务端响应不合规 —— Satis 生成的是静态文件,全靠 Web 服务器正确透出。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Nginx 必须显式声明 JSON MIME 类型:
types { application/json json; },否则返回text/plain,Composer 直接拒收 - 镜像 URL 必须以
/结尾,比如https://pkgs.internal/;写成https://pkgs.internal会导致 Composer 拼错路径为https://pkgs.internalpackages.json -
dist/目录下的 ZIP 文件路径要能直接 GET,例如https://pkgs.internal/dist/vendor-package/version-hash.zip,检查 SELinux、文件权限、Nginx root 是否指向构建输出目录(如web/) - 构建命令漏掉输出目录是高频错误:
php bin/satis build satis.json dist,少写dist就会把文件生成到当前目录,Web 服务根本找不到
为什么私有包始终 “Could not find package xxx”
Satis 不代理请求,也不自动同步你没明说的包。它只按 satis.json 里写的仓库和规则拉取,不会猜你要什么。
-
"require-all": true和"require": {}绝对不能混用,Satis 会静默跳过部分包,下游报错却完全不提示冲突 - 私有 Git 仓库必须在
repositories数组中完整定义,类型+URL 缺一不可,不能只写字符串 URL - 如果用了
"require-all": true,但某个私有包的composer.json里声明了依赖外部包(如psr/log),而该外部包没被 Satis 收录,composer install仍会失败 —— 得手动加进repositories或启用"require-dependencies": true - Git 仓库 URL 要能被 Satis 机器直连(SSH key 或 token 配好),否则构建阶段就拉不到
composer.json,后续全白搭
离线环境连 HTTP 服务都没有怎么办
当内网彻底无出口、也无 Web 服务时,“镜像”方案失效,只能靠人工同步,但关键不是“怎么装”,而是“怎么禁掉所有远程行为”。
- 在外网机器上,用
composer install --no-dev --no-scripts --no-plugins --prefer-dist生成干净的vendor/ - 打包
vendor/+composer.lock一起拷入内网,内网机器只需 PHP 解释器,无需 Composer 二进制 - 严禁在内网机器运行
composer update、composer require或任何带网络标识的命令 —— 即使配了镜像,Composer 仍可能去 GitHub 查 commit hash 或验证签名 - 若项目含私有 VCS 包,外网构建时需确保 SSH key 或 token 可用,否则
vendor/里缺内容,内网直接崩
最常被忽略的其实是 Web 服务器配置细节:MIME 类型、结尾斜杠、dist 路径可读性 —— 它们不出错时一切正常,一出错就是静默失败,日志里连线索都不留。










