ubuntu部署workerman 5.2.3需确保php 7.2–8.1环境、启用pcntl/posix扩展,通过composer安装,编写start.php并以php start.php start -d启动,生产环境建议配置event扩展、worker内初始化db、开放防火墙端口及使用systemd守护。

Ubuntu系统部署Workerman 5.2.3,核心是确保PHP环境合规、扩展就位、框架引入正确,且启动方式符合其常驻进程模型。Workerman 5.2.3 是稳定版,兼容 PHP 7.2–8.1(官方推荐 PHP 7.4 或 8.0),不依赖 Nginx/Apache,直接监听端口运行。
确认并准备PHP运行环境
Workerman 对底层扩展有硬性要求:必须启用 pcntl 和 posix,这是多进程管理的基础。缺一则只能单进程运行,无法用于生产。
- 检查当前PHP版本和已加载扩展:
php -v和php -m | grep -E "pcntl|posix" - 若缺失,用 apt 安装(Ubuntu 22.04/20.04):
sudo apt update && sudo apt install php-cli php-pcntl php-posix - 如使用源码编译的PHP,需重新编译时加上
--enable-pcntl --enable-posix
安装Workerman 5.2.3代码包
Workerman 是纯 PHP 库,无二进制依赖。推荐两种方式,**优先使用 Composer**(便于版本锁定与自动加载):
Ubuntu 26.04 LTS(代号“Resolute Raccoon”)是Canonical于2026年4月23日发布的下一代长期支持版操作系统,提供长达10年的技术支持。它搭载Linux 7.0内核与GNOME 50桌面环境,全面转向Wayland协议,并引入Rust重写的核心工具以增强安全性。官方提供适用于AMD64和ARM64架构的桌面及服务器ISO镜像,是追求前沿技术与极致稳定的开发者
- 在项目根目录执行:
composer require workerman/workerman:5.2.3
成功后,vendor/下会生成workerman/workerman目录,并自动注册 autoload - 若因网络原因无法使用 Composer,可手动下载:
wget https://github.com/walkor/Workerman/archive/refs/tags/v5.2.3.zipunzip v5.2.3.zip && mv Workerman-5.2.3 Workerman
然后在脚本中require_once 'Workerman/Autoloader.php';
编写并运行一个基础服务
以 WebSocket 服务为例,新建 start.php:
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php'; // Composer 方式
// 或 require_once __DIR__ . '/Workerman/Autoloader.php'; // 手动方式
$worker = new Worker('websocket://0.0.0.0:8080');
$worker->count = 4; // 启动4个进程(根据CPU核心数调整)
$worker->onMessage = function($connection, $data) {
$connection->send('Received: ' . $data);
};
// 必须调用此方法启动
Worker::runAll();
- 保存后执行:
php start.php start(开发环境)或php start.php start -d(守护进程模式) - 验证是否运行:
php start.php status或ps aux | grep start.php - 注意:不要用
php start.php直接运行(无参数),那只是前台阻塞,退出终端即终止服务
生产环境补充建议
上线前需关注几个关键点,避免常见故障:
-
并发连接高时(>1000):建议安装
event扩展提升I/O性能:sudo apt install libevent-dev && sudo pecl install event,再在php.ini中添加extension=event.so -
数据库连接:切勿在全局作用域创建 MySQL 实例;务必放在
$worker->onWorkerStart回调中初始化,防止子进程共享连接句柄 -
防火墙放行端口:如监听 8080,则执行
sudo ufw allow 8080 -
进程守护:可用
systemd管理服务启停与崩溃自启,避免仅靠 screen/nohup 运维










