答案是:在联网机上用PHP下载并校验Composer安装脚本,执行离线初始化与依赖固化,打包整个项目目录(含composer二进制、vendor和lock文件);断网机需满足PHP≥8.1及必要扩展,解压后配置wrapper脚本与artifact仓库,并显式禁用Packagist回退。

纯断网机器无法直接运行 curl -sS https://getcomposer.org/installer | php,必须提前在联网机上打包好全部依赖,再手工部署。
怎么在联网机上完整打包 Composer 及其运行时依赖
Composer 本身是 PHP 脚本,但执行时会动态加载大量类库(如 composer/composer、symfony/console 等),且默认通过 Packagist 在线解析依赖。离线安装必须把「可执行 phar + 所有 vendor 类库 + 本地镜像源」三者一并导出。
- 在联网机器上用最新稳定版 PHP(建议 ≥8.1)执行:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');",然后校验 SHA-384(官网页面有实时值,别硬编码) - 运行
php composer-setup.php --install-dir=/tmp/composer-bin --filename=composer生成初始composer可执行文件 - 立刻用它初始化一个空项目:
mkdir /tmp/offline-composer && cd /tmp/offline-composer && /tmp/composer-bin/composer init -n,再执行/tmp/composer-bin/composer install --no-dev --optimize-autoloader,这样会下载并固化所有 runtime 依赖到vendor/ - 最后把整个
/tmp/offline-composer目录(含composer文件、vendor/、composer.lock)打包成composer-offline.tgz
断网机上如何配置 PHP 环境并启用本地 vendor
离线机的 PHP 必须已安装且满足最低要求(php -v 输出 ≥8.1,ext-zip、ext-openssl、ext-json 均启用)。否则 composer 连启动都会报错。
- 解压
composer-offline.tgz到目标路径,比如/opt/composer - 确保
/opt/composer/vendor/autoload.php存在,然后在断网机上写一个 wrapper 脚本/usr/local/bin/composer:
#!/usr/bin/env bash export COMPOSER_HOME="/root/.composer" export PATH="/opt/composer/vendor/bin:$PATH" exec /opt/composer/composer "$@"
- 给脚本加执行权限:
chmod +x /usr/local/bin/composer - 首次运行前先手动创建
COMPOSER_HOME目录:mkdir -p /root/.composer,否则会因无法写缓存而失败
离线环境下 composer require 怎么绕过 Packagist
默认情况下,composer require foo/bar 会访问 https://repo.packagist.org,断网必挂。必须提前把所需包的完整 zip 或 tar.gz 下载好,并用 path 或 artifact 仓库方式注入。
- 在联网机上用
composer archive foo/bar:1.2.3 --format=zip打出离线包(需先require过该包) - 把生成的
foo-bar-1.2.3.zip放到断网机的固定目录,例如/opt/composer/artifacts/ - 在项目根目录的
composer.json中添加仓库配置:
{
"repositories": [
{
"type": "artifact",
"url": "/opt/composer/artifacts/"
}
]
}
- 之后再运行
composer require foo/bar:1.2.3就会从本地读取 zip,不再联网 - 注意:版本号必须严格匹配 zip 文件名中的版本,否则找不到
最关键的不是“怎么装上”,而是“怎么让后续命令不意外触发网络请求”——哪怕只漏配一个 repositories,或者忘了关 packagist.org 的自动 fallback,composer update 仍会卡死在 DNS 查询阶段。离线环境里,任何隐式网络行为都得被显式堵死。


















