首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何从零部署PHP在线客服系统源码 - CentOS 完整步骤及Workerman 环境配置

如何从零部署PHP在线客服系统源码 - CentOS 完整步骤及Workerman 环境配置

原创
作者头像
用户12678365
发布2026-08-08 16:24:10
发布2026-08-08 16:24:10
1550
举报

在企业数字化转型中,越来越多的团队选择私有化部署在线客服系统。相比按坐席收费的 SaaS 平台,拥有一套可二开的「在线客服系统源码」,不仅能把客户聊天记录完全掌握在自己手里,还能根据业务灵活接 AI 机器人、CRM 或工单系统。

本文将面向后端开发者和运维人员,手把手教你在一台干净的 CentOS 服务器上,从零部署一套基于 Workerman​ 的高性能 PHP 在线客服系统源码。内容覆盖环境选型、PHP 扩展编译、Workerman 常驻进程配置、Nginx 反向代理以及生产级守护方案,照着做基本可以一次跑通。

源码:zxkfym.top

一、为什么这类客服系统都选 Workerman?

传统的 PHP 客服系统往往用 Ajax 轮询,客户端每隔几秒请求一次服务器,不仅延迟高,还会把服务器 CPU 打满。

而主流的 PHP 在线客服系统源码现在几乎都基于 Workerman(或 Swoole)实现 WebSocket 长连接:

  • 常驻内存:PHP 不再每次请求重新加载框架,性能提升 10 倍以上;
  • 异步 IO:单台 2 核 4G 服务器轻松支撑上万并发连接;
  • 原生支持 WebSocket:浏览器、APP、小程序可同时实时通信;
  • GatewayWorker 模型:天然支持多房间、多客服分组,非常适合客服场景。

这也是为什么你在找源码时,看到 WorkermanGatewayWorker 这两个词,基本可以判断这套代码架构是比较新的。


二、服务器基础环境与准备

1. 服务器规格建议

项目

最低配置

生产推荐

CPU

1 核

2 核及以上

内存

2 GB

4 GB+

系统

CentOS 7.x

CentOS 7.x / Rocky Linux 8

硬盘

40 GB

SSD 50 GB+

⚠️ 注意:Workerman 在 Windows 下仅支持调试,生产环境必须用 Linux。本文以 CentOS 7.9​ 为例。

2. 关闭 SELinux(避免权限坑)

代码语言:javascript
复制
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0

3. 放行端口(非常关键)

客服系统通常需要两个端口:

  • 80/443:访客网页访问
  • 8282(或自定义):WebSocket 服务端口
代码语言:javascript
复制
firewall-cmd --zone=public --add-port=8282/tcp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --reload

如果你用的是阿里云/腾讯云,记得去安全组再放行一次 8282,很多新手卡在这一步。


三、安装 PHP 与 Workerman 必备扩展

1. 安装 EPEL 和 Remi 源(获取新版本 PHP)

CentOS 自带 YUM 里的 PHP 是 5.4,太老,直接淘汰。

代码语言:javascript
复制
yum install -y epel-release
yum install -y https://mirrors.aliyun.com/remi/enterprise/remi-release-7.rpm

启用 PHP 8.1(Workerman 官方推荐 8.0+):

代码语言:javascript
复制
yum-config-manager --enable remi-php81

2. 安装 PHP 及核心扩展

代码语言:javascript
复制
yum install -y php php-cli php-fpm php-mysqlnd \
php-pcntl php-posix php-sockets php-redis \
php-gd php-mbstring php-json php-zip unzip wget git

检查版本:

代码语言:javascript
复制
php -v
# 应显示 PHP 8.1.x

3. 安装 Event 扩展(Workerman 性能核心)

默认的 stream select 在高并发下性能较差,必须装 event

代码语言:javascript
复制
yum install -y php-pear php-devel gcc make
pecl install event

安装完成后,在 php.ini 中加入:

代码语言:javascript
复制
extension=event.so

确认扩展加载成功:

代码语言:javascript
复制
php -m | grep event

四、下载在线客服系统源码

假设你拿到的源码是基于 ThinkPHP + GatewayWorker 的经典结构(市面 90% 商业源码都是这种)。

代码语言:javascript
复制
cd /www/wwwroot
git clone https://gitee.com/your_repo/customer-service.git
# 如果是压缩包
# unzip customer_service.zip
mv customer_service kefu
chown -R www:www kefu
chmod -R 755 kefu

典型目录结构说明

代码语言:javascript
复制
kefu/
├── app/              # 管理后台接口
├── public/           # Web 访客端入口(静态页)
├── vendor/           # Composer 依赖
├── gateway/          # GatewayWorker 服务端
│   ├── start.php     # Workerman 启动入口
│   └── Applications/
│       └── Chat/     # 业务逻辑(消息分发、客服分配)
├── .env              # 数据库配置

五、配置数据库与 Redis

1. 安装 MySQL(以 5.7 为例)

代码语言:javascript
复制
yum install -y mariadb mariadb-server
systemctl start mariadb
mysql_secure_installation

创建数据库:

代码语言:javascript
复制
CREATE DATABASE kefu CHARACTER SET utf8mb4;
CREATE USER 'kefu_user'@'localhost' IDENTIFIED BY 'StrongPassword123';
GRANT ALL ON kefu.* TO 'kefu_user'@'localhost';
FLUSH PRIVILEGES;

导入源码自带的 SQL 文件(一般在 /doc/install.sql):

代码语言:javascript
复制
mysql kefu < /www/wwwroot/kefu/doc/install.sql

2. 安装 Redis

代码语言:javascript
复制
yum install -y redis
systemctl start redis

六、修改源码配置文件

编辑 .envconfig/database.php

代码语言:javascript
复制
return [
    'default' => [
        'host'     => '127.0.0.1',
        'database' => 'kefu',
        'username' => 'kefu_user',
        'password' => 'StrongPassword123',
        'charset'  => 'utf8mb4',
    ]
];

编辑 GatewayWorker 的 config.php,这是 WebSocket 服务的核心:

代码语言:javascript
复制
$gateway = new Gateway("Websocket://0.0.0.0:8282");

// 内部通讯端口
$register = new Register('text://0.0.0.0:1238');

// 心跳设置(防止云服务器断连)
$gateway->pingInterval = 55;
$gateway->pingData = '{"type":"ping"}';

七、启动 Workerman 服务

进入 Gateway 目录:

代码语言:javascript
复制
cd /www/wwwroot/kefu/gateway
php start.php start

看到类似输出表示成功:

代码语言:javascript
复制
Workerman[start.php] start in DEBUG mode
GatewayWorker version: 3.0.x
Websocket server started on 0.0.0.0:8282
Register server started on ...

后台常驻运行

调试阶段用 start,上线一定要用 -d 守护进程:

代码语言:javascript
复制
php start.php stop
php start.php start -d

查看状态:

代码语言:javascript
复制
php start.php status

八、配置 Systemctl 开机自启(生产必做)

不要用 nohup,正规做法是用 systemd。

新建服务文件:

代码语言:javascript
复制
vim /etc/systemd/system/kefu-workerman.service

写入以下内容:

代码语言:javascript
复制
[Unit]
Description=Kefu Workerman Service
After=network.target mysql.service

[Service]
Type=simple
User=www
Group=www
WorkingDirectory=/www/wwwroot/kefu/gateway
ExecStart=/usr/bin/php /www/wwwroot/kefu/gateway/start.php start -d
ExecStop=/usr/bin/php /www/wwwroot/kefu/gateway/start.php stop
Restart=always

[Install]
WantedBy=multi-user.target

启动并设置开机自启:

代码语言:javascript
复制
systemctl daemon-reload
systemctl start kefu-workerman
systemctl enable kefu-workerman

九、Nginx 反向代理(隐藏端口 + 上 HTTPS)

访客不希望连接 wss://ip:8282,我们统一走 443 端口。

代码语言:javascript
复制
server {
    listen 443 ssl;
    server_name kefu.yoursite.com;

    ssl_certificate     /ssl/yoursite.pem;
    ssl_certificate_key /ssl/yoursite.key;

    root /www/wwwroot/kefu/public;
    index index.html index.php;

    # PHP 后台接口
    location ~ \.php$ {
        fastcgi_pass   unix:/run/php-fpm/www.sock;
        fastcgi_index  index.php;
        include        fastcgi.conf;
    }

    # WebSocket 代理
    location /ws/ {
        proxy_pass http://127.0.0.1:8282;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $host;
        proxy_read_timeout 86400;
    }
}

前端 JS 连接地址改为:

代码语言:javascript
复制
var ws = new WebSocket('wss://kefu.yoursite.com/ws/');

十、宝塔面板用户特别注意

如果你用宝塔,步骤基本一致,但有 3 个坑:

  1. PHP 版本切换:宝塔软件商店里直接安装 PHP 8.1,然后在「安装扩展」里勾选 pcntlposixeventredis
  2. 放行端口:宝塔「安全」菜单里也要放行 8282。
  3. 禁用函数:删除 php.ini 中的 shell_execproc_open 禁用,否则 Workerman 启动会报错。

十一、常见问题排查清单

1. 浏览器连不上 WebSocket

  • 检查 wss 还是 ws:HTTP 页面只能连 ws,HTTPS 只能连 wss
  • 检查防火墙 + 云安全组。
  • telnet 127.0.0.1 8282 看服务是否监听。

2. 发送消息不显示

一般是数据库表字符集问题,确保 messages 表是 utf8mb4

3. 负载高了之后掉线

没装 event 扩展,或者 ulimit 太小,执行:

代码语言:javascript
复制
ulimit -n 65535

并在 /etc/security/limits.conf 中永久修改。


十二、性能压测与扩容建议

Workerman 自带压测工具,简单测试:

代码语言:javascript
复制
php start.php status

生产环境建议:

  • 一台机器跑 Gateway,一台跑 BusinessWorker(分布式)。
  • 使用 Redis 存会话,而不是 MySQL。
  • 静态资源(JS/CSS)扔到 CDN。

十三、二次开发方向

拿到这套 在线客服系统源码​ 后,你可以很方便地扩展:

  • 接 AI:在 Chat/Events.phponMessage 里,判断用户消息,调用 OpenAI / DeepSeek API,自动回复。
  • 接工单:消息触发关键词自动创建工单。
  • 多租户:通过 group_id 隔离不同商户的数据。

总结

至此,你已经完成了从零部署 PHP 在线客服系统源码的全部流程。核心记住三点:

  1. Workerman 依赖 CLI 模式,不需要 Nginx 直接跑服务,但要配置好心跳;
  2. Event 扩展 + ulimit​ 决定了并发上限;
  3. Nginx 反代 WebSocket​ 才能优雅地支持 HTTPS 和小程序。

如果你在部署过程中遇到具体的报错日志,可以把 start.php status 的输出贴出来,通常 90% 的问题都在端口或 PHP 扩展上。

私有化客服系统的好处在于“可控”,后续无论是加排队机、满意度评价,还是 AI 自动接待,都只需要改这一份源码——这才是企业级部署的真正价值。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、为什么这类客服系统都选 Workerman?
  • 二、服务器基础环境与准备
    • 2. 关闭 SELinux(避免权限坑)
    • 3. 放行端口(非常关键)
  • 三、安装 PHP 与 Workerman 必备扩展
    • 1. 安装 EPEL 和 Remi 源(获取新版本 PHP)
    • 2. 安装 PHP 及核心扩展
    • 3. 安装 Event 扩展(Workerman 性能核心)
  • 四、下载在线客服系统源码
    • 典型目录结构说明
  • 五、配置数据库与 Redis
    • 1. 安装 MySQL(以 5.7 为例)
    • 2. 安装 Redis
  • 六、修改源码配置文件
  • 七、启动 Workerman 服务
    • 后台常驻运行
  • 八、配置 Systemctl 开机自启(生产必做)
  • 九、Nginx 反向代理(隐藏端口 + 上 HTTPS)
  • 十、宝塔面板用户特别注意
  • 十一、常见问题排查清单
    • 1. 浏览器连不上 WebSocket
    • 2. 发送消息不显示
    • 3. 负载高了之后掉线
  • 十二、性能压测与扩容建议
  • 十三、二次开发方向
  • 总结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档