Supos融合环境
# 一、概述
融合环境是指我们公司平台与Supos做深度集成,且主程序是Supos系统的应用环境,我们开发的应用通过Supos应用程序安装的方式融合到Supos系统中,原本安装都是由Supos运维人员去安装的,经过多个项目的运维积累,后面的安装/更新部署都是由我们的实施人员操作,这个操作必须严格按照文档及视频教程步骤来完成,整个操作过程涉及到一些linux命令行操作指令,需要你具备一些常用的linux操作命令,一般情况下按文档中的指令足够了,但不排除后期维护中出现些意外问题你没有这些基础是无法操作系统的。
Supos给的安装包有分为两个版本,一个是Beta版本(试用版),另一个是正式版本【需要走采购流程才能用正式版本】,Supos产品一直在迭代,为了保持长期稳定运行,最好申请正式版本(以防出了问题可以找Supos技术协助处理问题),当然了Beta版本已经足够了,后期我们自己App的迭代都是由公司研发人员自己打包到现场更新。
# 二、环境要求
- SUPOS系统
- Mysql8.0及以上(我们系统要求)
- RabbitMQ
- MongoDB
- Redis
# 三、安装前准备
以前我们是用工具箱进行App的更新包,今后我们使用公司云盘的方式下载更新及安装包,避免工具箱受网络和环境影响无法下载,使用公司云盘你电脑只需要有外网就可以直接进行下载且跟APP最新的安装包保持同步,公司云盘地址 公司云盘 (opens new window) ,你只需要向管理员申请账号即可下载,升级安装包已经共享出来,文件夹名称【公司平台升级包】,分为linux及windows两个版本,具体根据项目环境来选择不同版本。
# 四、目录介绍
如上图,这是公司融合环境(linux)版本的安装包目录清单,截图中 镇洋分支 是独立的分支(项目分支)你可以不用理会它,其它的除了readme.md文件外你都需要下载到你电脑本地。
目录名称 | 所属环境 | 用途 |
---|---|---|
镇洋分支 | 融合环境 | 镇洋项目专属(其它项目可以无视它) |
Pkg.rar | 融合环境 | 静态文件包(静态页面及Js文件) |
supos首次安装包.rar | 融合环境 | Supos提供的Beta版本,新项目环境第一次安装时用到 |
tt-api.zip | 融合环境 | 我们App的接口服务端安装包 |
tt-api1.0.tar | 融合环境 | 我们App的接口服务端更新包 |
tt-web.zip | 融合环境 | 我们App的接口客户端的安装包 |
tt-web1.0.tar | 融合环境 | 我们App的接口客户端的更新包 |
ueditor.json | 融合环境 | 富文本编辑器文件上传依赖的配置文件 |
# 五、准备安装
先下载连接到现场服务器环境的SSH客户端工具,我们就以WinScp客户端为例讲解,这个客户端工具可以去百度上搜索关键字进行下载,后期运维平台开发完成后会把这些安装包放到运维平台中就可以直接下载。
下载到Winscp客户端后,还需要再下载一个Putty.exe安装包,有了它才能跟服务器建立SSH连接,这两个工具都安装好之后再做一些配置可以免密码登录项目服务器,如;
需要把你已经安装完成后的Putty.exe运行目录配置在外部程序上,因为winscp版本有所不同,可能你下载的安装包跟上图的不一样,但是配置都是一样的。
# 六、开始安装
# 1 首次安装
首次安装是什么意思?
首次安装是指新的项目环境(即从来没有安装过我们App应用的Supos环境),这个安装过程就按照以下几个步骤依顺序操作即可,没有什么地方值得注意的。
# 1.1 第一步
解压下载到你本地的supos首次安装包.rar 包,解压完成之后的目录如下图;
把base-install.tar.gz跟up.sh放到服务器的根目录下,然后打开up.sh文件修改其中的配置,如图;
红框中的地址改成Supos环境主程序地址即可,(主程序地址)是指Supos系统在浏览器中以 http://域名:端口号 组成的地址,且记后面一定要加上分号。
# 1.2 第二步
按照第一步中解压后目录的 《腾泰深度集成_安装手册V1.00.00.00-C》 文档说明,创建对应的文件夹目录结构执行up.sh批处理文件即可。
# 1.3 第三步
查看镜像;
docker images|grep tengtai
执行以上目录会看到有四个镜像,如果没有表示安装操作有问题,正常的四个镜像如下图;
删除 registry:5000/tengtai/api 跟 registry:5000/tengtai/web 两个镜像;
//删除api接口服务镜像
docker rmi registry:5000/tengtai/api:1.0
//删除客户端镜像
docker rmi registry:5000/tengtai/web:1.0
2
3
4
# 1.4 第四步
通过Winscp把tt-web1.0.tar跟tt-api1.0.tar两个包放到服务器上任何一个目录文件夹下面,然后执行以下命令;
//加载客户端镜像
docker load -i tt-web1.0.tar
//加载服务端镜像
docker load -i tt-api1.0.tar
//推送到本地仓库
docker push registry:5000/tengtai/web:1.0
docker push registry:5000/tengtai/api:1.0
//查看镜像
docker images|grep tengtai
2
3
4
5
6
7
8
9
加载完镜像并推送后,应该看到新的镜像已经加载,如下图;
注意看:红框中的时间,如果是最近的时间说明这个包是最新的,反则表示镜像加载失败。
# 1.5 第五步
接下来可以安装App了,找到你下载到本地电脑中的两个文件 tt-web.zip 跟 tt-api.zip ,安装顺序无所谓,它们两个随便先选择一个进行安装,安装请到Supos的App管理中进行安装,如下图;
选择安装包后会弹出一个配置界面,这里你需要修改配置文件,配置文件内容如下;
#环境变量配置
[ASPNETCORE]
ENVIRONMEN=Production #保持默认
#APP配置
[BUILTIN_APP]
ADDRESS=http://isv-integrate-pgx3.demo.devcloud.supos.net #这是supos的测试环境,改成生产环境
SERVICE_NAME=/apps/tt-web #保持默认 我们应用web的相对路径
API_PATH=/apps/tt-api/api/ #保持默认 我们应用api的相对路径
#mysql环境配置 改成生产环境
[BUILTIN_APP_MYSQL]
ADDRESS="server=172.21.7.11;port=29004;database=gsmesdemo_kpt;user=xxx;password=xxx"
#sqlserver环境配置 改成生产环境--mysql与sqlserver二者只能选择其一
[BUILTIN_APP_SQLSERVER]
ADDRESS="Data Source=xxx;user id=sa;password=xxx;Initial Catalog=gsmesdemo_kpt;Integrated Security=False;Pooling=True;Max Pool Size=100;Connect Timeout = 30;"
#redis环境配置 改成生产环境
[BUILTIN_APP_REDIS]
ADDRESS="172.21.7.11:29001,allowAdmin=true,password=xxx,defaultdatabase=1"
#mongodb环境配置 改成生产环境
[BUILTIN_APP_MONGODB]
ADDRESS=mongodb://root:supos@172.21.7.11:29005
DATABASE=admin
ISSSL=false
#MQTT配置 改成生产环境
[BUILTIN_APP_MQ]
HOSTNAME=172.21.7.11:29003
USERNAME=root
PASSWORD=Supos123!
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
修改你生产环境真实的ip地址和相关账号,然后确认即可完成安装,记住了两个zip都要进行安装,安装完成之后先不要启动App。
# 1.6 第六步
修改appsettings.json配置文件,配置文件目录在 /mes/configuration/static/config,配置文件内容如下;
{
"urls": "http://*:8080",
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"SwaggerDoc": {
"DefEnable": true,
"Title": "Custom Authorization Demo",
"Version": "1.1",
"Description": "自定义权限验证示例",
"ContactName": "xzc",
"ContactEmail": "",
"ContactUrl": ""
},
"MongoConnection": {
"ConnectionString": "mongodb://root:supos@192.168.2.103:29005", //mongodb地址改成生产环境的
"DataBase": "tentai", //这里不要用admin,用其它任意名称,英文名称
"IsSSL": false
},
"RabbitMq": {
"HostName": "xxx",
"UserName": "xxx",
"Password": "xxx"
},
"RedisConnection": {
"Host": "xxxx"
},
"SuposKey": {
"supOSAK": "xxx", //supos中随便选择一个我们系统应用app的Ak/Sk
"supOSSK": "xxxx"
},
"SocketServer": { //socket服务端配置
"SocketSwitch": "on",
"SocketIP": "127.0.0.1",
"SocketPort": 8086
},
"DDos": {
"DDosSwitch": "off", //中间件开关配置
"DDosIntercept": 20
},
"SyncWebJson": {
"permissionstatus": "off",
"permisslevel": "menu",
"url.apiUrl": "xxx",
"url.ftpUrl": "http://locahost:9000/",
"url.printCon": "SELECT rp.Name AS Name,IP + '@' + Name AS [Value] FROM\tSmart_Roles_Print rp,Smart_Role_User_Link rl WHERE rp.RoleID = rl.RoleID AND rl.UserID = '$userid$' and name is not null and IP is not null and (ip <>'' or name <>'')",
"webconfig.mqtt.hostname": "",
"webconfig.mqtt.port": 1884,
"webconfig.session": 15,
"webconfig.mqtt.username": "",
"webconfig.mqtt.password": "",
"webconfig.WebSocket": "ws://0.0.0.0:6868",
"webconfig.Token": "tk",
"webconfig.disableSqlForeEnd": "0",
"webconfig.suposAppID": "", //supos业务设计器中随便选择一个我们系统应用的Appid
"webconfig.suposSecret": "", //supos业务设计器中随便选择一个我们系统应用的secret
"webconfig.suposPath": "http://tentai.cn:9000", //配置supos浏览中http://域名:端口
"webconfig.suposTopic": "pending_topic", //supos消息订阅主题
"webconfig.suposTopicBusinessCode": "pending_topic", //supos消息订阅主题业务代码
"webconfig.suposTopicBusinessName": "待办消息", //supos消息订阅主题业务名称
"webconfig.isNoLogin": 0, //是否开启免登录
"webconfig.scheduleName": "TenTaiScheduler", //调度服务名称
"webconfig.scheduleThreadCount": 32, //调度线程数
"webconfig.scheduleTablePrefix": "SMART_QRTZ_", //调度服务名称
"webconfig.scheduleTimeout": 20, //调度超时响应时间
"webconfig.scheduleReset": false, // 是否启动自动调度重启
"webconfig.scheduleResetTime": "12" // 调度重启间隔/时
},
"ConnectionStrings": {
"Connection": "server=192.168.2.103;port=29004;database=gsmesdemo_kpt;user=xxx;password=xxx", //修改成生产环境的数据库信息
"DbType": "MySql"
//"Connection": "Data Source=192.168.2.40;user id=sa;password=xxx;Initial Catalog=gsmesdemo_kpt;Integrated Security=False;Pooling=True;Max Pool Size=100;Connect Timeout = 30;",
//"DbType": "SqlServer"
},
"AllowedHosts": "*"
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
然后再替换静态资源文件,资源文件在pkg.rar压缩包中,解压后会产生两个文件夹目录,如下图;
选择web文件夹下面的 Views 跟 wwwroot ,然后把这两个文件夹替换到服务器上 /mes/configuration/static 目录下即可,同时把ueditor.json文件也放到这个目录下。
# 1.7 第七步
到这一步你可以通过Navicat连接项目环境数据库,配置的是那个库就连接那个数据库,修改表结构;
表名称 | 修改前 | 修改后 |
---|---|---|
smart_userinfo | online | IsOnLine |
smart_organize | level | CLevel |
表结构如果没问题,可以忽视表结构的修改,另外下载基础数据 公司云盘: 查看 (opens new window) 下载中间件的表结构到Navicat执行一下。
如果你前几步操作没有问题,到这里基本上安装过程即将完成了,接下来你可以在App管理启动刚才安装的两个zip应用,一切顺利的话表示已经安装成功,且可以使用我们的APP应用程序,不过后面还有两步操作需要处理,同步表结构及分配权限菜单。
同步产品表结构:
在浏览器中开一个新页签,然后输入 http://域名:端口 另外再拼接 /apps/tt-api/api/api/DataIntegration/SysncTableStructure?isDeleFiled=true
稍等几分钟不出意外的话,会显示表结构同步成功
同步业务表结构:
在浏览器中开一个新页签,然后输入 http://域名:端口 另外再拼接 /apps/tt-api/api/api/DataIntegration/SysncBusTableStructure?isDeleFiled=true
稍等几分钟不出意外的话,会显示表结构同步成功
分配权限:
在Supos系统中给角色分配权限,需要先到我们MES系统中导出模块应用到Supos安装后才需要分配权限,只安装两个zip包没有分配权限的必要,本文档只讲解融合环境怎么安装我们的系统,不介绍模块怎么安装,公司云盘有安装视频自己去看 公司云盘: 查看 (opens new window) 。
# 2 更新包
如果你所在的项目已经安装过我们应用,就不需要重复执行首次安装那七个步骤了,特别强调的是一定要提前做好数据库备份,以免操作不当丢失数据库,因为在更新包的同时,有些时候需要重新安装 tt-web.zip 跟 tt-api.zip两个文件,一般情况下不需要重新安装,但是supos有BUG,必要情况下必须重新安装一下才能保持有效运行app。
# 2.1 第一步
问开发申请新包,然后在公司云盘 (opens new window) 下载最新的更新包 tt-web1.0.tar 跟 tt-api1.0.tar pkg.rar 这三个包到你电脑中。
# 2.2 第二步
停止supos中我们的app应用(应该有两个吧),然后删除服务器中的镜象,如下;
//删除api接口服务镜像
docker rmi registry:5000/tengtai/api:1.0
//删除客户端镜像
docker rmi registry:5000/tengtai/web:1.0
2
3
4
# 2.3 第三步
先把刚刚下载到你电脑中的三个更新包其中的 pkg.rar 解压,解压后把 Views 跟 wwwroot 两个文件夹替换到服务器目录 /mes/configuration/static 下面,然后再把另两个tar镜像包上传到服务器任何一个目录,执行以下命令;
//加载客户端镜像
docker load -i tt-web1.0.tar
//加载服务端镜像
docker load -i tt-api1.0.tar
//推送到本地仓库
docker push registry:5000/tengtai/web:1.0
docker push registry:5000/tengtai/api:1.0
2
3
4
5
6
7
# 2.4 第四步
在supos的app管理中重启两个app应用程序,再同步表结构;
同步产品表结构:
在浏览器中开一个新页签,然后输入 http://域名:端口 另外再拼接 /apps/tt-api/api/api/DataIntegration/SysncTableStructure?isDeleFiled=true
稍等几分钟不出意外的话,会显示表结构同步成功
同步业务表结构:
在浏览器中开一个新页签,然后输入 http://域名:端口 另外再拼接 /apps/tt-api/api/api/DataIntegration/SysncBusTableStructure?isDeleFiled=true
稍等几分钟不出意外的话,会显示表结构同步成功
# 2.5 第五步
在supos系统中刷新菜单,验证我们的app页面能否正常打开,如果一切正常表示更新成功,反则表示不成功,这时需要查看我们应用程序的应用日志。
docker logs 959d88bf94c8 //这串编码是容器运行后的id
//先通过以下命令查看我们的应用程序信息
docker ps -a|grep tengtai
2
3
这是整个更新包的全过程,部分情况下会有一定的问题,常见问题处理方法在文档的后面有讲到解决方案。
# 七、疑难问题
# 1.1 任务已存在
应用安装过程中有时会遇到任务已存在的错误,这个问题请参考Supos提供的【任务已存在处理方法】文档。
# 1.2 容器后台一直重启
文件做了映射找不到配置文件appsetting.product.json,这时候容器也是进不了的,解决办法就是把我们平台的镜像都删除掉,重新推送镜像到私库,并重新安装。
# 1.3 容器起不来
容器启动不起来状态是【exited】,这种情况下无法看日志,需要通过supos的k8s查看日志,查看命令如下;
kubectl get pod -A | grep dt #获取dt命名空间
kubectl logs -n dt xxxxxxx # xxxxxxx是指pod命名空间的名称
2
# 1.4 web起不来
文档的安装部署流程是把项目做为新的项目来部署的,如果已经部署过一次更新的情况下是不需要那么复杂的操作步骤,只需要拿到镜像包中的镜像load一下再push就可以了。
web起不来这是因为静态文件目录重复映射导致的,所以需要使用winscp工具连接服务器并删除,一般默认静态目录为/mes/configuration/static,只要发现有wwwroot红色或者tt-web红色的标记删除就可以了,然后再重启web服务。
拿到开发给的安装包,解压tengtaiv1.0.tar.gz压缩包并获取压缩包中的tt-web1.0.tar,tt-api1.0.tar镜像文件,放置到服务器上任意目录下执行以下命令即可完成更新。
docker rmi registry:5000/tengtai/api:1.0 #删除原web的tag
docker rmi registry:5000/tengtai/web:1.0 #删除原api的tag
docker load -i tt-web1.0.tar #web镜像
docker load -i tt-api1.0.tar #api镜像
#load完镜像后需要把Tag推送到私库
docker push registry:5000/tengtai/web:1.0
docker push registry:5000/tengtai/api:1.0
#删除垃圾镜像
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
2
3
4
5
6
7
8
9