部署workerman 5.2.3到宝塔需满足php≥7.4且启用pcntl/posix/sockets扩展、禁用disable_functions中的proc_open;项目须独立于网站目录,启动文件调用worker::runall();必须用supervisor守护(非-d参数单独运行),并开放对应端口及云服务器安全组。

要部署 Workerman 5.2.3 服务到宝塔面板,关键不是“安装 Workerman”,而是让 PHP 环境能运行它,并用守护进程确保长期稳定运行。Workerman 是纯 PHP 编写的异步框架,不依赖 Web 服务器(如 Nginx),但需 PHP 支持特定扩展、正确权限和进程管理。
以下是清晰、可落地的操作步骤:
确保 PHP 环境满足最低要求
Workerman 5.2.3 要求:
- PHP ≥ 7.4(推荐 7.4–8.2,不支持 PHP 8.3+)
- 必装扩展:
pcntl、posix、sockets(缺一不可) -
proc_open函数不能被禁用(检查 PHP 配置中disable_functions是否含该函数)
操作路径:
宝塔 → 软件商店 → 找到已安装的 PHP 版本(如 PHP 7.4)→ 点击【设置】→ 【安装扩展】→ 勾选 pcntl、posix、sockets → 安装完成
再点【配置修改】,搜索 disable_functions,删掉 proc_open(如有),保存并重启 PHP
创建独立的 Workerman 项目目录
不要把 server.php 放在网站根目录下(如 /www/wwwroot/xxx),避免被 Web 服务器误解析或权限干扰。
推荐路径:/www/workerman/myapp/(自定义名,与网站目录隔离)
上传或编写你的启动文件,例如:/www/workerman/myapp/server.php
内容需包含 Workerman 5.2.3 的标准写法(注意命名空间和类引用):
<?php use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once '/www/wwwroot/myproject/vendor/autoload.php'; // 指向你 Composer 的 autoload
$worker = new Worker('websocket://0.0.0.0:2346');
$worker->count = 2;
$worker->onMessage = function(TcpConnection $connection, $data) {
$connection->send('Hello from Workerman 5.2.3');
};
Worker::runAll();
✅ 提示:确认
vendor/autoload.php路径真实存在;若用composer create-project workerman/workerman初始化,需先在该目录执行composer install
使用 Supervisor 守护进程(强烈推荐)
Workerman 进程退出后不会自动重启,必须用进程管理器。宝塔自带 Supervisor(软件商店中安装即可)。
操作步骤:
宝塔 → 软件商店 → 搜索 “Supervisor” → 安装
安装后 → 进入 Supervisor 管理页 → 【添加进程】
填写:
- 名称:
my-workerman-app - 启动命令:
/usr/bin/php /www/workerman/myapp/server.php start -d - 运行目录:
/www/workerman/myapp - 用户:
www(保持与网站一致,避免权限问题) - 自启动:✅ 开启
点击提交后,状态显示 “RUNNING” 即成功。
开放并验证端口
Workerman 默认监听非标准端口(如 2346),需手动放行:
- 宝塔 → 安全 → 放行端口 → 输入
2346→ 添加 - 云服务器厂商控制台(如阿里云/腾讯云)安全组中,同样开放
2346/tcp入方向
验证是否监听成功:
终端执行
netstat -tuln | grep :2346
看到 LISTEN 表示服务已启动。
(可选)反向代理接入 Web 域名(如 ws.mydomain.com)
若前端需通过域名连接 WebSocket,不建议直接暴露 IP+端口。可在宝塔中:
- 创建新站点(如
ws.mydomain.com) - 网站设置 → 反向代理 → 添加
- 目标URL:
http://127.0.0.1:2346 - 开启 Websocket 支持(勾选“启用 Websocket”)
- 目标URL:
- 申请 SSL 证书(支持
wss://)
这样前端可安全使用 wss://ws.mydomain.com 连接。
不复杂但容易忽略











