断网服务器安装Composer必须离线操作:在有网机下载校验composer.phar,通过U盘等传入,放至/usr/local/bin/composer并赋权;需禁用Packagist源、同步vendor目录或锁定依赖版本,并确保ZipArchive、OpenSSL等PHP扩展已启用。

断网环境下无法执行curl或php -r "copy(...)”安装
断网服务器上运行官方一键安装脚本必然失败,因为所有copy()、curl、https://getcomposer.org/installer调用都会超时或报failed to open stream。别试图在断网机上“重试几次”,路径根本不存在。
正确做法是:在有网机器上下载composer.phar二进制文件,手动传入。注意必须下载「phar包」,不是installer脚本——后者仍需联网校验和下载主体。
- 从
https://getcomposer.org/download/页面找最新稳定版的直接下载链接(如https://getcomposer.org/download/2.7.7/composer.phar) - 用浏览器或
wget下载,SHA384校验(官网页面会提供哈希值) - 通过U盘、内网SFTP、scp等方式传到目标服务器指定目录(如
/opt/composer/) - 加执行权限:
chmod +x /opt/composer/composer.phar
composer.phar放在哪才真正可用
断网服务器往往权限受限、PATH固化,随便放个位置composer --version照样报“command not found”。关键不是“能运行”,而是“能在任意路径下被识别”。
推荐两个稳妥位置:
-
/usr/local/bin/composer:最通用,几乎所有Linux发行版都默认包含该路径在PATH中;需sudo权限 -
/opt/php/bin/composer(若PHP是自编译或独立部署):与PHP二进制同级,避免PATH冲突;适合多PHP版本共存环境
切忌放在~/bin或/root/bin——除非你确认部署用户每次登录都加载了该路径,且CI/CD脚本也显式设置了PATH。
断网时composer install卡在Resolving packages...
这不是网络问题,是Composer默认仍尝试连接Packagist元数据接口(哪怕有composer.lock)。断网下它会等DNS超时、HTTP连接超时,单包可能卡1–2分钟。
必须提前配置离线行为:
- 在有网机器上,用
composer config -g repo.packagist false禁用全局源(生成~/.composer/config.json) - 把整个
vendor/目录和composer.lock一并打包,同步到断网机——这是最可靠方案 - 如果只能传
composer.json,务必确保所有依赖已声明精确版本(如"monolog/monolog": "3.5.0"),避免触发版本解析
注意:composer install --no-plugins --no-scripts不能跳过解析阶段,该参数只影响后续执行环节。
PHP扩展缺失导致composer.phar直接退出无提示
断网服务器常为最小化安装,php -v能跑不代表composer.phar能跑。常见静默失败原因:
-
zip扩展未启用 → 报错Class 'ZipArchive' not found,但composer.phar可能只输出空白或段错误 -
openssl扩展未启用 → 无法验证phar签名,直接终止(尤其PHP 8.1+更严格) -
phar扩展被禁用(phar.readonly=Off未设)→composer self-update类操作失败,但安装阶段也可能受影响
验证方式不是看php -m列表,而是运行:php -r "new ZipArchive(); echo 'ok';" 和 php -r "echo OPENSSL_VERSION_TEXT;"。任何一条报错,就得去改php.ini并重启PHP-FPM或CLI环境。
断网环境里,没有“重试”和“临时开网”的余地。每一步都得预判失败点:phar是否校验过、PATH是否真生效、扩展是否真可用、lock文件是否覆盖全部依赖树——漏掉任何一个,就是两小时排查起步。


















