内网离线环境下composer必须设composer_disable_network=1强制熔断网络,否则即使vendor和lock完整,install仍会请求远程元数据失败;需配合--no-plugins、--no-scripts、--no-autoloader执行,再运行dump-autoload -o。

内网离线环境下,Composer 不能靠“配个镜像”或“加个参数”就跑起来——必须切断所有远程调用路径,否则哪怕 vendor 目录齐全,composer install 也会在解析阶段尝试请求 https://repo.packagist.org/packages.json 并失败。
COMPOSER_DISABLE_NETWORK=1 是唯一硬性开关
这个环境变量不是可选项,是强制熔断点。不设它,--no-plugins、--offline(根本不存在)、甚至删掉 composer.json 里的所有 repositories 都拦不住默认元数据校验。
-
COMPOSER_DISABLE_NETWORK=1会让所有 HTTP 客户端调用直接报错退出,不重试、不 fallback - 必须在命令前导出:
COMPOSER_DISABLE_NETWORK=1 composer install --no-plugins --no-scripts --no-autoloader - Dockerfile 中要用
ENV COMPOSER_DISABLE_NETWORK=1,不能靠 shell 启动时临时set -
composer config --global repo.packagist false只禁用 packagist 源,但若项目composer.json里写了"url": "https://api.github.com",仍会触发请求
离线机上别用 create-project
composer create-project 在离线机上必挂,这不是配置问题,是命令设计决定的:它第一步就强制远程解析模板元数据,连本地缓存都不读,COMPOSER_DISABLE_NETWORK=1 对它无效。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 正确做法是在联网机上手动准备骨架:
git clone或解压官方 ZIP,删掉原有composer.lock - 运行:
composer install --no-dev --prefer-dist --no-scripts --no-plugins --optimize-autoloader - 打包整个目录(含
vendor/、composer.lock、composer.json)拷入内网 - 离线机先清缓存:
composer config --global cache-dir /dev/null,再执行带COMPOSER_DISABLE_NETWORK=1的 install - 最后必须补:
composer dump-autoload -o,否则运行时报Class not found
私有源配置容易漏掉 dist.url
只改 repo.packagist 地址没用。composer.lock 里每个包的 dist.url 字段仍是原始 GitHub 或 GitLab 地址,离线时无法下载 ZIP 包。
- 验证真实 ZIP 地址:
composer show monolog/monolog --verbose,看dist.url字段 - 私有源(如 Satis)必须托管 ZIP 文件,并确保 Web 服务能直连 GET,例如
https://pkgs.internal/dist/monolog/monolog/2.10.0/xxx.zip - Nginx 必须声明 JSON MIME 类型:
types { application/json json; },否则 Composer 拒收packages.json - 镜像 URL 必须以
/结尾:"url": "https://pkgs.internal/",少一个斜杠会拼成/packages.json→/packages.json - 项目级
composer.json中的repositories字段才是生效关键,全局配置仅作兜底
离线添加新包只能走 path 仓库
composer require 默认必须联网查包名和版本,离线不可用。唯一安全方式是提前把包放在本地路径,用 "type": "path" 声明。
- 结构示例:
"repositories": [{ "type": "path", "url": "./packages/my-private-package" }] - 目标目录下必须含完整
composer.json,且version字段明确(不能是dev-main) -
composer require my-org/my-private-package:1.2.3才能命中本地路径,否则仍会尝试远程解析 - 注意权限:Docker 构建时若
COPY . /app包含.git,部分installed.json可能记录原始 Git URL,导致离线失败
真正安全的离线,不是“让它尽量不连”,而是“让它连不了”——所有网络出口必须从底层堵死,包括缓存残留、Git 元数据、dist URL 硬编码、以及任何插件可能触发的隐式请求。










