云服务器配composer镜像必须关tls、用厂商内网http地址、设http-max-concurrent-downloads为20–30,三者缺一不可;否则千兆带宽无法跑满,实测吞吐仅35mb/s。

云服务器上配 Composer 镜像,不是换源就完事——不关 TLS、不用内网地址、不调并发,千兆带宽照样跑不满,甚至比本地还慢。
必须用云厂商内网 HTTP 地址
公网 HTTPS 镜像(如 https://mirrors.aliyun.com/composer/)在 ECS 或 K8s 内网里会卡在 TLS 握手,实测吞吐仅 35MB/s;换成对应云厂商的内网 HTTP 地址,才能逼近千兆极限:
- 阿里云:
http://mirrors.cloud.aliyuncs.com/composer/(注意是http://,末尾/不可省) - 腾讯云:
http://mirrors.cloud.tencent.com/composer/ - 华为云:
http://repo.huaweicloud.com/repository/php/
HTTP 协议在内网安全且官方允许——镜像站只提供静态文件,无中间人风险。漏掉 http:// 或写成 https://,CPU 就被 OpenSSL 吃满,file_put_contents(/tmp/) 错误频发。
composer config -g repo.packagist 命令三要素缺一不可
这条命令静默失败率极高,不报错但完全不生效。必须同时满足:
-
-g参数不能省:否则只改当前目录,换项目/换用户即失效 - 键名严格为
repo.packagist(单数repo,不是repos或mirror) - 中间的
composer是type值,不是注释——写成composer config -g repo.packagist https://...就失效
验证是否写入成功,只认这一条命令:composer config -g repo.packagist。输出必须是完整 JSON,例如:{"type": "composer", "url": "http://mirrors.cloud.aliyuncs.com/composer/"}。空、null 或报 Key does not exist,说明根本没写进去。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
并发参数要分场景设,parallel-downloads 已废弃
Composer 2.2+ 中 parallel-downloads 已被移除,设了也不生效。真正控制下载并发的是 http-max-concurrent-downloads:
- 内网环境(ECS/K8s):设为
20–30,喂饱千兆网卡(composer config -g http-max-concurrent-downloads 25) - 低配 VPS(512MB 内存):降为
6–8,避免file_put_contents(/tmp/): failed to open stream - CI/CD 容器环境:优先设
COMPOSER_HOME隔离配置,防止与宿主冲突
执行 composer install -vvv 时,日志里出现 Downloading https:// (25 concurrent) 表示生效——别被 https:// 前缀误导,实际请求已走你配的 http:// 地址。
清缓存 + 删锁文件 + 重装,三步不可跳过
镜像配对了,但 composer install 还卡在 Loading composer repositories?大概率是旧缓存和 composer.lock 在“坚持用 packagist.org 的路径”:
- 先运行
composer clear-cache,清掉本地元数据索引 - 删掉项目下的
vendor/和composer.lock - 再执行
composer install --prefer-dist --no-autoloader --no-scripts(减负,尤其对低配机)
项目级 repositories 字段会完全屏蔽全局配置,检查是否存在只需运行 composer config repo.packagist(不带 -g)。有输出,说明你正在被自己的 composer.json 覆盖。










