外部应用导入说明
场景描述
外部应用导入支持的应用场景: 用户在newdao云环境之外已有的应用代码,需要发布到newdao云进行运行管理,并与newdao平台的其他应用进行集成(门户)
实现思路
使用平台的外部导入应用模版,引入编译好的jar包或应用资源包,通过架构配置数据库相关信息,设定环境变量、路由及初始化数据后进行发布
外部应用预览说明:开发环境下不能运行预览,按步骤配置完毕后正式部署后才能运行预览
导入方式及文件类型说明
应用导入的两种方式
- 上传文件
- 源码仓库导入(暂未实现)
上传文件类型
- war二进制文件: 编译为war文件的java应用,上传编译后的war文件,在tomcat容器中运行。
- jar二进制文件: 编译为jar文件的java应用,上传编译后的jar文件,通过
java -jar ...
命令启动运行。 - 前端应用资源包: 仅包含静态web文件(html,css,js,img)的前端应用,上传zip文件包,通过nginx对外提供服务。
- war应用模块源码包: 编译为war文件的java应用(使用maven构建),上传完整服务模块(包括源码),newdao云平台构建生成war文件后在tomcat容器中运行
- jar应用模块源码包: 编译为jar文件的java应用(使用maven构建),上传完整服务模块(包括源码) newdao云平台构建生成war文件后 通过
java -jar ...
命令启动运行。 - newdao云jarslinkr应用模块源码包: 使用maven编译为jar,通过jarslink模块系统加载运行。
应用模块源码包说明
应用模块中可包含资源
- 应用源码 (src)
- 应用部署文件(dist)
- 架构图定义文件(deploy/*.def.xml)
- 数据模型/服务模型文件(data.m,servie.m 可选)
- serviceMetaInfo
- api定义文件(openapi json doc, service.m)
应用模块文件结构
使用组件包文件结构,打包为 zip 文件
{moduleName}/package.json 模块包元数据
{moduleName}/service/
{moduleName}/service/{moduleName}/
{moduleName}/service/{moduleName}/{moduleName}.meta meta文件
{moduleName}/service/{moduleName}/deploy/*.def.xml 模块部署文件
{moduleName}/service/{moduleName}/*.data.m 数据模型文件(建表支持)
{moduleName}/service/{moduleName}/*.openapi.json
{moduleName}/service/{moduleName}/*.service.m openapi接口定义
{moduleName}/service/{moduleName}/src/* 源码
{moduleName}/service/{moduleName}/dist/* 应用部署文件
serviceMetaInfo支持
外部应用导入的服务模块在 package.json 模块元数据文件中声明整个应用的serviceMetaInfo访问路径。
外部应用模块导入后,系统合并模块网关配置和模块声明的 serviceMetaInfo 访问路径配置生成最终的访问路径并覆盖 service-meta-info 系统模块的 path属性
例如应用模块的网关配置: /app1
, 模块指定的 serviceMetaInfo访问路径为 /serviceInfoMeta
, 最终的访问路径是 /app1/serviceInfoMeta
package.json模块元数据文件示例
{
"name": "app1",
"description": "模块导入测试",
"author": "justep_co",
"license": "ISC",
"keywords": [],
"version": "1.1.1",
"moduleInfo":{
"serviceMetaInfo":{
"path":"/serviceInfoMeta"
}
}
}
定义serviceMetaInfo服务信息示例
public String serviceMetaInfo() throws Exception {
String ret = "{"+
"\"authorize\":{" +
"\"permissions\":[{" +
"\"code\":\"*:https://orderg4154-g415-ide.f.xcaas.net/x5/UI2/main/dingdan.w:get\"," +
"\"id\":\"dingdan\"," +
"\"name\":\"主页\"," +
"\"type\":\"menu\"," +
"\"ui\":false" +
"}]," +
"\"roles\":[{" +
"\"code\":\"authc\"," +
"\"id\":\"authc\"," +
"\"name\":\"注册用户\"," +
"\"permissions\":[\"*:https://orderg4154-g415-ide.f.xcaas.net/x5/UI2/main/dingdan.w:get\"]" +
"}]" +
"}," +
"\"menu\":{" +
"\"children\":[" +
"{" +
"\"children\":[]," +
"\"ext\":{}," +
"\"order\":0," +
"\"title\":\"订单\"," +
"\"types\":[\"func\",\"pc\",\"openPage\"]," +
"\"url\":\"https://orderg4154-g415-ide.f.xcaas.net/x5/UI2/main/dingdan.w\"" +
"}" +
"]," +
"\"ext\":{}," +
"\"order\":0," +
"\"title\":\"订单系统\"," +
"\"types\":[]" +
"}," +
"\"serviceInfo\":{" +
"\"label\":\"order\"," +
"\"name\":\"order\"" +
"}""+"}";
return ret;
}
具体操作步骤说明
1 创建外部应用模板
创建一个外部导入应用(在企业应用下使用平台的外部导入应用模版)
2 服务模块管理
- 创建服务模块,创建时需要选择 运行环境,模块的运行环境决定了该模块可以上传的文件,如果上传了错误的文件类型,服务模块将不能正常工作。应用的运行环境,目前支持4种环境,不同的运行环境支持上传的文件不同。
- tomcat: 要求上传二进制 war文件,通过tomcat运行
- java: 要求上传二进制jar文件,通过
jar -jar ...
命令运行 - nginx: 要求上传zip格式的文件,其中仅包含前端web应用的静态资源文件
- 自动: 要求上传完整的服务模块(包括应用源码),系统根据架构图定义文件自动判断应用的运行环境。
- 打开ide,模块页签,点击模块设置,添加自己的服务模块
3 上传服务模块部署文件
在"模块"页签中,选择对应的服务模块,选择导入方式为"上传" 然后上传模块需要的文件类型。上传文件后确定,
4 架构图
架构图中提供了系统架构的配置功能,例如应用数据的数据库配置,引入redis组件等。
5 配置服务模块
在"配置" 页签中对服务模块进行配置
- 环境变量映射: 将服务模块的属性映射到要使用的环境变量,应用代码中可以使用该环境变量访问服务模块配置。例如在服务模块中定义了jdbcUrl属性,将其映射为
DB_URL
,在应用代码中可以通过该环境变量访问到 jdbcUrl。在spring配置中可使用${DB_URL}
访问 jdbcUrl - 启动命令行: 如果jar文件启动需要特殊的参数,可以通过配置启动命令行实现
初始化配置: newdao运行应用的数据库初始化使用数据模型文件定义(data.m)可以在初始化配置UI中上传包含data.m 文件的的zip文件,系统将使用这些data.m对数据库进行初始化。对于上传完整模块包的服务模块,不能再上传数据库初始化模型。
<data> <class /> <mapping xmlns="http://www.justep.com/model" table="tb_emp"> <extsql> <mysql> <![CDATA[ CREATE TABLE `tb_emp` ( `id` int(11) NOT NULL AUTO_INCREMENT, `department` varchar(255) DEFAULT NULL, `dob` date DEFAULT NULL, `gender` varchar(255) DEFAULT NULL, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; -- ===data=== insert into `tb_emp`(`id`,`department`,`dob`,`gender`,`name`) values (1,'dev','1998-04-02','男','张三'),(2,'dev','1998-04-02','男','李四'),(3,'dev','1998-04-02','男','王五'),(4,'aa','1998-04-02','aa','aaaa'); ]]> </mysql> </extsql> </mapping> </data>
代理网关: 每个应用都有一个应用网关,所有服务模块需要在网关上访问入口。服务网关使用kong,使用kong的配置规则。
- 服务网关: 企业应用发布后集成到企业门户,通过企业门户中的菜单访问。这里配置在企业门户中访问的入口。使用kong的配置规则。
6 代码
对应用源文件进行直接编辑。
7 执行发布
配置完成后,点击发布进行发布即可。
上传WAR使用Tomcat的ROOT的操作说明
1 上传ROOT.war
将war的名称改为ROOT.war,上传如下图所示
2 设置代理网关
选中使用根路径访问,应用路径设置为/,如下图所示
代理网关对应model/service/ROOT/app.m文件,上面的设置生成的代码如下
移动Tomcat的ROOT.xml文件
切换到代码页,展开model/service/ROOT目录,在deploy目录下添加install.sh文件,移动Tomcat的ROOT.xml文件,内容如下:
mv /usr/local/tomcat/conf/Catalina/localhost/ROOT.xml /usr/local/tomcat
经过上面的三个步骤,可以直接使用域名访问了。