外部应用导入说明

场景描述

外部应用导入支持的应用场景: 用户在newdao云环境之外已有的应用代码,需要发布到newdao云进行运行管理,并与newdao平台的其他应用进行集成(门户)

实现思路

使用平台的外部导入应用模版,引入编译好的jar包或应用资源包,通过架构配置数据库相关信息,设定环境变量、路由及初始化数据后进行发布

外部应用预览说明:开发环境下不能运行预览,按步骤配置完毕后正式部署后才能运行预览

导入方式及文件类型说明

应用导入的两种方式

  1. 上传文件
  2. 源码仓库导入(暂未实现)

上传文件类型

  1. war二进制文件: 编译为war文件的java应用,上传编译后的war文件,在tomcat容器中运行。
  2. jar二进制文件: 编译为jar文件的java应用,上传编译后的jar文件,通过 java -jar ... 命令启动运行。
  3. 前端应用资源包: 仅包含静态web文件(html,css,js,img)的前端应用,上传zip文件包,通过nginx对外提供服务。
  4. war应用模块源码包: 编译为war文件的java应用(使用maven构建),上传完整服务模块(包括源码),newdao云平台构建生成war文件后在tomcat容器中运行
  5. jar应用模块源码包: 编译为jar文件的java应用(使用maven构建),上传完整服务模块(包括源码) newdao云平台构建生成war文件后 通过java -jar ... 命令启动运行。
  6. newdao云jarslinkr应用模块源码包: 使用maven编译为jar,通过jarslink模块系统加载运行。

应用模块源码包说明

应用模块中可包含资源

  1. 应用源码 (src)
  2. 应用部署文件(dist)
  3. 架构图定义文件(deploy/*.def.xml)
  4. 数据模型/服务模型文件(data.m,servie.m 可选)
  5. serviceMetaInfo
  6. 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 服务模块管理

  1. 创建服务模块,创建时需要选择 运行环境,模块的运行环境决定了该模块可以上传的文件,如果上传了错误的文件类型,服务模块将不能正常工作。应用的运行环境,目前支持4种环境,不同的运行环境支持上传的文件不同。
    1. tomcat: 要求上传二进制 war文件,通过tomcat运行
    2. java: 要求上传二进制jar文件,通过 jar -jar ... 命令运行
    3. nginx: 要求上传zip格式的文件,其中仅包含前端web应用的静态资源文件
    4. 自动: 要求上传完整的服务模块(包括应用源码),系统根据架构图定义文件自动判断应用的运行环境。
  2. 打开ide,模块页签,点击模块设置,添加自己的服务模块

3 上传服务模块部署文件

在"模块"页签中,选择对应的服务模块,选择导入方式为"上传" 然后上传模块需要的文件类型。上传文件后确定,

4 架构图

架构图中提供了系统架构的配置功能,例如应用数据的数据库配置,引入redis组件等。

5 配置服务模块

在"配置" 页签中对服务模块进行配置

  1. 环境变量映射: 将服务模块的属性映射到要使用的环境变量,应用代码中可以使用该环境变量访问服务模块配置。例如在服务模块中定义了jdbcUrl属性,将其映射为 DB_URL ,在应用代码中可以通过该环境变量访问到 jdbcUrl。在spring配置中可使用 ${DB_URL}访问 jdbcUrl
  2. 启动命令行: 如果jar文件启动需要特殊的参数,可以通过配置启动命令行实现
  3. 初始化配置: 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>
    
  4. 代理网关: 每个应用都有一个应用网关,所有服务模块需要在网关上访问入口。服务网关使用kong,使用kong的配置规则。

  5. 服务网关: 企业应用发布后集成到企业门户,通过企业门户中的菜单访问。这里配置在企业门户中访问的入口。使用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

经过上面的三个步骤,可以直接使用域名访问了。

results matching ""

    No results matching ""

    results matching ""

      No results matching ""