BeX5部署
一、原理
1. 运行结构图
说明: 1) 整个应用系统可以分成系统的微服务和若干个业务微服务,系统微服务包含:
report:报表微服务;
doc: 文档微服务;
portal:门户微服务;在门户微服务中必须包含全量的模型资源;
业务微服务,例如oa、hr等等。
在portal和业务微服务中,必须包含全量的模型资源。如何中租户中添加这些微服务,在“操作步骤”中会详细介绍。
2. 应用发布流程图
说明: 1) 应用SVN:如果UI2的系统资源期望使用应用自带的,需要和平台沟通。
二、操作步骤
1. 系统管理员
主要职责:发布entry可部署模板、关闭模板审核
1)关闭模板审核
system登录控制台——系统设置——审核配置中关闭组件模版审核
2. 开发租户
主要职责:发布应用、report和doc的可部署模板
2.1 发布report可部署模板,应用的项目标识为bizreport
略
2.2 发布doc可部署模板,应用的项目标识为bizdoc
略
如果要连接oracle需要在service/main/deploy/production.pool.del.xml文件中增加如下配置:
<property name="DRUID_VALIDATIONQUERY" value="select 1 from dual" env="DRUID_VALIDATIONQUERY" readonly="true">
<label label = "DRUID_VALIDATIONQUERY"/>
</property>
2.3 发布应用可部署模板
第一步:应用SVN准备
1)系统资源默认使用平台自动的,即使应用SVN有也不会使用(如果期望使用SVN上的UI2系统资源,请与平台联系)。
2) BIZ模块每个应用的根目录添加标识文件:unmakable.txt,内容为空,例如:/BIZ/OA/unmakable.txt
第二步:创建应用
使用“BeX5微服务空白模板”模板创建应用。 接下来的主要工作有:
1)应用切换为高级开发模式,如下:
2)在"架构"中确认组件是否有需要更新的,如果有更新需要先更新组件,执行“提交并更新”
确认是否需要更新组件和组件的更新如下图操作:
执行“提交并更新”如下:
3)将应用资源从SVN同步到应用中
在“架构”图中,切换到“开发架构”,设置“SVN源码同步Git”组件的“svn仓库地址”、“svn仓库用户名”和“svn仓库密码”,svn仓库地址需要配置到model这一层即BIZ上层目录如:http://XXX/svn/model如下图:
首次将应用资源从SVN同步到当前应用需要手工执行,用系统管理员账号登录,在“池管理”中找到当前应用的pod,进入pod中的tomcat容器,执行以下命令:
cd $JUSTEP_HOME/model/service/comp/svnSync/deploy
bash sync.sh
命令执行完成后切换到浏览器的ide页签执行强制覆盖本地
注:后续SVN上的应用资源更新后,不需要手工同步到应用中,使用自动发布的命令会自动同步。
4)创建数据源模块
BeX5中使用的每个数据源,必须在service下创建相应的数据源模块,数据源模块的命名规则:{数据源名}DataSource,例如
system对应的是systemDataSource
oa对应的是oaDataSource
数据源模块下的内容可以拷贝默认带的systemDataSource,然后修改app.m、project.xml中的配置信息,以及xxDataSource.meta的文件名和内容。
根据数据源连接的物理数据类型,在架构图中添加不同的数据库组件(MySQL、Oracle、SqlServer),并将xxDataSource连接到相应的数据库组件上。
修改所有数据源组件的以下属性(开发架构和共享集群架构都需要改):
组件名称:自定义,推荐使用“xx数据源”,例如“system数据库”;
数据库显示名:自定义,推荐使用“xx数据源”,例如“system数据库”;
是否外部数据库:否
5)配置redis标签
修改“共享集群架构”下的redis组件的以下属性:
是否外服务:否
共享范围:tenant
服务实例规格选择器:必须与“资源管理” ——“RDS资源管理(redis)”中定义的分配标签一致。BeX5中的redis只支持简单模式的redis。
6)设置默认首页 修改model/service/main/deploy/production.pool.def.xml文件中的BEX5_PC_LOGIN_PATH属性的值,例如:
<property name="BEX5_PC_LOGIN_PATH" value="/UI2/portal/pc2/index.w" env="BEX5_PC_LOGIN_PATH" readonly="true">
<label label = "BEX5_PC_LOGIN_PATH"/>
</property>
相应的有一个BEX5_MOBILE_LOGIN_PATH属性。
第三步:发布应用可部署模板
1)发布类型选择“市场”
2)应用模版设置窗口的相关配置
应用类型选择“多应用”
应用列表,把portal、portal2、SA、system、entapp、pc、comp设置到portal 其他的每个应用勾选自己的
此处的应用列表决定了将整个应用资源划分成多少个微服务,每个微服务负责哪些模块的请求。
3. 运行租户
主要职责:使用可部署模板构建微服务系统、配置微服务的数据库连接、配置微服务的运行时设置(例如pod伸缩量等等)。
1) 添加entry 略
2) 添加wf 略
3) 添加应用的微服务(portal等等)
选择上面发布可部署模板,输入服务名并选择应用,如:服务名输入portal,应用选择中portal。
一次只能选择一个应用,需要多个应用就添加多个
注:portal的服务名必须为portal,其它的服务名可以自定义(entry、wf、portal、doc、report是内置的服务名,不允许使用)。
4) 注册微服务
访问entry用管理员登录,打开服务注册功能,执行自动发现并注册
5) 配置数据库连接参数
除了entry、wf、report其它的都需要配置数据库连接参数,如下图:
6) 修改entry应用 "企业门户"应用开启定制,修改/model/service/comp/entryinit/redirect/app.m文件,修改后的结果如下:
<?xml version="1.0" encoding="UTF-8" ?>
<service target="kong2">
<name>redirect</name>
<request_path>/</request_path>
<preserve_host>true</preserve_host>
<strip_request_path>false</strip_request_path>
<upstream_url>http://{{@getServiceHostName(portal)@}}</upstream_url>`
<plugin name="redirect" enabled="true">
<api_uri>/</api_uri>
<redirect_uri>/x5/UI2/v_/portal/pc3/index.w[QUERY]</redirect_uri>
<others>
<mobile>
<agent_id_str>Android,iPhone,iPad</agent_id_str>
<redirect_uri>/x5/UI2/v_/portal/pc3/index.w[QUERY]</redirect_uri>
</mobile>
</others>
</plugin>
</service>
其中plugin/redirect_uri表示桌面端的首页,plugin/others/mobile/redirect_uri表示移动端的首页。
修改“共享集群架构”(新版本改名为"运行架构(POOL)")中权限组件的最低权限要求的值为:anonymous,并执行保存和提交并更新,如下:
然后直接做正式发布。
三、附录
如果平台默认带的资源下面有自己修改的内容需要通过扩展空间的方式放到扩展空间中,用的地方直接写原始的路径不需要写扩展空间的路径,如写为/system/data,不能写为/system_X/data
UI2下如果有扩展空间在菜单功能配置文件、.w、.js,用到扩展空间中的文件时路径需要配置为原始的路径不需要写扩展空间的路径,如写为/SA/task/mainActivity.w,不能写为/SA_X/task/mainActivity.w
如果有相关的菜单功能配置文件中有相关的路径的调整,调整后需要重新分配一下这个功能的权限
BIZ/system必须用系统的,如果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对应的位置下
其中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
执行后ide中执行“提交并更新”
添加了配置文件后需要打开gitlib修改这个应用下的.gitignore文件,搜索/UI2/portal,/UI2/system等需要用自己资源的目录配置,删除并提交,注意配置文件中配置的目录不能删除
修改了配置后需要用系统管理员账号登录,在“池管理”中找到当前应用的ide的pod,进入pod中的tomcat容器,执行以下命令:
cd $JUSTEP_HOME/model/service/comp/svnSync/deploy
bash sync.sh
命令执行完成后切换到浏览器的ide页签执行强制覆盖本地
强制覆盖后刷新ide再打开如果报组件的java编译失败,用系统管理员账号登录,在“池管理”中找到当前应用的ide的pod,进入pod中的tomcat容器,执行以下命令进行编译:
cd /usr/local/x5/tools/compile
bash compileUI.sh
编译结束后执行下面的命令重启tomcat,然后再刷新ide即可
supervisorctl restart tomcat
使用了自己的UI2/system后不能使用ide中发布按钮进行发布需要参考
数据源配置为已有的数据库,需要添加下面的配置,表示bex5使用外部数据库,发布时将不执行具体的数据库初始化逻辑
在servie\main\deploy下的dev、production.kube、production.pool文件中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.pool.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.pool.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.pool.def.xml文件中添加BEX5_PUSH_SERVER、BEX5_MQTT_SERVER和BEX5_EXTERNALUI_SERVER配置
BEX5_EXTERNALUI_SERVER的value值是最终运行的租户entry应用的域名再加/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.pool.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文件重新发布模版后,在最终使用模版的应用通过配置环境变量可以修改,操作步骤如下:
1). 运行租户登录,打开应用服务管理列表
2). 打开应用的配置

3). 打开环境变量设置

4). 打开main主服务的设置参数

5). 填写用户名和密码点确定,然后重启应用

redis的标签的创建
可以新建一个租户如redis,添加kube集群
system登录控制台——资源管理——RDS服务管理(redis)——新建分组——新建标签
创建分组后,在列表中找到新创建的点击明细
新建——选择应用模版(选择下面红框的模版)
租户和集群就选择redis租户和对应的kube集群
配置数据库参数的时候需要注意,推荐的方案是在每个应用上把所有的数据源都配置上(如果有跨模块调用数据操作的需要可以通过配置的数据源操作)
执行系统库执行数据库升级脚本
到system数据库中修改sa_docnamespace中docserver的地址,如果使用平台提供的BeX5文档,需要配置为此服务的是内网地址,在服务注册中可以看到内网地址,如果是使用已有的文档服务器,就修改为自己已有的文档服务器地址即可,如下: http://bizdoc.nd-tenant-bex5pud/DocServer
如果需要把之前上传的文件拷贝的云上可以通过连接linux进行文件复制的工具实现,如WinSCP,具体的服务器连接信息可以通过下面方式查找:
1).system登录控制台打开运维管理功能,然后打开Kube控制面板
2).在common命空间下找到minio的pod
3).进入上面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"/>
如果文档服务器用数据库是默认分配,需要用系统管理员账号登录,在“池管理”中找到当前应用的正式池的pod,进入pod中的tomcat容器,创建activemq-data、backup、blobstore、indexstore、logs目录
如下命令:
cd /storage/data/doc
mkdir blobstore
访问:http://entryxxx-vip.xxxx/, 域名就是“应用/服务管理”的应用列表中企业门户的域名
如果需要定时更新资源可以配置定时滚动更新
配置定时任务,具体执行操作的配置
login:
url: http://console.a.xcaas.com
user: system
passwd: www
enabled: true
request:
- label: "滚动更新"
url: "http://console.a.xcaas.com/service/ide/app/deploy"
options:
- option: "-X"
val: "POST"
- option: "-H"
val: "Content-Type: application/json; charset=utf-8"
- option: "-d"
val: "{\"submitter\":\"yupdate2\",\"consoleUrl\":\"http://console.a.xcaas.com\",\"domainprefix\":\"updatetmp2yupdate28\",\"title\":\"updatetmp2\",\"releaseMode\":\"market\"}"
success: ['200']
http://console.a.xcaas.com是控制台的地址,把a.xcaas.com换为自己的控制台域名
updatetmp2yupdate28发布的模版ide的url第一个中划线前面的值
yupdate2创建这个模版的租户名
如果需要手动更新资源步骤如下:
(1).用开发租户登录控制台
(2).F12打开浏览器的开发人员调试工具在console(控制台)执行下面的代码
function autoDeploy(domainprefix, submitter){
$.ajax({
type : "POST",
contentType : "application/json",
url : "/service/ide/app/deploy",
dataType : 'json',
data : JSON.stringify({
domainprefix: domainprefix,
submitter: submitter,
title: "auto deploy",
consoleUrl: window.location.origin,
releaseMode: "market"}),
success : function(res) {
console.log("触发自动发布成功")
},
error : function() {
console.log("触发自动发布失败");
}
});
};
autoDeploy("updatetmp2yupdate28", "yupdate2");
updatetmp2yupdate28发布的模版ide的url第一个中划线前面的值
yupdate2创建这个模版的租户名
资源更新中提供的发布模版的租户是指发布市场模版的租户
新加一个应用模块需要做以下步骤:
(1). 修改app表;
控制台——所有命名空间——容器组——appservice(随便一个进入)——容器内容中找到数据库连接信息
控制台——管理员中心——数据库管理
服务器输入DB_ULR的中间部分,如db-mariadb-svc.newdao-console:3306 用户名:console 密码 登录后选择console-app表——过滤数据DOMAIN_PREFIX 选择 like%% 值输入应用名+租户code,如portalent1 找到DEF_ID为BEX5_PROD的记录,下载APP_CONFIG字段的内容,修改BeX5_apps字段的值,再上传文件
(2). 重新发布模板;
(3). 发布完模板后, 浏览器输入:
http://entryent14-vip.app.a.xcaas.com/entry/manager/services/refresh/portal
其中portal表示修改应用