目录
我是人间惆怅客,知君何事泪纵横。断肠声里忆平生。
背景
调整前ws server由go开发,与平台后端服务融合在一起,整个过程大部分是前端与后端直接交互,为了避免这种情况,领导决定单独开发一个ws server从平台独立出来,又因隔壁团队(python)是基于python开发的ws,稳定性靠谱,结合现状因此采用了Python开发。
调整后的ws server与业务服务解耦,前端无需直接与go后端交互。后端服务还是go;前端使用vue的socket.io(2.1.1-b);ws server基于flask_socketIO开发;其中ws的数据推送由redis而来,redis的数据由后端服务而来,后端服务的数据又由rancher的websocket而来,这样整个ws流程已隐隐浮现。
平台ws用于状态推送。
流程概述
1,前端调登录接口,即向后端服务登录并获取token;
2,ws向后端服务发送http请求验证当前token是否合法&有效,校验通过时返回200,否则ws server与前端断开当前连接;
3,校验通过,ws server向redis发送开启的event,此时后端服务请求rancher ws同时将拿到的数据推到redis,前端收到200之后向ws server发送建立连接的ws请求,开始即时通信。
平台ws架构图
调试瞬间
前端
页面
后端服务
ws server
基于容器平台手动工作负载部署(deployment)
分为大致几步:
启动一个deployment,镜像为python镜像(注意创建时就暴露容器端口,设置端口映射)
进入容器目录,拉取代码
cd /
mkdir wss
git clone http://xxx.xx.xx.xx:10080/项目.git
git checkout cp-develop
设置pip源,安装pip依赖
cd ~
mkdir ~/.pip
cat > ~/.pip/pip.conf << EOF
[global]
timeout=6000
index-url=http://192.168.103.41:8000/simple/
[install]
use-mirrors=true
trusted-host=192.168.103.41
EOF
pip install -U -r requirements.txt
启动项目
nohup python manage.py runserver -s ws_settings.ini
查看进程,已经启动成功了,接下来连接wss的一方即可用ip:30942的方式访问这个server。
jenkins cicd+rancher实现自动化构建部署
准备工作:容器平台已有一个以jenkins命名的命名空间;给项目下Dockerfile,加部署deployment的k8s的yml文件(为什么是项目下,主要是为了拷贝起来目录方便好写),必要时也需要entrypoint.sh;我的Dockerfile如下:
yaml文件如下
首先,登入Jenkins,会看到这个,点击它
输入任务名,选择流水线,点击OK
接下来是配置这个任务,以下各图是一些配置参数
上图中的token等于什么值,代码库的变动对应来触发哪个Jenkins任务自动构建。
脚本主要做三件事:编译代码,构建镜像,部署镜像。记得给该项目的代码库加webhook哦,URL如下
http://ip:端口/generic-webhook-trigger/invoke?token=wss-develop
上面的ip和端口就是jenkins的访问地址。
这时候你给代码库推代码,Jenkins就会自动触发构建了。