BeX5 部署
原理
运行结构图
整个应用系统可以分成系统的微服务和若干个业务微服务
- 系统微服务包含:
- report:报表微服务;
- doc: 文档微服务;
- portal:门户微服务;在门户微服务中必须包含全量的模型资源;
- 业务微服务:例如 oa、hr 等等。
在 portal 和业务微服务中,必须包含全量的模型资源。如何中租户中添加这些微服务,在“操作步骤”中会详细介绍。
应用发布流程图
注意:应用 SVN,如果 UI2 的系统资源期望使用应用自带的,需要和平台沟通。
操作步骤
系统管理员
主要职责:发布 entry 可部署模板、关闭模板审核
关闭模板审核方法:用 system 登录控制台,打开“系统设置—审核配置”,关闭组件模版审核
开发租户
主要职责:发布应用、report 和 doc 的可部署模板
发布 report 可部署模板
应用的项目标识为 bizreport
发布 doc 可部署模板
应用的项目标识为 bizdoc
发布应用可部署模板
第一步:应用 SVN 准备
- 系统资源默认使用平台自动的,即使应用 SVN 有也不会使用(如果期望使用 SVN 上的 UI2 系统资源,请与平台联系)。
- BIZ 模块每个应用的根目录添加标识文件:unmakable.txt,内容为空,例如:/BIZ/OA/unmakable.txt
第二步:创建应用
在“我的开发——企业应用”中使用“BeX5 微服务空白模板”模板创建应用。 接下来的主要工作有:
更新架构组件
在"架构"中确认组件是否有需要更新的,如果有更新需要先更新组件,执行“提交并更新”
确认是否需要更新组件和组件的更新如下图操作:
更新完点击“关闭”按钮后,执行“提交并更新”如下:
将应用资源从 SVN 同步到应用中
在“架构”图中,切换到“开发架构”,设置“SVN 源码同步 Git”组件的“svn 仓库地址”、“svn 仓库用户名”和“svn 仓库密码”,svn 仓库地址需要配置到 model 这一层,即 BIZ 上层目录。如:http://XXX/svn/model。如下图:
配置后点击“保存”会提示重启,点击“是”进行重启;如果没有提示重启,可以切换到“高级”,点击“立即重启”制作台。
重启完成后,执行“强制覆盖本地”
注:强制覆盖本地后可以切换到“代码”,到mode/BIZ或model/UI2下看是否相关的业务模块,若没有可以等一会再执行“强制覆盖本地”。
创建数据源模块
BeX5 中使用的每个数据源,必须在 service 下创建相应的数据源模块,数据源模块的命名规则:{数据源名}DataSource,例如
- system 对应的是 systemDataSource
- oa 对应的是 oaDataSource
数据源模块下的内容可以拷贝默认带的 systemDataSource,然后修改 app.m、project.xml 中的配置信息,以及 xxDataSource.meta 的文件名和内容。 根据数据源连接的物理数据库,在架构图中切换到“运行架构”添加数据库组件,并将 xxDataSource 连接到相应的数据库组件上。
- 组件名称:自定义,推荐使用“xx 数据库”,例如“demo1 数据库”;
- 数据库显示名:自定义,推荐使用“xx 数据库”,例如“demo1 数据库”;
- 是否外部数据库:否
配置 redis 标签
修改“运行架构”下的 redis 组件的以下属性,保存后执行“提交并更新”:
- 是否外服务:否(默认就是否)
- 共享范围:tenant
- 服务实例规格选择器:必须与“中间件管理-中间件系统管理-Redis 实例管理”中定义的分配标签一致。BeX5 中的 redis 只支持简单模式的 redis。
第三步:发布应用可部署模板
发布类型选择“市场”
应用模版设置窗口的相关配置
应用类型选择“多应用”
应用列表,把system、 portal、portal2、entapp、SA、wxsys、main、pc、comp 设置到portal,其他的每个应用勾选自己的
此处的应用列表决定了将整个应用资源划分成多少个微服务,每个微服务负责哪些模块的请求。
运行租户
主要职责:使用可部署模板构建微服务系统、配置微服务的数据库连接、配置微服务的运行时设置(例如 pod 伸缩量等)。
添加企业门户
略
添加应用的微服务(portal 等)
选择上面发布的可部署模板,输入项目名称、服务名并选择应用,如:服务名输入 portal,应用选择 portal。
一次只能选择一个应用,需要多个应用就添加多个
注:portal 的服务名必须为 portal,其它的服务名可以自定义(entry、wf、portal、doc、report 是内置的服务名,不允许使用)。
注册微服务
访问企业门户 entry 用管理员登录,打开服务注册功能,执行自动发现并注册
配置数据库连接参数
除了 entry、report 其它的都需要配置数据库连接参数,在“应用/服务管理”列表找到相关应用的配置:
切换到数据库设置,对相关的数据进行配置
如果添加了doc(文档)应用需要配置doc数据库
修改entry应用的配置
设置访问的首页
门户应用的“配置”打开,切到“环境设置”页签,找到“用户自定义”服务模块,设置参数
添加三个环境变量的设置
设置portal应用的内部域名,服务注册功能中的服务地址
- 变量名:ENTRY_URL
变量值:http://portal.newdao-tenant-xxx
说明:xxx为租户编码
设置PC端的门户首页,本文档设置是pc3,也可以设置为pc或pc2
- 变量名:ENTRY_PC_URL
- 变量值:/x5/UI2/v_/portal/pc3/index.w[QUERY]
设置Mobile端的门户首页
- 变量名:ENTRY_MOBILE_URL
- 变量值:/x5/UI2/v_/portal/mobile/index.w[QUERY]
设置权限组件
门户应用的“配置”打开,切到“环境设置”页签,找到“权限组件”服务模块,设置参数
把最低权限要求设置为:匿名用户:
然后重启entry门户后即可通过门户entry的域名访问应用。
附录
使用扩展空间
如果平台默认带的资源下面有自己修改的内容,需要通过扩展空间的方式放到扩展空间中,用的地方直接写原始的路径不需要写扩展空间的路径,如写为/system/data,不能写为/system_X/data
UI2 下如果有扩展空间,在菜单功能配置文件、.w、.js,用到扩展空间中的文件时,路径需要配置为原始的路径,不需要写扩展空间的路径,如写为/SA/task/mainActivity.w,不能写为/SA_X/task/mainActivity.w
如果有相关的菜单功能配置文件中有相关的路径的调整,调整后需要重新分配一下这个功能的权限
系统资源使用线下版本的
BIZ/system,BIZ/SA,BIZ/portal,BIZ/portal2,UI2/system,UI2/SA,UI2/portal是默认带的系统资源,不同的版本可能有差异。除了BIZ/system 必须用系统的,SA、portal 有需要可以用线下版本中资源
- SA、portal 用线下版本带的,需要把开发模版的 ide 打开切换到代码页,在 model 下新建一个名字为.systemSubDir 的文件(文件路径为:model/.systemSubDir),文件中配置用系统默认的模块,如下文件中配置的是必须用系统的:
注意:如果使用自己的 UI2/system 需要把线下使用的 BeX5 版本中 runtime/UIServer/WEB-INF/lib/resources.jar 中 UI2/system 下以及 UI2/system 的子目录下的 js 文件,通过 svn 提交的 model/UI2/system 对应的位置下
- 执行“提交并更新”,然后到“高级”中点击“制作台重启”的“立即重启”
- 重启后切换到“代码”页,到BIZ和UI2下使用系统资源的目录下创建.comp.save文件,如BIZ/SA创建后的文件路径为model/BIZ/SA/.comp.save,注意使用线下系统资源的目录下都有添加
- 需要对 UI2/system/biz.common.min.js 文件特殊处理,需要到“池管理”中找到当前应用的 ide 的 pod,进入 pod 中的 tomcat 容器,执行以下命令:
cp /usr/local/x5/model-system/UI2/system/biz.common.min.js /usr/local/x5/model/UI2/system/biz.common.min.js
修改svn上的model/UI2/system/admin/base/server/dsrc/Funcs.java文件中getAppFuncs方法的实现如下:
private static Object getAppFuncs(){ JSONArray ret = new JSONArray(); FileSystem fs = FileSystemWrapper.instance(); String uiCompPath = "/UI2/comp"; String uiConfigPath = "/config"; String uiFuncsFileExt = ".function.json"; String compPath = "comp"; List<String> dirs = fs.getDirs(uiCompPath); for(String dir : dirs){ File fDir = new File(dir); String configDir = fDir.getName() + uiConfigPath; List<File> funcFiles = fs.getFiles(uiCompPath + "/" + configDir, uiFuncsFileExt, false); for(File file : funcFiles){ String fileName = file.getName(); ret.add("$UI/"+compPath+"/"+configDir+"/"+fileName); } } return ret; }
- 修改model/.gitignore文件,搜索 /BIZ/SA,/UI2/portal,/UI2/system 等需要用自己资源的目录配置进行删除,注意配置文件中配置的目录不能删除
- 执行“提交并更新”,然后到“高级”中点击“制作台重启”的“立即重启”
重启后到代码下资源是否正确,如果正确就可以进行发布了
- 注意:使用了自己的 UI2/system 后不能使用 ide 中发布按钮进行发布,需要通过下面的“更新资源”中的"手动更新资"方式在浏览器的console中输入代码片段进行发布
配置发布时不需要编译的UI2模块
在service\bex5目录下创建build.config.json文件,在此文件中配置的模块发布的时候不会进行编译
文件内容如下:
{"excludes":"/UI2/SA,/UI2/OA"}
数据源配置为已有的数据库
数据源配置为已有的数据库,需要添加下面的配置,表示 bex5 使用外部数据库,发布时将不执行具体的数据库初始化逻辑
在 servie\main\deploy 下的 dev、production文件中 BEX5_EXTERNAL_DB 的 vaule 配置:
<property name="BEX5_EXTERNAL_DB" value="true" env="BEX5_EXTERNAL_DB" readonly="true">
<label label = "BEX5_EXTERNAL_DB"/>
</property>
配置 session 超时时间
修改 service/main/deploy 下的 xml 文件中 BEX5_REDIS_SESSION_TIMEOUT 的 value 配置:
<property name="BEX5_REDIS_SESSION_TIMEOUT" value="36000" env="BEX5_REDIS_SESSION_TIMEOUT" readonly="true">
<label label = "BEX5_REDIS_SESSION_TIMEOUT"/>
</property>
登录密码使用密码增强特性
人员登录密码使用密码增强特性的相关配置。通过环境变量 BEX5_DISABLED_PASSWORD_SALT 和 BEX5_PASSWORD_SALT 来控制, BEX5_DISABLED_PASSWORD_SALT: 是否禁用密码加盐,默认值是 false;两个环境变量在应用模板的 model/service/main/deploy/**.def.xml 中定义
场景一:禁用密码加盐
<property name="BEX5_DISABLED_PASSWORD_SALT" value="true" env="BEX5_DISABLED_PASSWORD_SALT">
<label label="BEX5_DISABLED_PASSWORD_SALT"/>
</property>
场景二: 开启密码加盐,并设置盐为: helloworld
<property name="BEX5_PASSWORD_SALT" value="helloworld" env="BEX5_PASSWORD_SALT">
<label label="BEX5_PASSWORD_SALT"/>
</property>
场景三:开启密码加盐,并设置盐为: http://www.justep.com
系统默认值,不需要配置 BEX5_DISABLED_PASSWORD_SALT 和 BEX5_PASSWORD_SALT
组织授权缓存
组织授权为了优化做了缓存,即给相关的组织分配了权限,立即注销重新登录不起作用,需要5分钟后才起作用
如果要调整缓存的时间,如下:
在 model/service/main/deploy/production.def.xml 文件中添加 BEX5_LOAD_PERM_CACHE_INTERVAL 配置,值单位默认是秒
<property name="BEX5_LOAD_PERM_CACHE_INTERVAL" value="60" env="BEX5_LOAD_PERM_CACHE_INTERVAL" readonly="true">
<label label = "BEX5_LOAD_PERM_CACHE_INTERVAL"/>
</property>
如果权限数据少也可以关闭缓存,如下:
修改 model/service/main/deploy/production.def.xml 文件中 BEX5_PERM_CACHE 的值为 false,权限就不会缓存
<property name="BEX5_PERM_CACHE" value="false" env="BEX5_PERM_CACHE" readonly="true">
<label label = "BEX5_PERM_CACHE"/>
</property>
使用推送功能
如果要使用推送功能需要配置 activeMQ 和 PushServer 服务地址
平台中默认没有 activeMQ 和 PushServer,需要使用线下 BeX5 中默认带的 activeMQ 和 PushServer,线下启动了服务可以在平台环境中配置地址
在 model/service/main/deploy/production.def.xml 文件中添加 BEX5_PUSH_SERVER、BEX5_MQTT_SERVER 和 BEX5_EXTERNALUI_SERVER 配置
BEX5_EXTERNALUI_SERVER 的 value 值是最终运行的租户 entr y应用的域名再加/x5,如下:
<property name="BEX5_PUSH_SERVER" value="http://192.168.0.100:8080" env="BEX5_PUSH_SERVER" readonly="true">
<label label = "BEX5_PUSH_SERVER"/>
</property>
<property name="BEX5_MQTT_SERVER" value="tcp://192.168.0.100:1883" env="BEX5_MQTT_SERVER" readonly="true">
<label label = "BEX5_MQTT_SERVER"/>
</property>
<property name="BEX5_EXTERNALUI_SERVER" value="http://entryxxx-vip.xxxx/x5" env="BEX5_EXTERNALUI_SERVER" readonly="true">
<label label = "BEX5_EXTERNALUI_SERVER"/>
</property>
使用企业微信
如果要使用企业微信等需要在 conf/server.xml 中默认的用户名和密码,此配置在平台中如下实现
可以通过环境变量配置在 model/service/main/deploy/production.def.xml 文件中提供的有 BEX5_DEFAULT_USER_NAME 和 BEX5_DEFAULT_USER_PASSWORD
如下:
<property name="BEX5_DEFAULT_USER_NAME" value="system" env="BEX5_DEFAULT_USER_NAME">
<label label="BEX5_DEFAULT_USER_NAME"/>
</property>
<property name="BEX5_DEFAULT_USER_PASSWORD" value="aSDF1@#$" env="BEX5_DEFAULT_USER_PASSWORD">
<label label="BEX5_DEFAULT_USER_PASSWORD"/>
</property>
环境变量中配置是模版发布默认就设置的,如果在最终运行的时候需要修改,可以在 model/service/main 下添加 configurable.schema.json 文件,文件内容如下:
{
"type": "object",
"properties": {
"BEX5_DEFAULT_USER_NAME": {
"type": "string",
"title": "BEX5默认用户名"
},
"BEX5_DEFAULT_USER_PASSWORD": {
"type": "string",
"title": "BEX5默认用户密码"
}
}
}
配置了 configurable.schema.json 文件重新发布模版后,在最终使用模版的应用,通过配置环境变量可以修改,操作步骤如下:
- 运行租户登录,打开应用服务管理列表
- 打开应用的配置
使用 redis
system 登录控制台,打开“中间件管理—中间件系统管理—Redis 实例管理”,点击“新建分组—新建标签”
创建分组后,在列表中找到新创建的,点击明细
点击"使用模版新建",“选择应用模版”时选择下面红框的模版
租户和集群就选择 redis 租户和对应的 kube 集群
配置数据库参数
- 配置数据库参数的时候需要注意,推荐的方案是在每个应用上把所有的数据源都配置上(如果有跨模块调用数据操作的需要,可以通过配置的数据源操作)
- 执行系统库执行数据库升级脚本
- 到 system 数据库中修改 sa_docnamespace 中 docserver 的地址,如果使用平台提供的 BeX5 文档,需要配置为此服务的是内网地址,在服务注册中可以看到内网地址,如果是使用已有的文档服务器,就修改为自己已有的文档服务器地址即可,如:http://bizdoc.nd-tenant-bex5pud/DocServer
上传文件到云
如果需要把之前上传的文件拷贝到云上,可以通过连接 linux 进行文件复制的工具实现,如 WinSCP,具体的服务器连接信息可以通过下面方式查找:
- system 登录控制台,打开运维管理功能,然后打开 Kube 控制面板
- 在 common 命空间下找到 minio 的 pod
- 进入上面 pod 的执行终端,输入 df 就可以看到 storage 服务的地址,找到 storage 目录下具体的 xxxip-vip 目录,进行文件的覆盖(xxxip-vip 中的 xxxx 就是文档服务器的应用名和租户名拼接的)
如果是 oracle 数据库,还要修改 storage 目录下 doc/conf/activemq-conf.xml 文件中的
<property name="validationQuery" value="SELECT 'x' "/>
为
<property name="validationQuery" value="SELECT 'x' from dual"/>
访问地址
访问:http://entryxxx-vip.xxxx/, 域名就是“应用/服务管理”的应用列表中企业门户的域名
更新资源
如果需要定时更新资源可以配置定时滚动更新。配置定时任务,具体执行操作的配置
[
{
"headers": {
"Content-Type": "application/json"
},
"method": "POST",
"responseHeader": false,
"formCommit": false,
"body": {
"submitter": "yupdate2",
"consoleUrl": "https://www.a.xcaas.com/",
"domainprefix": "updatetmp2yupdate28",
"title": "自动发布",
"releaseMode": "market"
},
"url": "https://www.a.xcaas.com/service/ide/app/deploy"
}
]
其中
- http://www.a.xcaas.com 是控制台的地址
- updatetmp2yupdate28 发布的模版 ide 的 url 第一个中划线前面的值
- yupdate2 创建这个模版的租户名
如果需要手动更新资源步骤如下:
- 用开发租户登录控制台
- F12 打开浏览器的开发人员调试工具,在 console(控制台)执行下面的代码
function autoDeploy(domainprefix, submitter){
fetch("/service/ide/app/deploy",{
method : "POST",
headers:{"Content-Type" : "application/json"},
body:JSON.stringify({
domainprefix: domainprefix,
submitter: submitter,
title: "auto deploy",
consoleUrl: window.location.origin,
releaseMode: "market"})
}).then(() =>{
console.log("触发自动发布成功")
}).catch(()=>{
console.log("触发自动发布失败");
});
};
autoDeploy("updatetmp2yupdate28", "yupdate2");
其中
- updatetmp2yupdate28 发布的模版 ide 的 url 第一个中划线前面的值
- yupdate2 创建这个模版的租户名
- 资源更新中提供的发布模版的租户是指发布市场模版的租户
添加应用模块
新加一个应用模块需要做以下步骤:
- 修改 app 表;
使用newcsl租户登录,找到控制台门户entry的资源
找到newdao_console数据库,然后进入
- 进入数据库后找app表,过滤数据 DOMAIN_PREFIX 选择 like%%,值输入:应用名+租户 code,如:portalent1
找到 DEF_ID 为 BEX5_PROD 的记录,下载 APP_CONFIG 字段的内容,修改 BeX5_apps 字段的值,再上传文件
重新发布模板;
- 发布完模板后, 浏览器输入:
http://entryent14-vip.app.a.xcaas.com/entry/manager/services/refresh/portal
其中 portal 表示修改应用