核心是提前下载依赖并打包,服务器上通过 composer install --no-interaction --no-progress --prefer-dist 离线安装,依赖 composer.lock 文件和本地 vendor 或 archive 包,禁用远程请求。

如何让 composer install 不连外网
核心是提前把所有依赖下载好、打包带过去,服务器上不触发任何远程请求。Composer 本身不支持“离线安装”,但能通过缓存 + 锁定 + 离线镜像三步绕过网络。
常见错误现象:composer install 卡在 Downloading https://packagist.org/packages.json,或报错 Could not fetch https://repo.packagist.org/...;用 --no-install 或 --no-scripts 也无效——因为默认仍要读取远程元数据。
- 必须在有网环境先执行完整
composer install --no-dev(或带上--optimize-autoloader),生成完整的vendor/和composer.lock -
composer.lock必须提交进代码库,且不能被 .gitignore 排除——这是离线安装的唯一依据 - 服务器上运行
composer install --no-interaction --no-progress --prefer-dist,加上--ignore-platform-reqs(如果 PHP 版本不匹配)
为什么 composer update 在内网一定失败
它本质是动态查询 Packagist 元数据并重新解算依赖树,没有缓存能绕过这一步。只要没配本地仓库,就必然连 repo.packagist.org。
使用场景:仅限开发机更新依赖;生产服务器严禁运行 composer update,哪怕加了 --offline 也不行——这个 flag 只跳过部分检查,不阻止元数据拉取。
-
--offline实际只禁用插件和某些 HTTP 请求,update仍会尝试访问packages.json - 想在内网“模拟 update”,只能在有网机器上跑完
composer update,再同步新的composer.lock和vendor/ - 若需定期更新,建议用 CI 流水线自动生成 vendor 包,而不是让运维手动操作
用 composer archive 打包比直接 rsync vendor/ 更可靠
直接拷贝 vendor/ 看似简单,但容易漏掉 composer/autoload_*.php 或因符号链接、权限、.git 目录引发问题;而 archive 是 Composer 官方提供的打包方式,只含运行时必需文件。
自定义设置的程度更高可以满足大部分中小型企业的建站需求,同时修正了上一版中发现的BUG,优化了核心的代码占用的服务器资源更少,执行速度比上一版更快 主要的特色功能如下: 1)特色的菜单设置功能,菜单设置分为顶部菜单和底部菜单,每一项都可以进行更名、选择是否隐 藏,排序等。 2)增加企业基本信息设置功能,输入的企业信息可以在网页底部的醒目位置看到。 3)增加了在线编辑功能,输入产品信息,企业介绍等栏
性能 / 兼容性影响:打包后体积更小(剔除测试、文档、.git),解压后无需再运行 install,适合容器镜像或批量部署。
- 在有网机器执行:
composer archive --format=zip --file=myapp-v1.2.0 - 生成的 zip 解压后,目录结构与
vendor/一致,可直接替换线上 vendor - 注意:该命令不包含项目源码,只打包 vendor;需另外同步你的代码
遇到 ext-xxx 扩展缺失报错怎么办
这不是网络问题,而是 PHP 环境缺失扩展,但常被误认为“离线导致安装失败”。composer install 会校验平台要求(如 ext-gd),即使 vendor 已存在也会中断。
容易踩的坑:加了 --ignore-platform-reqs 后看似成功,但运行时报 Class 'GDImage' not found——因为扩展真没装。
- 先在目标服务器确认已启用所需扩展:
php -m | grep gd - 若扩展未安装,需用系统包管理器安装(如
apt install php-gd),不是 Composer 能解决的 - 临时跳过检测只用于验证流程,上线前必须补全扩展,否则 runtime 崩溃
真正麻烦的不是怎么断网安装,而是确保那台服务器的 PHP 版本、扩展、OPcache 配置和开发环境一致——这点比网络更难复现。









