局域网私有composer镜像配不起来,90%是因dist.url仍指向github、packages.json未被web服务正确暴露或项目级配置错误;必须确保zip包可http直连get、nginx mime类型正确、url末尾带/、且清缓存删vendor和lock后重装。

局域网私有 Composer 镜像源配不起来,90% 不是网络不通,而是 dist.url 仍指向 GitHub、packages.json 没被 Web 服务正确暴露、或项目级配置压根没写对——换源 ≠ 换完就通,必须让每个 ZIP 包都能被 HTTP 直连 GET 到。
为什么 composer config -g repo.packagist 在局域网里完全无效
这条命令只改元数据入口(packages.json),不碰任何包的 dist.url 字段。而 Satis 或 Private Packagist 生成的 ZIP 文件路径(如 https://pkgs.internal/dist/monolog/monolog/2.10.0/monolog-2.10.0.zip)仍来自原始源,局域网根本打不开 GitHub。
- 验证方式:运行
composer show monolog/monolog --verbose,看输出中dist.url是否还是https://github.com/... - 全局配置只对当前用户生效;宝塔用
www用户、Docker 容器常以非 root 运行,composer config -g写进的是/root/.composer/config.json,进程读不到 - CI/CD 环境(如 GitLab Runner)默认不加载你的全局配置,也不继承
auth.json,认证直接 401
composer.json 里怎么写私有源才真正走内网
私有源必须写在你要装包的那个项目的根级 composer.json 里,不是 Satis 自己的配置文件,也不是包自己的 composer.json。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须放在
repositories数组首位:"repositories": [ {"type":"composer","url":"https://pkgs.internal/"}, ... ],顺序错就 fallback 到官方源 -
url必须以/结尾,否则会拼成https://pkgs.internalpackages.json,404 -
"packagist.org": false必须写在composer.json根节点(和require同级),不能嵌套在某个仓库对象内部 - 别手动写
"packagist": false或"packagist": true,这会导致基础包(如php、ext-json)校验失败
Nginx 配置不合规导致 404 的真实原因
Satis 不是 Web 服务,只是静态文件生成器。它不监听端口、不启动进程,只把 packages.json 和 ZIP 写进 output-dir。404 不是网络不通,是 Nginx 没暴露对路。
-
root必须精确指向satis.json中output-dir的子目录(通常是web),例如:root /var/www/satis/web; - 必须显式声明 JSON MIME 类型:
types { application/json json; },否则返回text/plain,Composer 拒收 - 检查
dist/下 ZIP 路径是否可直连 GET,例如https://pkgs.internal/dist/monolog/monolog/2.10.0/xxx.zip;SELinux 或文件权限常锁死该路径 - 没把
packages.json设为默认索引文件,访问https://pkgs.internal/时服务器去找index.html,但 Satis 默认不生成这个文件
换源后 composer install 还报错或卡住?先清这三样
镜像只加速下载,但 Composer 会优先读缓存、旧 composer.lock 和本地 vendor/。哪怕你刚配好,它也可能还在往 packagist.org 发请求。
- 清缓存:
composer clear-cache - 删掉项目下的
vendor/和composer.lock - 再跑
composer install -vvv,观察日志里是否出现你的内网地址(如pkgs.internal);如果还是packagist.org,说明配置没走通 - 注意:
composer update没用——它照着旧lock文件里的dist.url下载,必须重生成 lock
最易忽略的一点:所有 ZIP 包的 dist.url 必须能被 HTTP 直连 GET 到,且 Web 服务响应头、URL 末尾斜杠、文件权限、MIME 类型全部对齐;少一个环节,composer install 就会在静默中 fallback 到外网或卡死。










