
在线客服系统 源码(PC/H5/软件PHP开源)+搭建方法
开源在线客服系统软件(源码)搭建流程方便快捷,但无法满足容灾、弹性扩展、零宕机升级与负载均衡等需求,主要用于搭建Demo用于展示,与服务对SLA无要求的用户。
通过以下命令,可以全自动地搭建一套完整的客服系统源码最小集群(包含turms-gateway、turms-service与turms-admin)及其依赖服务端(MongoDB分片集群与Redis)。
完整源码:kf.zxkfym.top
git clone --depth 1 /turms-im/turms.git
cd turms
docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
# Or "ENV=dev,demo docker-compose -f docker-compose.standalone.yml --profile monitoring up --force-recreate -d" to run with sidecar services in dev profile
docker-compose -f docker-compose.standalone.yml up --force-recreate
等集群完成搭建后,可以通过localhost:6510 访问turms-admin后台管理系统,并输入账号密码(默认均为turms)。如果登录成功,则说明Turms集群搭建成功。
注意:AWS提供了高性价比的t4g系列EC2实例,但由于t4g系列实例使用了ARM处理器,因此很多应用都无法运行在该类EC2实例上,如bitnami所提供的镜像就均无法运行在该类实例上。如果您想要在ARM处理器上运行docker-compose.standalone.yml,您需要先执行下方指令,在本地编译并安装Loki插件,然后才能运行docker-compose.standalone.yml 由于Loki自身有个Critical级别的Bug(/grafana/loki/issues/2361),即当日志无法送达Loki服务端时,直接Freeze我们的服务,因此我们暂时移除了Loki服务,您目前不需要执行下述命令,也可直接运行docker-compose.standalone.yml:
# Install Go
sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt update
sudo apt install golang-go
# Install Loki
sudo docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
# Build and Enable Loki
git clone https://github.com/grafana/loki.git
cd loki
git checkout "tags/v2.4.1" -b setup
sudo GOOS=linux GOARCH=arm GOARM=7 go build ./clients/cmd/docker-driver
# Replace "
sudo mv docker-driver /var/lib/docker/plugins/
sudo docker plugin enable loki
补充:
配合--profile monitoring(docker-compose -f docker-compose.standalone.yml --profile monitoring up --force-recreate),还可以额外自动搭建Prometheus与Grafana服务端。
客服源码服务端默认使用生产环境配置,不会向控制台打印日志,只会打印日志文件,因此您通过docker logs
如果您通过上述指令,无法启动docker-compose.standalone.yml。则确保服务器的docker-compose版本为1.29.x,docker版本为19.x.x或20.x.x
Turms的Playground环境与网站每次都是通过ENV=dev,demo docker-compose -f docker-compose.standalone.yml --profile monitoring up --force-recreate -d这一条命令自动搭建的。
基于Terraform与docker-compose
(由于客服源码目前并没有提供封装好的镜像,因此仍需要使用docker-compose进行环境搭建)
该方案是在上述docker-compose方案的基础上,引入了客服源码自定义的Terraform模块,以帮助用户自动开通并配置VPC、交换机、安全组与单机ECS抢占式实例。在这台ECS上,Terraform会通过user-data系统初始化脚本,来安装docker-compose与客服源码等服务,并最终启动客服源码单机集群。
具体操作命令如下:
git clone --depth 1 /turms-im/turms.git
cd turms/terraform/alicloud/playground
export ALICLOUD_ACCESS_KEY=
export ALICLOUD_SECRET_KEY=
terraform init
terraform apply
在terraform apply命令执行完毕后,等待约3~15分钟(阿里云ECS拉取ghcr镜像很慢),然后再访问公网IP:6510(公网IP可以通过查看控制台输出的public_ip或查看云服务的ECS控制台获得),如果可以成功访问turms-admin后台管理系统,则表明搭建成功。
基于云服务的集群环境:
适用场景:有容灾、弹性扩展、跨地域部署与负载均衡等需求。该方案提供的各种能力直接与搭建成本挂钩,因此您通常需要修改默认提供的Terraform module配置,以保证配置既能满足您的需求,同时搭建与运维成本最低。
具体操作命令如下:
git clone --depth 1 /turms-im/turms.git
cd turms/terraform/alicloud/cluster
export ALICLOUD_ACCESS_KEY=
export ALICLOUD_SECRET_KEY=
terraform init
terraform apply
该Terraform模块会进行按照互联网应用的常规同城容灾级的部署方案,进行云服务的部署。具体而言包括:
在一个地域内搭建一个VPC,该VPC下开通2台交换机,代表两个可用区
在上述两个可用区内默认部署一套MongoDB分片集群服务,实现同城容灾
在一个可用区内默认部署一套Redis服务
为接收发送给Turms ECS的外网流量,开通SLB服务
为实现Turms ECS的外网访问,开通NAT服务
为turms-gateway、turms-service与turms-admin服务端分别搭建各自的安全组
为turms-gateway服务端,开通无公网带宽的ECS实例(默认数量为1)。通过user-data实现turms-gateway服务初始化与执行,并与上述SLB、NAT、安全组、MongoDB、Redis服务绑定
为turms-service服务端,开通无公网带宽的ECS实例(默认数量为1)。通过user-data实现turms-service服务初始化与执行,并与上述SLB、NAT、安全组、MongoDB、Redis服务绑定
为turms-admin服务端,开通无公网带宽的ECS实例(默认数量为1)。通过user-data实现turms-admin服务初始化与执行,并与上述安全组服务绑定
自此整套Turms基础集群搭建完成(未来还会提供诸如日志分析服务等。
在线客服系统源码服务端启动与关闭的大致流程:
1、启动流程:
连接并校验mongos与Redis服务端。
检测MongoDB是否已建表,如果已经建好表了,则跳过这步。如果没有就进行:建表、添加索引、添加分片键、添加Zones用于冷热数据分离存储。如果开启了MongoDB的Fake数据,则turms-service会自动向MongoDB生成Fake数据,用于开发测试。
对于turms-service服务端,它会检测MongoDB中是否已存在一个角色为ROOT,且账号为turms的超级管理员账号。如果不存在,则会向MongoDB创建一个角色为ROOT、名称为turms与密码为turms.security.password.initial-root-password(默认为:turms)的管理员账号。
注册本地Node节点到服务注册中心,如果注册成功,则拉取并应用集群全局配置,并搭建RPC服务端,用于接收RPC客户端连接。如果失败,则抛异常并退出进程。
开启Admin HTTP服务端,用于接收管理员API请求。另外,对于turms-gateway,还要开启网关服务端(如TCP/WebSocket),用于接收客户端连接与请求。
对于turms-gateway,如果开启了Fake客户端,则生成真实的客户端连接并随机发送真实客户端请求(请求类型随机、请求参数随机),用于开发测试。
至此,服务端启动完毕。
2、关闭流程:
(对于turms-gateway)
拒绝新客户端网络连接与客户端请求
关闭Fake客户端,关闭已建立的客户端会话连接
关闭TCP/UDP/WebSocket客户端服务端,与HTTP管理员API服务端
(对于turms-gateway与turms-service) 4. 关闭黑名单同步机制 5. 关闭集群服务(如RPC网络连接、服务注册与发现服务) 6. 关闭插件机制 7. 发送完Redis/MongoDB客户端请求后,关闭Redis与MongoDB的客户端网络连接 8. 打印完日志,关闭日志服务
至此,服务端关闭完成。


