Workerman 5.2.3 无官方离线包,需在外网用 PHP ≥8.0 和 Composer 2.x 执行 composer create-project 生成含 vendor/、composer.lock、start.php 的完整目录,内网部署前须验证 PHP 版本、pcntl/posix/sockets 扩展及 proc_open() 函数可用性。

Workerman 5.2.3 没有官方离线安装包,所谓“离线安装”本质是在外网环境完整构建后再整体迁移。关键不是下载 ZIP,而是打包带锁依赖的可运行项目目录。
一、在外网机器上准备完整可离线项目
确保外网机器 PHP 版本 ≥ 8.0(Workerman 5.x 强制要求),并安装 Composer 2.x:
- 执行:composer create-project workerman/workerman myapp --stability=stable --no-dev
- 进入 myapp 目录,确认 vendor/ 已生成,且包含
workerman/workerman及其全部运行时依赖(如react/promise、evenement/evenement等) - 检查两个核心文件是否存在且内容完整:composer.lock 和 vendor/composer/installed.json —— 缺一不可,它们是离线加载类和版本一致性的唯一依据
- 你的启动脚本(如
start.php)必须放在项目根目录,并确保能直接php start.php start运行成功
二、打包与传输要点
只打包以下内容,其余均可剔除:
- vendor/ 整个目录(含 autoload.php)
- composer.lock
- 你的启动入口文件(如
start.php) - 如有自定义配置或业务代码,一并放入同一级目录
- 不要打包 composer.phar、node_modules、.git、tests 或任何开发依赖目录
三、内网服务器部署前必检项
进内网后,别急着启动,先逐项验证基础环境:
- 运行 php -v,确认版本 ≥ 8.0
- 运行 php -m | grep -E 'pcntl|posix|sockets',三个扩展必须全部出现(Windows 不支持 pcntl,需改用
Worker::$processType = 'thread') - 单行快速验证:php -r "echo extension_loaded('pcntl') && extension_loaded('posix') ? 'ok' : 'fail';"
- 检查 proc_open() 是否被禁用:运行 php -r "var_dump(function_exists('proc_open'));",返回
bool(true)才安全
四、常见离线启动失败原因与对策
报错 No such file or directory 多数不是路径问题,而是进程创建失败:
- 若
proc_open()返回 false → 检查 php.ini 中是否禁用了该函数(disable_functions列表) - 若提示
Class 'Workerman\Worker' not found→ 90% 是 pcntl/posix 未启用,而非 vendor 缺失 - 启动时卡住无输出 → 检查是否在 root 用户下运行(部分系统限制非 root 启动端口
- 使用 php start.php start -d 后无法 stop/reload → 确保
start.php中未修改Worker::$pidFile路径,且目录可写

















