CooCare 4 通讯服务器部署手册 - housekeeper-software/coocare GitHub Wiki
组件简介
IM 消息服务器
镜像名称: commserver_v4:latest
应用协议: v1,v2,v3
登录方式: tcp,ws, wss
OS: debian 10/11, X64
内存 >= 4G
CPU核心 >=4
带宽 >= 8M
VNC中转服务器
镜像名称:relayserver_v4:latest
OS: debian 10/11, X64
内存 >= 4G
CPU核心 >=4
带宽 >= 12M
部署准备工作
根据上述要求购买云主机,然后从svn 将 im/distribution/compose目录传到服务器上
IM 服务器构建基础系统环境
准备系统环境的脚本在 compose/basic目录
1) 将有效的数字证书放在 cert目录下,名字改为 coocare.pem
2) chmod +x init.sh
3) ./init.sh
此部署如果成功完成,则系统中将会包含:
docker, docker-compose,haproxy
并创建了虚拟网络,登录镜像仓库等
中转服务器构建基础系统环境
准备系统环境的脚本在 compose/basic目录
1) 将有效的数字证书放在 cert目录下,名字改为 coocare.pem
2) chmod +x init.sh
修改 init.sh:
apt-get -y install apt-utils gnupg2 ca-certificates procps net-tools wget curl vim unzip tcpdump haproxy(去掉 haproxy)
/* 如下三句话去掉 */
mkdir -p /etc/cert
cp cert/coocare.pem /etc/cert/coocare.pem
docker network create --driver bridge --subnet 172.10.0.0/16 --gateway 172.10.0.1 coocare
安装 mongodb
docker-compose.yml位于 compose/mongodb 目录
如果要修改用户名和密码,则编辑 docker-compose.yml文件直接修改即可。
默认端口为 27017,一般不需要在云主机防火墙中放开这个端口,一般是本机访问或者内网访问
cd compose/mongodb
docker-compose up -d
完成
这里需要注意:可以通过 mongodb url 设置连接池,方法是:在url末尾添加: ?maxPoolSize=10
这里的数字应当 >= 配置文件中的taskThreadCount数目。
通讯服务器使用的是 mongodb-c-driver 最新版,可以支持 mongodb 8。
安装 IM 通讯服务器镜像
脚本位于 compose/im/lite目录下
在conf目录下,修改 commserver.json,主要修改 mongodb的一些配置
修改 env 文件,设置redis服务器地址等。
执行 : cp env .env
执行: chmod +x init.sh
./init.sh
之后: docker-compose up -d
完毕
如果版本有更新,在构建系统处理好之后,进入 compose/im/lite,
执行 ./update.sh 即可完成镜像更新
安装 vnc 中转服务器
脚本位于 compose/relayserver
chmod +x init.sh
./init.sh
docker-compose up -d
完成
配置文件
IM 配置文件
配置位于 compose/im/lite/conf/commserver.json
{
"serverId":"lite-prod", #服务器id
"logLevel":2, #日志等级,生产环境=2即可
"logToFile":false, #是否将日志写入文件,生成环境可不写
"forcePush":true, #强制推送,目前用不到
"connThreadCount":10, # tcp线程数,
"websocketThreadCount":2, # ws线程数,因为DL的登录方式是ws,但连接很少,一般这里写2个即可,满足工程师登录和web登录
"taskThreadCount":10, # 任务线程数
"bossTcpPort":10888, # TCP 登录端口
"pushUrl":"", # 推送地址,目前没用到
"disableCrypto":false, # 禁用加密,目前强制加密
"heartbeat":{
"heartbeatTimeoutMs":300000, # tcp心跳超时,毫秒单位
"timingWheelGranularity":10
},
"redis":{ # redis连接设置
"host":"192.168.180.70",
"port":6379,
"password":"ssc82893388",
"index":0
},
"mongodb":{ # mongodb连接设置,如果是阿里云地址,则在后面加上 ?maxPoolSize=xx,这里的xx是 taskThreadCount一样
"url":"mongodb://root:[email protected]:27017/?maxPoolSize=10",
"dbName":"coocare_test", # 数据库名称
"setName":"HPDL", # 集合名称
"expire_after_seconds":604800, # 消息过期时间,秒单位
"limit":100 #登录时获取离线消息最大数目
},
"websocket":{ # websocket设置
"protocol":"ws",
"assetsDir":"",
"certsDir":"",
"privateKeyPassword":"",
"port":10889, #这里是侦听端口
"options":0,
"pingIntervalSec":30,
"hangupIntervalSec":100
}
}
注意docker-compose.yml 中的设置会覆盖上述配置
relayserver的配置
配置位于: compose/relayserver/conf/relayserver.json
{
"logLevel":2, # 生产环境=2
"logToFile":false, #生产环境不要将日志写入文件
"packetHeaderSize":32, # token的长度
"connThreadCount":10, #线程数
"sessionTimeoutMs":300000, #会话等待超时时间,毫秒单位
"bossTcpPort":18888 # 侦听端口
}
IM docker-compose.yml中的配置
version: '3.1'
services:
commserver:
image: xxxx/commserver_v4:latest
restart: always
container_name: "commserver"
privileged: true
ports:
- "20888:16888" #tcp listen port
- "20889:16889" #ws listen port
volumes:
- /data/coocare/commserver/etc:/app/etc
- /data/coocare/commserver/log:/app/log
- /etc/localtime:/etc/localtime
- /etc/resolv.conf:/etc/resolv.conf
environment:
- "TZ=Asia/Shanghai"
- COOCARE_SERVER_ID=lite-prod # override commserver.json
- COOCARE_REDIS=${REDIS} # override commserver.json
- COOCARE_PUSHURL=${PUSHURL} # override commserver.json
- COOCARE_CONNECT_THREAD=8 # override commserver.json
- COOCARE_WEBSOCKET_THREAD=2 # override commserver.json
- COOCARE_TASK_THREAD=10 # override commserver.json
- COOCARE_HEARTBEAT=300000,10 # override commserver.json
- COOCARE_FORCEPUSH=true # override commserver.json
- COOCARE_WEBSOCKT_CONF=${WEBSOCKET} # override commserver.json
networks:
default:
ipv4_address: 172.10.0.14
networks:
default:
external:
name: coocare
其他
因为 docker-compose.yml中的配置会覆盖默认配置,最终生成的配置可以在如下目录查看
/data/coocare/commserver/log/current.json
/data/coocare/commserver/log/commserver_restart.txt --- 容器重启日志
/data/coocare/commserver/log/message_statistics.txt --- 容器每日0点记录前面24小时收到的工程师和用户的消息总数
/data/coocare/relayserver/log/ 是relayserver的日志位置
命令行
所有容器都支持两个 --cmd=free,--cmd=report
--cmd=free: 强制释放内存
--cmd=report: 报告进程内部状态
对于 im 服务器:
docker exec -it commserver ./commserver --cmd=report
显示:
output: {
"activeConnections": 50100.0, #总计有多少个在线连接,包含工程师
"activeEngineers": 100.0, #总计有多少个在线工程师
"subscribers": 0.0, # 总计有多少用户订阅了工程师状态
"totalEngineerRecvMessage": 5e+07, #总计工程师收到了多少条消息,自容器启动以来
"totalUserRecvMessage": 1e+07 #总计用户收到了多少条消息,自容器起来以来
}
对于 relayserver服务器:
docker exec -it relayserver ./relayserver --cmd=report
显示:
output: {
"activeSession": 0, #当前活跃的会话,就是有多少对远程桌面
"totalSession": 3 # 自容器启动以来,总计有多少个会话
}
--cmd=free,最好在用户比较少的时候用,因为tcmalloc 会锁住所有内存
升级服务器
每台服务器应当复制 compose/im/lite/update.sh 到本机某个地方
升级时,执行 ./update.sh即可完成,无需其他操作。
负载均衡配置
总体而言负载均衡无需配置,因为 compose中已经配置好了,主要看如下三个部分:
listen tcp-16888
bind 0.0.0.0:16888
balance roundrobin
mode tcp
stats enable
option tcplog
log global
server s1 127.0.0.1:20888 weight 1 maxconn 200000 check send-proxy
listen wss-16889
bind 0.0.0.0:16889 ssl crt /etc/cert/coocare.pem
mode http
option http-keep-alive
stats enable
option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户ip
log global
maxconn 200000
balance roundrobin
server websrv1 127.0.0.1:20889 check
listen ws-16990
bind 0.0.0.0:16990
mode http
option http-keep-alive
stats enable
option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户ip
log global
maxconn 10000
balance roundrobin
server websrv1 127.0.0.1:20889 check
最终部署方案
VNC中转服务器
主机:规格: ecs.e-c1m2.large(2vcpu,4G),debian 10,40G,4M基础带宽,1520/年
容器部署,无需外部数据库,也不需要负载均衡
IM服务器(所有服务器在同一个区,同一个子网下)
redis 从阿里云购买,规格:
标准版,单可用区,redis 7.0,不启用集群,分片规格2GB,分片数量1,读写分离(关闭),内网带宽要调整到最高,1000多/年
mongodb 与 IM 服务器装在一起
IM虚拟主机:规格:
ecs.e-c1m2.2xlarge(8vcpu,16GB), debian 10,ESSD(100G),带宽4M ~5000/年