必须配镜像源,否则composer install在国内ubuntu服务器上会卡在“loading composer repositories”;因composer 2.2+硬编码直连packagist.org,国内dns解析失败且tls握手频繁超时,连接层即中断,非网速问题。

必须配镜像源,否则 composer install 在国内 Ubuntu 服务器上大概率卡死在 “Loading composer repositories” —— 不报错、不超时、不下载,只空转。
为什么默认源在 Ubuntu 服务器上根本走不通
Composer 2.2+ 硬编码直连 packagist.org,不走系统 /etc/hosts 或代理配置;国内 DNS 解析该域名常失败,TLS 握手也频繁超时。这不是“网速慢”,是连接层直接断在第一步。Ubuntu 服务器通常无图形界面、无浏览器缓存、无用户级代理,问题更隐蔽。
- 现象:执行
composer install后光标停住,10 分钟没反应,Ctrl+C中断后看不到任何错误 - 验证方式:运行
composer config -g repo.packagist,如果输出为空或仍是https://packagist.org,说明没生效 - 注意:
~/.composer/config.json不会自动透传进 Docker 容器或sudo环境,必须显式配置
全局配置阿里云镜像源(含校验与路径细节)
推荐使用阿里云镜像(稳定、同步及时),注意末尾斜杠不能少,否则部分 Composer 版本会静默回退到默认源:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
- 必须加末尾
/,否则composer config -g repo.packagist输出可能为字符串而非 JSON 对象,导致失效 - 若用
sudo安装 Composer(如/usr/local/bin/composer),需用sudo -u root composer config -g ...,否则配置写入当前用户家目录,root 下运行时不读取 - CI/CD 环境中常见坑:以
www-data用户运行时,$HOME常为空,需提前设为/var/www或挂载有效.composer目录
Docker 构建中镜像源必须显式写入
别指望宿主机的配置能带进容器。Docker 构建阶段必须在 RUN 指令里重跑配置命令,且顺序不能错:
COPY composer.json composer.lock ./ RUN composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ \ && composer install --no-dev --optimize-autoloader --classmap-authoritative --no-scripts --no-progress
- 严禁在
COPY和RUN composer install之间插入任何其他RUN指令(如mkdir、apt-get update),否则 vendor 层缓存完全失效 - PHP builder 镜像和 final 镜像的版本号(含发行版,如
bullseye)必须一致,否则vendor/autoload.php生成逻辑与运行时不匹配,启动即Fatal error - 如果构建中仍卡住,可临时加
-vvv查看真实请求地址:composer install -vvv 2>&1 | grep "Resolving packages"
生产环境部署时的三个硬性检查点
镜像源只是第一步,生产环境还必须守住这三条线:
-
composer.lock必须提交进 Git,且内容与开发环境完全一致;仅靠composer.json部署会导致版本漂移 - 务必加
--no-dev:跳过require-dev中的包(如 PHPUnit、phpunit/php-code-coverage),避免引入非生产依赖和安全风险 - 禁用
--ignore-platform-reqs:它会绕过 PHP 版本、扩展(如ext-pdo、ext-openssl)校验,上线后可能直接Fatal error
最易被忽略的是 PHP 扩展完整性:Ubuntu 服务器常缺 php-cli、php-zip、php-xml,这些不是 Composer 能检测出来的,但 composer install 会静默失败或后续 autoload 失效。先运行 php -m | grep -E "(zip|xml|mbstring|openssl)" 确认再操作。










