8、FinChat 部署手册
-
1、服务部署说明
1.1 安装配置docker,优化内核参数
每台宿主机(Ubuntu16.04/centos7通用)均需执行以下命令安装配置docker,以及优化内核参数,或者下载到本地检查完脚本后安装.
curl
-fsSL "https://static.finogeeks.club/deploy/setup_docker.sh" | bash在服务对应标签宿主机新建目录并授权
rm -rf /mnt/data/dendrite/ && mkdir -p /mnt/data/dendrite/{kafka,elasticsearch,minio,pg-master,pg-slave,zookeeper,mongo/db,es/{data,logs}} && chmod 777 -R /mnt/data/dendrite/
FinChat的服务编排文件是基于Rancher2.x的Kubernetes进行服务编排,因此在部署FinChat的后台服务之前,需要先安装好Rancher2.x的基础环境。具体的安装方法可以参考Rancher的官方文档(https://rancher.com/docs/rancher/v2.x/en/installation/ha/)。
- Rancher server 自有证书单点部署
docker run -d --restart=unless-stopped \ -p 8080:80 -p 4430:443 \ -e AUDIT_LEVEL=3 \ -v /mnt/data/rancher-server/ssl/ssl.pem:/etc/rancher/ssl/cert.pem \ -v /mnt/data/rancher-server/ssl/ssl.key:/etc/rancher/ssl/key.pem \ -v /mnt/data/rancher-server/ssl/ssl.ca.pem:/etc/rancher/ssl/cacerts.pem \ -v /mnt/data/rancher-server/data/:/var/lib/rancher \ -v /mnt/data/rancher-server/auditlog:/var/log/auditlog \ rancher/rancher:v2.2.3
- Rancher server 自动创建ssl证书单点部署
docker run -d --restart=unless-stopped \ -p 8080:80 -p 4430:443 \ -e AUDIT_LEVEL=3 \ -v /mnt/data/rancher-server/data/:/var/lib/rancher \ -v /mnt/data/rancher-server/auditlog:/var/log/auditlog \ rancher/rancher:v2.2.3
1.1.1服务简易部署流程
rancher2.x上部署finochat顺序 global 新增helm库的catalog 新增docker镜像仓库账号 project ->resources -> registries 对节点打标签 部署有状态服务,依照以下顺序部署 4.1 在服务对应标签宿主机新建目录并授权 rm -rf /mnt/data/dendrite/ && mkdir -p /mnt/data/dendrite/{kafka,elasticsearch,minio,pg-master,pg-slave,zookeeper,mongo/db,es/{data,logs}} && chmod 777 -R /mnt/data/dendrite/ 4.2 部署zookeeper 4.3 部署kafka 4.4 部署storage -> mongo(namespace选择storage) 4.5 部署codis(测试环境用主从,生产环境用redis-cluster) 4.6 部署业务服务-chat->platform->auth->adapter->gateway->efk->bigdata-search 4.7 导入账号,规则
Rancher 详细部署流程
帆信整套后台服务需要用到的数据库服务包括Postgres、MongoDB、Redis等数据库服务。
配置Docker仓库和Rancher Catalog
1)在每一台宿主机上登入Docker 私有仓库,docker
login docker.finogeeks.club 。如果在登录失败,请联系我们的对接人员。
2)点击 Catalogs,Add Catalog,填写我们提供的Catalog 地址,关闭Rancher默认的Library。
3)新建一个环境后, 点击Resources,添加自定义的 Docker Registry 。
1.2 部署数据存储基础服务
数据存储、Kafka、Zookeeper、ElasticSearch涉及的Docker容器,会持久化数据到宿主机的/mnt/data目录下,目前凡泰应用数据需要存储的数据都会映射到本地磁盘目录。
1.2.1数据存储
数据存储基础服务包括Postgres数据库服务,Mongo数据库服务,Minio对象存储服务。
Postgres提供主从复制,Postgres的主从复制流程如下:
在部署Postgres时,需要先准备2台物理机器,2台机器的物理硬盘要尽可能的大些。在1台机器上设置label:“finochat.pg-master=yes”, 在另外1台机器上设置label:“finochat.pg-slave=yes”。凡泰提供Postgres主从之间的复制采用异步复制的方式。MongoDB提供的是Replica Sets模式(副本集)。MongoDB官方目前已不推荐使用主从模式,取而代之的是副本集模式。副本集其实是一种互为主从的关系,可理解为主主模式。副本集将数据复制,多份保存,不同服务器保存同一份数据,在出现故障时自动切换。副本集比传统的Master-Slave主从复制有改进的地方就是它可以进行故障的自动转移,如果我们停掉副本集的一个成员,那么剩余的成员会再自动选举为一个成员,作为主库。
在部署MongoDB时,需要先准备三台机器,在每台机器上设置label: “mongo.env=yes”,用于调度MongoDB服务。(备注:三台机器部署MongoDB服务)。Minio作为底层的对象存储,在部署Minio集群时,需要准备4台机器,每台机器上设置label: “minio.env=yes”,用于调度Minio集群服务。
Storage的catalog提供了Postgres, Mongo,Minio这个三个基础存储服务。在设置完主机的调度标签后,接下来我们开始部署基础的数据库存储服务。
在Rancher的管理界面中点击catalog中选择“storage”这个Stack, 点击“View Details”进入到这个Stack的详细信息页面,在“Template Version”选择“1.0.0”版本,选择后会弹出storage服务的具体配置信息:
storage的配置参数可以保持默认提供的即可,点击“Launch”进行部署。storage服务部署成功后,可以看到如下的服务列表:
至此,基础的存储服务已经部署好了。
1.2.2部署Redis
Redis数据库主要提供一个缓存数据功能,Chat 服务中会使用Redis进行热点数据的缓存,接下来说明如何部署一套Redis集群服务。
在Rancher的管理界面中点击catalog中选择“redis-cluster”这个Stack, 点击“View Details”进入到这个Stack的详细信息页面,在“Template Version”选择“1.0.0”版本,选择后会弹出Redis cluster服务的具体配置信息:
Redis的配置参数可以根据默认的即可,点击“Launch”进行部署。Redis服务部署成功后,可以看到如下的服务列表:
1.2.3 部署Kafka服务
Kafka作为消息队列的中间件服务,FinChat聊天服务基于Kafka作为消息总线,而Kafka依赖于Zookeeper存储Broker、主题和分区等元数据信息。
在部署zookeeper和Kafka之前,需要先对主机设置调度标签。在三台要署kafka的机器上添加label: “zookeeper.env=yes” 和 “kafka.env=yes”,用于调度Kafka 和Zookeeper服务。
在Rancher的管理界面中点击Catalog Apps 中选择“zookeeper”这个Stack, 点击“View Details”进入到这个Stack的详细信息页面,在“Template Version”选择“1.0.0”版本,选择后会弹出Zookeeper的集群配置信息:
Zookeeper的Catalog默认提供的是3个节点的集群,默认的数据存储是挂载到“/mnt/data/volumes/zookeeper”的文件夹下,如果需要修改挂载的路径,可以根据实际情况进行配置,点击“Launch”进行部署。
zookeeper服务部署成功后,接下来可以开始部署Kafka集群。在Rancher的管理界面中点击Catalog Apps 中选择“kafka”这个Stack, 点击“View Details”进入到这个Stack的详细信息页面,在“Template Version”选择“1.0.0”版本,选择后会弹出Kafka的集群配置信息:
需要特别注意的是,Kafka这里配置了连接Zookeeper 的服务地址,这里通过Rancher 的ServiceName.NameSpace:Port方式进行访问,默认情况下,部署的是zookeeper的NameSpace,点击“Launch”进行部署。Kafka服务部署成功后,可以看到如下的详细列表:
1.2.4 部署efk
Efk用于收集存储展示docker容器标准输出的日志,其中elasticsearch用于存储日志,fluent-bit用于收集日志,kibana用于展示日志.在部署efk时,需要先准备三台机器,在每台机器上设置label: “elasticsearch.env=yes“,用于调度efk服务。
1.2.5 搜索服务
搜索服务是无状态服务,直接通过helm部署。
1.3部署帆信基础服务
帆信基础服务主要是提供聊天相关的平台级功能,作为整个帆信的服务总线。在部署之前,需要先准备好server的域名,以及苹果推送服务的APNs证书文件。准备若干台服务器(具体数量和部署规模相关),用来部署帆信基础服务,其中至少一台要有访问外网的权限,用于苹果消息推送。
在Rancher的管理界面中点击Catalog Apps中选择“chat”这个Stack, 点击“View Details”进入到这个Stack的详细信息页面,在“Template Version”选择“1.0.0”版本,选择后会弹出Chat服务的具体配置信息:
chat涉及的配置参数比较多,具体各个参数的含义如下:
需要注意的是MEDIA_UPLOAD_URL和MEDIA_THUNBNAIL_URL以及MEDIA_DOWNLOAD_URL这几个地址是对接的网盘URL的地址,默认情况下不需要进行修改;确认上述的配置信息准确无误后,点击“Launch”进行部署。chat服务部署成功后,可以看到如下的详细列表:
网关服务提供FinChat的所有访问入口,该服务主要提供服务的路由、路由配置初始化和一个可视化的管理面板,查看当前gateway的路由配置信息。
在Rancher的管理界面中点击Catalog Apps中选择“gateway”这个Stack, 点击“View Details”进入到这个Stack的详细信息页面,在“Template Version”选择“1.0.0”版本,选择后会弹出gateway服务的具体配置信息:
确认上述的配置信息准确无误后,点击“Launch”进行部署。服务部署成功后,可以看到如下详细的列表:
gateway服务部署成功后,接下来继续部署platform相关的服务。在Rancher的管理界面中点击Catalog Apps中选择“platform”这个Stack, 点击“View Details”进入到这个Stack的详细信息页面,在“Template Version”选择“1.0.0”版本,选择后会弹出platform服务的具体配置信息:
需要注意的是这里AS token 和HomeServer Token 以及Id需要和chat 的Stack中的配置信息保持一致,否则msg-bridge无法收到HomeServer 推送过来的消息。确认上述的配置信息准确无误后,点击“Launch”进行部署。服务部署成功后,可以看到如下详细的服务列表:
在platform服务部署成功后,接下来继续部署Auth服务,该服务主要是对接客户的登录认证。
在Rancher的管理界面中点击Catalog Apps中选择“auth”这个Stack, 点击“View Details”进入到这个Stack的详细信息页面,在“Template Version”选择“1.0.0”版本,选择后会弹出auth服务的具体配置信息:
确认上述的配置信息准确无误后,点击“Launch”进行部署。Auth服务部署成功后,可以看到如下的详细信息:
部署完auth服务之后,接下来继续部署adapter服务,该服务主要用于对接用户登录认证的适配。
在Rancher的管理界面中点击Catalog Apps中选择“adapter”这个Stack, 点击“View Details”进入到这个Stack的详细信息页面,在“Template Version”选择“1.0.2”版本,选择后会弹出adapter服务的具体配置信息:
上述小程序的APP_ID和APP_SECRET需要根据实际的使用情况进行配置。确认上述的配置信息准确无误后,点击“Launch”进行部署。
1.5服务对接
FinChat部分服务提供了接口对接功能,灵活的对接第三方系统。
1.5.1 账户登入接口
FinChat自带了一套完整的账户体系,以及账户的登入校验功能。如果要自定义账户登入,需要按照接口规范实现登入接口。例如,可以按照接口规范实现从LDAP进行账户密码的校验。
在线文档地址:https://api.finogeeks.club/api/docs/#api-Adapter-PostApiV1ProviderLogin按照文档实现接口,并部署在服务器后,需要修改FinChat的服务配置参数,让新的账户登入生效。
具体步骤是:
(1)登入 rancher的管理后台,查找到auth应用栈下的auth-center服务
(2)点击升级,修改环境变量 login_provider.url 的值为上文提到的登入服务的URL1.5.2 通讯录接口
帆信为员工端提供了通讯录功能,默认情况下通讯录中的内容是从组织架构中获取。如果想要按照自己的需求灵活定制通讯录,用于展示个性化的组织架构,需要按规范实现通讯录接口。
在线文档地址:https://api.finogeeks.club/api/docs/#api-Adapter-GetApiV1FscUsersFcidContacts
https://api.finogeeks.club/api/docs/#api-Adapter-GetApiV1FscUsersFcidContactsContacttype
https://api.finogeeks.club/api/docs/#api-Adapter-GetApiV1FscUsersFcidContactsContacttypeId
https://api.finogeeks.club/api/docs/#api-Adapter-GetApiV1FscUsersFcidProfilesMyidXxx
按照文档实现接口,并部署在服务器后,需要修改帆信的服务配置参数,让新的通讯录生效。
具体步骤是:
(1) 登入 rancher的管理后台,查找到platform应用栈下的platform-api服务
(2) 点击升级,修改环境变量CONTACTSERVER 的值为自定义通讯录服务的URL
(3) 修改Kong API网关 通讯录 相关的 配置, 修改 adapter-contacts 对应的URL修改网关接口路由
gateway-dashboard的宿主机IP地址访问gateway的dashboard,默认是从30001端口,默认账户密码 admin/admin159357。 Dashboard的默认访问URL地址为:
http://host_ip:30001/, 这里的host_ip为dashboard所在服务的宿主机外网IP地址;修改adapter-contacts 的 upstream_url为自定义的通讯录服务的URL
1.5.3 账户初始化
如果采用自定义的账户登入服务,需要调用帆信的账户初始化接口,该账户才能正常使用。
客户登入成功后需要调用的接口:
https://api.finogeeks.club/api/docs/#api-Platform_Initial_Service-PostApiV1FcInitAppsApptypeFcidTokenXxxhttps://api.finogeeks.club/docs/business/#api-Swan_Customer-PostApiV1SwanRetailRegister
员工登入成功后需要调用的接口:
https://api.finogeeks.club/api/docs/#api-Platform_Initial_Service-PostApiV1FcInitAppsApptypeFcidTokenXxxhttps://api.finogeeks.club/docs/business/#api-Swan_Manager-PostApiV1SwanManagerStaff
1.5.4 单个Pod升级方法
进入到从Workloads 点击进入 Pod的页面,
然后点击edit 修改docker镜像的版本号或环境变量,
最后点击upgrade进行升级。2、机器负载说明
基于上述的部署方案,以下说明服务运行时需要的硬件资源信息。
2.1 zookeeper服务
服务名称 内存占用 CPU占用 磁盘 可伸缩 zookeeper 250M % 10G 是(3实例) 总计 750M 30G - 2.2 kafka服务
服务名称 内存占用 CPU占用 磁盘 可伸缩 kafka 1.3G % 100G 是(3实例) 总计 3.9G 300G - 2.3 postgres服务
服务名称 内存占用 CPU占用 磁盘 可伸缩 postgres 800M % 100G (主从) 总计 1.6G 200G - 2.4 minio服务
服务名称 内存占用 CPU占用 磁盘 可伸缩 minio 150M % 200G 是(3实例) 总计 450M 600G - 2.5 redis服务
服务名称 内存占用 CPU占用 磁盘 可伸缩 redis 250M % 10G 是(3实例) 总计 750M 30G - 2.6 mongo服务
服务名称 内存占用 CPU占用 磁盘 可伸缩 mongo 1G % 100G 是(3实例) 总计 3G 300G - 2.7 gateway服务
服务名称 内存占用 CPU占用 磁盘 可伸缩 gateway 500M % 500M 是(2实例) dashboard 30M % 否 总计 1030M 1G - 2.8 platform服务
服务名称 内存占用 CPU占用 磁盘 可伸缩 bot-center 500M % 500M 是 desktop 30M % 500M 是 init-server 40M % 500M 是 msg-bridge 42M 500M 否 netdisk 50M 500M 是 platform-api 60M 500M 是 publish-center 600M 500M 是 push-service 50M 500M 是 qrcode-server 66M 500M 是 rcs-server 300M 500M 是 tag-server 7M 500M 是 widget-server 300M 500M 是 总计 2G 6G 2.9 auth服务
服务名称 内存占用 CPU占用 磁盘 可伸缩 auth-center 200M % 1G 是 总计 200M 1G 2.10 adapter服务
服务名称 内存占用 CPU占用 磁盘 可伸缩 login-provider 40M % 1G 是 总计 40M 1G 2.11 chat服务
服务名称 内存占用 CPU占用 磁盘 可伸缩 proxy 180M % 2G 是 as 40M % 2G 否 front 500M 2G 否 loader 40M 2G 否 persist 70M 2G 否 push 30M 2G 否 sync 5G 2G 否 总计 6G 14G 根据上述的服务统计,大约需要内存:24G以上,磁盘:1.5T以上。以上信息是环境运行时需要的资源。如果在实际使用中用户的访问量突然增加,需要根据实际情况调整机器资源。