composer 不支持软路由环境,因其无网络路由功能且软路由资源受限、缺php扩展;正确做法是在开发机执行 composer install --no-dev --optimize-autoloader 后,将精简 vendor 目录同步至软路由。

Composer 本身不支持“软路由环境”这种说法——它没有网络路由概念,也不处理 HTTP 请求转发。如果你在软路由(如 OpenWrt、Padavan、iStoreOS)上想用 Composer 安装 PHP 包,核心问题是:软路由通常资源受限、无完整 PHP 运行环境、且默认不带 curl / openssl / phar 支持,直接运行 composer install 几乎必然失败。
为什么软路由上不能直接跑 Composer
软路由设备(如 MT7621 芯片的路由器)通常只有 64–128MB RAM、Flash 空间紧张,官方固件几乎从不预装 PHP 或 Composer。即使你手动编译安装了 PHP,也大概率缺失以下关键扩展:
-
openssl(否则无法验证 Packagist HTTPS 证书,报错SSL operation failed) -
zlib(解压.tar.gz包失败,Failed to extract vendor/package) -
phar(Composer 自身是 Phar 包,没它连composer.phar都加载不了) -
json和mbstring(解析composer.json时直接 fatal error)
正确的做法:在开发机上完成 install,再同步到软路由
别在路由器上执行 composer install。你应该把依赖“离线准备好”,只把最终的 vendor/ 目录或扁平化后的可部署包拷过去。实操要点:
当代理已经知道网站路由或内容URL,并且在启动前需要有效的sitemap XML、sitemap索引或robots.txt引用时,请使用sitemap。这是一个发布构件技能,而不是爬虫或SEO平台。
- 确保开发机(Linux/macOS/WSL)PHP 版本 ≥ 项目要求的最低版本(查看
composer.json中的"php": "^8.1") - 运行
composer install --no-dev --optimize-autoloader --ignore-platform-reqs(跳过 dev 依赖、生成高效 autoload、绕过软路由缺失扩展的检查) - 确认
vendor/autoload.php可被正常 require;若项目用 PSR-4,检查composer dump-autoload -o是否已优化 - 打包时排除
vendor/bin/、.git/、tests/等非运行必需内容,减小体积 - 用
rsync或 SFTP 把精简后的vendor/+ 项目代码推送到软路由的/www/或/mnt/sda1/www/下(路径取决于你的 Web 服务配置)
如果非要让 Composer 在软路由上“能跑起来”
极少数场景(比如你要在路由器上动态更新某个监控脚本的依赖),需手动补全运行环境。以 OpenWrt 23.05 + PHP 8.2 为例:
- 先装基础依赖:
opkg update && opkg install php82-cli php82-curl php82-openssl php82-zlib php82-phar php82-json php82-mbstring - 下载最新
composer.phar到/usr/bin/composer,并加执行权限:chmod +x /usr/bin/composer - 强制指定 CA 证书路径(否则 HTTPS 失败):
export SSL_CERT_FILE="/etc/ssl/certs/ca-certificates.crt",并写入/etc/profile - 临时增大内存限制(防止 OOM):
php -d memory_limit=256M /usr/bin/composer install - 注意:
vendor/默认会写入当前目录,而软路由的/tmp是内存盘,重启即丢——务必用-d vendor-dir=/mnt/sda1/vendor指向外接存储
真正麻烦的不是路径配置,而是软路由上 PHP 扩展链的完整性。一个 ext-xml 缺失,就可能让 symfony/console 初始化失败;mbstring 不可用,monolog 日志写入直接报错。与其反复调试,不如接受“构建与运行分离”这个事实:路由器只负责运行,不负责构建。










