1.19.冰刀:部署

冰缩寒流,川凝冻霭,前回鹭渚冬晚。燕阁红炉,驼峰翠釜,曾忆花柔酒软。――刘天游《氐州第一》

    本篇为实战总结帖,主要用于多个项目同时运行时的统一文档,目前Zero上已经运行了几个比较重量级的项目,本文主要针对几个平台从环境搭建、开发、运行、测试到部署进行基于实战的讲解,以Step-By-Step的方式让开发人员能更加流畅搭建Zero的企业实战开发环境。本文内容和原始教程中的内容略微有些出入,是因为引用了更多Zero Extension中的模块来辅助开发,所以此文算是Zero Core和Zero Extension的交叉参考教程。

「壹」开发环境

1.1. 环境介绍

1.1.1. 基础环境

    最新的依赖库版本如下:

依赖库
类型
版本

NodeJs

前端

16.14.0

Yarn

前端

1.22.17

Ant Design

前端

3.26.19

React

前端

16.14.0

JDK

后端

11

Maven

后端

3.8.5

Zero

后端

0.8.1 ~

Vertx

后端

4.2.6

ElasticSearch

集成(全文检索)

7.x ~

Neo4j

集成(拓扑图)

4.x ~

Camunda

集成(工作流)

7.x ~

MySQL

数据库

5.x

Oracle

数据库

12.x

TiDB

数据库

5.x

1.1.2. 特殊说明

基础环境部分

可选扩展部分

  • 如果使用了动态建模 (zero-atom)功能,则需要根据您的数据库下载相关依赖库:https://github.com/silentbalanceyh/vertx-zero/tree/master/vertx-pin/zero-vista ,若是其他类型数据库需参考内置源代码自己写一套基础插件。

  • 集成部分的ElasticSearch、Neo4j、Camunda、Redis根据您自身项目情况而定。

  • 动态建模/动态路由功能根据您自身项目情况而定。

  • Zero的基础版本是支持微服务和K8S(Istio)的,而此功能受限于目前项目,处于实验性版本阶段,需启用vertx-istio项目。

1.1.3. 脚手架数据

    本教程假设您的基本环境如下:

实体
必须/可选
类型
含义

Maven仓库

x

依赖库目录

~/.m2/repository

本地开发

x

工作目录

~/runtime/develop

生产存储

可选

工作目录

~/runtime/zero-store/(文档管理专用)

生产部署

x

工作目录

~/server(前后端一致)

DB_UP

x

数据表

数据库中的主库

DB_UP_WF

可选

数据表

数据库中工作流专用库(Camunda库)

DB_UP_HIS

可选

数据表

数据库中的删除历史库

DB_XX

可选

数据表

动态建模专用库

    :可选部分根据您搭建环境过程中选择的zero extension模块进行相关定义,最新版的模块化会自动化部署相关模块已经环境内容,详细部分参考后续章节,从0.8.1 的版本开始,zero extension扩展模块引入了OOB——Out Of Box开箱即用的配置数据,若您启用了OOB功能,即使您的系统内没有任何内容,这些配置数据都会跟随本教程的发布流程进入到您的主库中。

1.1.4. 默认登录

  • 默认账号:falcon(开发者)

  • 默认密码:11111111


1.2. zero主框架

    如果您不关注最新版的功能,直接使用0.8.1版本,则可跳过该步骤,由于zero本身是一个跟着项目成长很迅速的项目,所以在1.0 版本发布之前,个人推荐紧跟最新版本走。虽然最新版本是X-SNAPSHOT,基础功能已经经过了生产环境验证,所以该版本是可靠的;再者,最新版本会包含一部分重用性极高的新功能,如0.9.0-SNAPSHOT中引入的:

  • 文档管理平台(FTP、SSH)

  • 模块化管理平台(License、Modulat)

  • 工作流标准化平台(ITSM、ISO)

  • WebSocket功能(正在开发中,用于提醒)

  • 短信邮件集成

    zero框架导入的操作步骤如下:

  1. 进入目录~/runtime/develop/中,下载vertx-zero代码到环境中:

  2. 下载完成后~/runtime/develop中会有一个vertx-zero目录,使用IDEA导入该目录中的项目:

    • 2.1. 启动IDEA

    • 2.2. 选中下载的vertx-zero目录中的pom.xml文件(自动导入成Maven类型的项目)

    • 2.3. 在弹出的对话框中选择Open as Project(以项目方式打开)

    • 2.4. 如果弹出下边对话框,直接勾选Trust projects in ~/runtime/develop,然后点击Trust Project

    • 2.5. 等待右下角的项目初始化完成

    • 2.6. 若您点开进度条会看到正在执行的后台任务,请等待后台任务全部完成后再执行下一步

    • 2.7. 项目初始化过程中,系统会下载部分所需的Maven依赖包,您的Maven库中会开始有内容 (注:如果之前您的Maven目录中已存在相关库,则可忽略,Demo从空Maven库开始初始化以方便初学者理解。):

  3. 导入完成后,检查IDE中的JDK运行环境是否符合:File -> Project Structure...,推荐11

    此处注意Language level(语言级别),从zero0.7.x版本开始,框架引入了Camunda工作流引擎,该引擎最新版本最低要求支持JDK11,基于这一点出发,zero也将JDK从8升级到了11,所以从该版本开始所有的Java环境以11为准。

  4. 打开Terminal终端,使用内置脚本(mvnd环境)编译vertx-zero

    zero-compile.sh内容如:

    上述步骤的编译不会触发zero的测试流程,如果使用mvnd clean package install 方式处理,会触发zero的测试流程,使得整个框架编译的时间拉长,所以不推荐clean package install方式,这种方式仅留给zero的研发人员 使用。编译成功后,您的开发环境Maven库中就安装了最新的zero版本,目前是0.9.0-SNAPSHOT


1.3. zero插件环境(可选)

    如果您在项目中使用了动态建模功能(启用zero-atom ),此步骤是必须的,动态建模为高级功能,只有在引入主框架的场景下可使用,直接从中心仓库下载的依赖库中并不包含动态建模部分,此功能目前依然处于研发阶段,只有最新版可支持。

    操作步骤如:

  1. 执行Oracle依赖库的安装脚本(动态建模编译必须,运行可根据您的项目情况而定)

    install-oracle-jar.sh的内容如:

  2. 在IDEA的Maven窗口中添加新项目:

  3. 导入项目vertx-zero/vertx-pin/zero-vista/(选择pom.xml文件)

  4. 导入项目后直接编译zero-vista

  5. 如此您就可以直接在项目中使用动态建模的SQL DDL插件了,使用时只需要在pom.xml中引入下边片段即可(根据您使用的数据库选择合适的插件):

    zero中的数据库支持以MySQL和TiDB为主,目前开放的支持的数据库种类基于项目需求。


1.4. GitHub安全设置

注:当您作为协作者Coordinator提交代码时必须此步骤!

    由于Github站点升级,当你作为Coordinator加入到项目开发时,新版本已不推荐使用用户名/密码方式拉取代码,而是需要在您的账号中生成个人的access_token ,拉取项目代码时使用该access_token拉取。

    其操作步骤如下:

  1. 登录您的Github个人账号空间,右上角选择Settings菜单:

  2. 选择左边菜单中最下边的Developer Settings

  3. 选择左边菜单Personal access tokens,然后点击Generate new token按钮

  4. 勾选好您所需的权限后直接点击Genarate token按钮:

  5. 在结果页记录下您的个人token:

  6. 进入您的项目环境中,执行如下操作步骤进行库关联,先查看目前的远程库版本:

  7. 您的远程库名称为origin,执行如下命令:

    注意上述命令格式,token的位置介于https://github.com之间,并且以@结尾。

  8. 再次查看您的远程库,库路径已发生改变:

    完成上述步骤之后,基本设置就完成了,当然在后续步骤中您可以直接使用git clone https://<Token>@<Repo>的方式拉取代码,则 6 ~ 8 步骤可省略 ,即下边命令:


1.5. 项目后端

    如果从头搭建zero脚手架,使用新建流程,若是导入已经搭建好的项目则使用导入流程。

1.5.1. 新建

    新建项目可直接下载最新的脚手架版本:https://github.com/silentbalanceyh/scaffold-zero,然后根据自身项目修改如下内容:

    其中数据部分需修改Excel数据文件中的内容,这部分教程在配置章节讲解,上述修改部分参考本教程的配置篇来详细修改,一旦搭建好环境后就不用再变更,为一次性操作。

1.5.2. 导入

    导入项目时如果作为Coordinator需更改项目内容,参考《1.4.Github安全设置》先配置个人token,导入的操作步骤执行如下:

为了区分标准脚手架和新项目,从scaffold-zero中下载的项目在此章节为smave名称,从新建到配置完成的部分参考后续各配置章节。

  1. 从仓库下载代码(带token安全下载):

  2. 参考《1.3.zero插件环境》直接添加一个新的Maven项目到IDEA环境中,添加完成后效果如:

    注:vertx-zero和smave共存于一个IDEA窗口中

  3. 打开终端,执行根目录的编译脚本

  4. 编译成功后可以看到如下截图(如此后端基本开发环境就搭建完成了)

1.5.3. 初始化

    Zero脚手架的初始化流程操作步骤如下:

  1. 为了团队协作开发,先在自己本地开发环境中追加如下hosts映射(部署时另外配置):

  2. 为您的应用创建MySQL数据库账号:

  3. 执行数据库建库脚本

    账号密码位于脚本 database-reinit.sh,请自行修改,按第二步创建的账号更改即可,推荐团队开发账号统一。

    重建完成后,可以看到空库(文中仅演示了最小配置,不带工作流库、动态库、删除历史备份库,其他库的配置参考后续配置章节处理):

  4. 执行初始化脚本,zero中的初始化使用liquibase完成,直接运行如下脚本:

    执行完初始化脚本后可以在数据库看到生成的表结构:

  5. 重要!」执行下边命令备份最新表结构用于生产发布:

  6. 表创建好过后,执行数据导入专用程序:cn.vertxup.SvLoader

  7. 重要!」从此处开始,所有直接从IDEA中运行的主程序都必须配置好运行目录,否则无法以正确路径的方式加载数据,该步骤在生产环境中是不需要的,先点击SvLoader的运行配置:

  8. 重要!」点开运行配置后设置您的主程序的运行目录并保存该配置:

    重要的事情说三遍:

    • 注意第二个红色框,这一步对开发人员十分重要!*

    • 注意第二个红色框,这一步对开发人员十分重要!*

    • 注意第二个红色框,这一步对开发人员十分重要!*

  9. 然后点击运行或调试运行执行数据初始化主程序

    运行完成后可看到如下日志:

    如此,数据初始化就完成了,这个SvLoader可以在您更改了任何/init/oob中的数据过后执行反复初始化操作,属于高频使用的主程序,而本小节的初始化流程 也会在开发过程中反复使用。

1.5.3. 启动

    容器启动流程操作步骤如下:

  1. 初始化完成后,直接运行主程序:cn.vertxup.SvAgent

  2. 看到如下界面,后端zero容器就启动成功了:


1.6. 项目前端

    如果是自己从头搭建zero-ui脚手架,则使用新建流程,若是导入已经搭建好的项目则使用导入流程。

1.6.1. 新建

    新建zero-ui项目先安装zero的脚本工具:https://www.vertxai.cn/,安装好工具之后直接运行如下命令:

    新建项目后根据自身项目修改如下内容:

1.6.2. 导入/启动

    前端导入使用WebStorm,操作步骤如下:

  1. 从仓库下载代码(带token安全下载):

  2. 将代码导入WebStorm或其他前端工具IDE中:

  3. 选中您下载的项目打开

  4. 弹出框中选择

  5. 安装本地依赖库,基于yarn,一次性执行,生产部署之前也需执行

    脚本内容如下

    上述脚本运行完成后可看到如下截图:

  6. 运行启动脚本

    最终运行后可看到如下截图

  7. 从浏览器中打开前端:http://ox.server.cn:PORT/zo/login/index,此处PORT是前端配置的端口号: 如果连接不上后端显示

    如果连接上后端则显示

  8. 使用falcon/11111111登录可进入主界面。

「贰」生产环境准备


2.1. JDK

2.1.1. Open JDK

  1. 直接使用Ubuntu工具安装JDK 11:

    执行过后会有如下截图

  2. 验证Java是否安装成功

  3. 最终安装路径:/usr/lib/jvm/java-11-openjdk-amd64,后续设置JAVA_HOME

2.1.2. ZuLu JDK 11(推荐配置)

  1. 安装Azul APT仓库:

    执行包安装的截图如下:

  2. 执行命令安装Zulu JDK 11:

  3. 本地安装Zulu JDK 11:

    安装截图如:

  4. 检查Java版本

  5. 最终安装地址:/usr/lib/jvm/zulu-11-amd64,后续设置JAVA_HOME


2.2. Git

  1. 直接使用Ubuntu工具安装Git:

  2. 验证Git是否安装完成


2.3. Mvnd

  1. 下载安装包:

    执行截图

  2. 对安装包执行解压:

  3. 重命名目录


2.4. 环境变量

该章节为2.2、2.3的补充章节。

  • Java环境变量

  • Mvnd环境变量

  1. 执行下边命令打开环境变量文件:

  2. 追加如下片段(按i键编辑):

    截图参考

  3. 编辑完成后执行Esc,使用wq退出vim工具并保存,然后执行下边命令在当前会话中生效

  4. 检查Java和Mvnd

    • Java环境检查:java -version

    • Mvnd环境检查:mvnd -v


2.5. MySQL

  1. 执行命令安装MySQL

  2. 验证安装好的服务

  3. 新版本操作系统安装5.7(参考引用中教程先设置,然后执行此步骤的命令):

  4. 配置root密码

  5. 配置mysql

    追加下边配置

    为了兼容Oracle数据库,zero对数据库的要求是大小写敏感的,且以大写为主,所有SQL关键字、数据库相关的内容都一律使用大写。

  6. 重启MySQL服务

  7. 验证MySQL服务和端口

  8. 连接MySQL

  9. 创建您的应用所需账号:


2.6. NodeJs

  1. 下载NodeJs安装包:

  2. 解压

  3. 重命名目录(为后续方便):

  4. 环境变量配置

    追加下边内容

  5. 保存后执行下边命令让环境生效

  6. 验证环境:

  7. 安装yarn,yarn在安装过程请使用全局模式安装-g参数。


2.7. Zero Ai安装

  1. 执行安装命令

  2. 检查安装结果:


2.8. Httpd

  1. 执行命令安装服务器:

  2. 查看服务器运行状态

  3. 修改端口和根目录

    • 进入默认配置目录/etc/apache2/

    • 在文件ports.conf中修改内容

      追加下边配置

    • 创建默认目录

    • 修改默认配置

      修改开始配置以及中间配置(注意此处目录不可使用root账号目录,否则)

    • 为防止403错误,需要在/etc/apache2/apache2.conf配置文件中追加

      此步骤是因为在配置过程中我们更改了apache2的默认目录,从/var/www/html修改到了/home/localadmin/server中,如果您没有更改默认目录则可忽略这一步。

    • 生产环境部署时,有时候会遇到刷新界面404的问题,该问题解决方案如下:

      在您的部署目录下追加.htaccess文件,该文件内容如下:

  4. 最后重启apache2服务

「叄」部署应用

  • 以 smave 为例,基本结构和在线的 scaffold-zero 一致


3.1. 后端部署

  1. 在后端服务器中追加数据库配置,先添加hosts映射:

  2. 本地打包忽略)下载代码到生产环境

  3. 本地打包忽略)执行下边命令编译打包:

  4. 本地打包忽略)查看编译结果

  5. 本地编译后直接跳过 2 ~ 4 步骤,拷贝下边目录到容器启动目录

  6. 查看server目录结构

  7. server目录中创建启动命令工具和容器启动的脚本

    • 程序更新脚本如下:

      如果您更改了conf部分的配置,请在更新时注意先备份,更新过后再还原,如下截图:

    • 表结构初始化脚本:

    • 命令行启动脚本如下:

    • 容器启动脚本如:

  8. 更改配置文件

    • 更改跨域配置:

      将最后一行内容更改为(注意域名小写,浏览器会自动转。):

    • 文件管理地址更改:

      将内容更改为:


3.2. 数据初始化

    database-reinit.sh脚本在开发章节已经存在,此处不再重复,可以将该部分脚本拷贝到~/server/script/中。

  1. 第一次或表变更)执行数据库初始化

  2. 第一次或表变更)执行建库操作,开发过程中已经导出了表结构的SQL,直接执行上边的建表的脚本

  3. 启动命令行工具

  4. 执行命令:rl导入数据(Zero Ai命令)

  5. 启动容器:

  6. 启动容器后可从日志查看容器启动状态:

    最终输出如下:

  7. 同时在logs/目录中可以看到日志清单:

    • zero-epic-fabric目录中是核心框架日志

    • zero-epic-extension目录中是扩展框架日志

    • zero-epic-fabric.log是汇总后的日志

  8. 在运行日志中确认两个配置以证明conf目录下的内容已生效

  9. 执行下边命令可看到运行的java进程:


3.3. 前端部署

  1. 下载代码到前端服务器中

  2. 安装前端依赖库

  3. 由于生产环境的环境变量已经提前设置了,在./env.production文件中,所以安装好依赖库后,前端可直接打包

  4. 最后将build中的所有内容拷贝到~/server中。

  5. 使用浏览器打开,您就可以看到如下界面:

「肆」配置调整


4.1. hosts映射配置

    本章节主要解析几个常用的内置映射域名相关信息,需注意的是此处的域名只是为了团队协作开发,并不是真实存在的域名,zero系统中包含三个核心域名:

域名
含义
开发端映射
生产端映射

ox.engine.cn

访问数据库专用域名。

Ok

Ok

ox.server.cn

访问后端容器专用域名。

Ok

x

ox.integration.cn

访问集成服务专用域名。

Ok

x

    这三个域名映射需要您添加到本地hosts映射中:

    三个域名的使用结构图如下:

    特殊说明

  • 使用域名访问服务可以保证不同的开发人员直接通过调整本地域名映射访问外置服务,主要处理以下几种核心场景:

    • 开发数据库/测试数据库/生产数据库在不改变代码的情况下自由切换。

    • 不同的集成服务在不改变代码的情况下自由切换。

    • 不同开发人员访问这些服务时在不改变代码的情况下自由切换。

  • 一般在生产环境部署时,前端zero ui和后端zero只有在同一台服务器上运行时,不需要更改ox.server.cn的域名配置,通常部署时候我们会采用两台以上的机器分离部署,所以生产部署时会单独配置ox.server.cn

  • 一般在生产环境部署时,后端zero和所有的集成服务在同一台服务器上运行时,不需要更改ox.integration.cn的域名配置,但往往生产环境部署时这些集成服务和后端zero都是分离的,也会单独配置。

  • 后端zero以及开发工具访问所有数据库时统一使用了ox.engine.cn的域名访问,除非生产环境部署时数据库和后端zero分离,否则不需要更改ox.engine.cn的域名配置。

4.1.1. 服务域名

4.1.1.1. 程序访问

    数据库域名统一在vertx-jooq.yml中配置:

    在脚手架配置中您会看到下边几段配置代码(省掉数据库连接参数):

4.1.1.2. Liquibase访问

    zero中使用使用liquibase执行数据库初始化,它的数据库配置位于文件:

    该配置是一个属性文件,内容通常如:

4.1.1.3. Jooq代码生成访问

    zero中的Jooq代码生成配置位于领域模型定义的项目中,它的数据库配置位于文件:

    该配置文件是一个XML文件,内容通常如:

4.1.2. 容器域名

4.1.2.1. 跨域CORS

    CORS跨域访问的域名一般位于vertx-jooq.yml配置文件的尾端,其片段如下:

4.1.2.2. 前端Endpoint

    当您的zero-ui前端访问后端zero容器时,前端的访问配置位于环境变量文件中:

    环境变量文件主要有两个:

  • .env.development:开发环境专用

  • .env.production:生产环境专用

4.1.3. 集成域名

    所有集成域名目前也位于vertx-jooq.yml配置文件中,只是在脚手架项目里被注释掉了,需要使用时直接打开即可:

    细心的读者已经发现,后端配置所有的域名的位置比较集中:

  • 除开Jooq/Liquibase工具使用的域名需要单独配置,这两个工具主要是开发过程中使用,生产部署时不会使用,可理解成一次性配置,配置好过后不需要更改。

  • 生产部署专用的域名配置全部位于vertx-jooq.yml文件中,这样设计的目的也是为了方便修改以及执行DevOps配置流程。


4.2. Maven项目标识

    本来这个章节是Maven的基础知识,应该是不需要教程就可以过的知识点,但为了照顾初学者,本小节可以帮助您从零开始搭建一个scaffold-zero的脚手架基础项目,在看章节步骤之前,先看看几个项目的作用:

项目
类型
说明

zo-core

pom

您项目模块核心层父项目。

zo-core/zo-business

jar

您项目模块的业务逻辑层。

zo-core/zo-domain

jar

您的项目模块的领域模型层。

zo-driver

pom

您项目的启动器容器。

zo-driver/ix-starter

jar

您项目的启动器(主项目)。

    特殊说明:

  1. 数据访问层?整个项目结构中没有数据访问层是因为zo-domain中的静态领域模型是使用Jooq代码生成工具生成,生成过程中已经带有Dao层的代码,并且在编程过程中,借用zero提供的抽象数据层以及查询引擎,不需要使用任何多余代码就可以完成数据库的底层访问,所以丢弃了传统项目中的数据访问层。

  2. 接口/控制层?整个项目结构中也不存在控制层和接口部分,由于zero以及将上层逻辑全部压缩到一起了,这部分内容根据您项目的复杂度可以有所差异,您也可以自行扩展。

  3. 多启动器zo-driver中可以包含一个以上的启动器,您可以书写不同种类的main函数作为程序入口,通常:

    • 开发过程中会使用双入口:Loader/Agent,一个负责数据导入,另外一个负责容器启动。

    • 生产部署过程中会使用单入口:Entry,该入口根据不同参数可打开命令行工具容器,参考前文部署教程。

    Maven标识更改操作步骤如下(附带新建项目步骤):

  1. 删除下载下来的scaffold-zero中的.git目录,将代码推送到自己的代码仓库中。

  2. 在IDEA中选中项目,点击右键:Refactor -> Rename...,下图中选择最后一个:Rename module and directory

  3. 在弹出框中输入您的主项目标识信息

  4. 在所有子项目中重复步骤 2 ~ 3(合计五次):

    注:一般在IDEA做rename的时候,Maven的配置并不会随着IDEA发生更改。

  5. 更改所有的POM文件:

  6. POM文件在更改过程中需根据您自己的项目设置

    • 项目本身的三个核心属性:groupId, artifactId, name需酌情更改:

    • 父子结构调整,子项目中(除开从vertx-import继承的项目需调整继承部分:

    • 父子结构调整,父项目中调整module部分

    • name的调整则是为IDE量身打造的,调整过后可以在Maven窗口中看到更改结果

      若窗口无变化点击截图中的刷新按钮看到该改变

  7. 变更完成后,保证编译通过,直接运行根目录:build.bat/build.sh脚本,见到下边截图则您的Maven设置就完成了:


4.3. 数据库

    4.1中已经说明,数据库配置部分主要在vertx-jooq.yml中,其中Camunda, 历史库,主库的配置结构基本一致,如下:

    需要更改的属性表如下:

属性名
含义

driverClassName

JDBC连接专用的数据库驱动类名

instance

数据库名,和JDBC连接字符串同步修改

hostname

默认使用ox.engine.cn

username

数据库访问账号

password

数据库访问口令/密码

jdbcUrl

JDBC连接字符串

port

端口号,整数,不配置使用默认的 3306

options

JsonObject结构,额外的连接池配置

category

数据库种类,默认值:MYSQL5

    特殊说明:

  1. options配置的内容关联到连接池属性,系统默认使用了HikariDataPool连接池。

  2. category目前系统中支持六种最基本的值

    • MYSQL5

    • MYSQL8

    • MYSQL(旧版专用)

    • ORACLE(旧版专用)

    • ORACLE11

    • ORACLE12

    • (保留)TIDB4

    • (保留)TIDB5

  3. 默认的jdbcUrl中带的MySQL配置参数如下表格:

    serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&useSSL=false

    属性名
    默认值
    含义

    serverTimezone

    Asia/Shanghai

    数据库运行时区

    useUnicode

    true

    是否启用Unicode

    characterEncoding

    UTF-8

    数据库使用的默认编码

    autoReconnect

    true

    是否自动重连

    useSSL

    false

    是否启用SSL

    failOverReadOnly

    false

    自动重连成功后,连接是否设置为只读

    数据库的category属性实际并不是数据库访问过程中必须的,最新的JDBC可以根据您提供的driverClassName以及jdbcUrl反向分析数据库类型,而此处的category主要设计如下:

  1. 在执行Jooq持久化过程中为数据库提供更好的Dialect方言以适配不同数据库。

  2. zero在对数据库执行DDL动态建模/动态路由实施过程中,可根据category执行特定的组件选择以处理不同种类数据库的兼容性问题。

    如果您启用了动态建模(zero-atom)功能,则额外的动态数据库会存储在您的X_SOURCE表中,表结构和配置一致,而前端开发中心您可以看到目前四个库的启用禁用情况,如下图只启用了主库,并且可以在该界面更改动态建模库的信息:


4.4. 容器端口

    容器端口的配置主要分两部分:后端端口和前端端口

  1. 后端端口的配置如下图:

    • 此处的name在微服务环境和云端环境作为节点部署时需要特别注意,单体应用(本教程中)中可根据自己的项目进行设置。

    • host设置成0.0.0.0其含义在于任意IP地址都可访问,不限制主机的运行IP。

    • 此处的port就是您需要配置的端口号,Scaffold的默认端口为6000,Zero框架中的默认端口为6083,此处为了做Demo改成了6086

  2. 前端端口的配置如下图:

    前端端口号使用NODE的环境变量PORT进行指定,.env.development负责开发环境端口号,.env.production负责生产环境端口号。

  3. 后端配置前端的跨域必须和浏览器中访问的地址一致,一般位于vertx-jooq.yml文件中,如:

    其中origin的配置意味着您最终会在浏览器中输入http://ox.server.cn:6001来访问前端程序,而服务端只允许从这个路径的JS请求发生,这样就防止其他模式的脚本攻击,关于跨域更多信息可参考在线的跨域配置相关文档。

  4. 前端跨域的基本环境变量配置如:

  5. 使用前后端分离配置的核心结构图如下:

    • 所以生产部署过程中,对外的两台服务器必须开放对应的端口,如图后端开放7000,前端开放6002

    • 如果搭建了Nginx的反向代理则可跳过上述步骤。

    • CORS会拦截掉所有请求源非法的请求,这种情况请求本身不会进入到后端应用中。

    • 此处提到的请求主要是JS脚本级的请求,通常应用容器为浏览器,如果是直接使用程序发送请求方法除外。


4.5. 初始化登录账号

    zero脚手架中的初始化登录账号位于启动器中:

    打开该Excel文件:

    主要添加的记录有三张表:

表名
含义

O_USER

OAuth认证模式的专用数据表,每个用户一条记录,包含了发放的唯一密钥。

S_USER

账号表,包括账号名、密码等。

R_USER_ROLE

账号角色关联表,存储了角色和用户的关联信息。

    特别说明

  1. 密钥是一个64位的随机字符串,可使用Zero Ai命令生成:

  2. 主键一般是UUID格式,可直接使用Zero Ai命令生成:

  3. 密码是MD5的加密格式,可直接使用Zero Ai命令生成(0.3.20版本之后):

    如果是MacOs的系统,执行完命令之后可直接使用Cmd + V快捷键粘贴刚刚生成的字符串

  1. 修改完成后,直接运行Loader程序(前文提到的数据加载程序),默认会加载init/oob中的所有Excel数据文件,可反复加载,加载完成后重新启动容器,则新的账号密码就会生效。


4.6. 租户应用信息

    租户信息在整个zero环境中以sigma为标识,带有租户的系统结构概念图如下:

    特殊说明:

  • 如图所示,每一个彩色小方块表示一个独立的Docker容器,这个容器中可能包含独立数据库、存储、服务也可能多个小方块组合到一起使用,从应用层的数据去标识,每个小方块都拥有一个独立的appIdappKey

    • appId用于读取基础应用数据

    • appKey用于读取敏感数据

  • 每一种颜色则表示一个租户信息,拥有唯一的sigma值,最终从系统层可以看到,一个租户会有多个应用信息,而此处我们部署的前后端就充当了一个彩色小方块的Docker结构。

    租户信息的区分主要体现在部分信息的数据导入过程:

  1. 如果您要启用Zero中提供的命令行,则需设置如下配置:

    runtime目录中的configuration.json是命令行专用配置,它的内容实际是引用租户文件:

  2. 有了上述配置后,您就可以使用如下代码:

  3. init/environment.json中的存储的数据就是租户的基本数据,格式如:

    配置中有三个核心节点和租户信息相关,他们的用途分别为:

    • global:该节点提供了当前租户的基本全局信息,用于Excel数据导入过程中的默认值赋予,有了该设置后,Excel数据文件中的数据就不需任何和应用、租户、语言相关的信息,只包含业务数据,最终形成如下结构图:

      即:应用数据包 + environment.json = 租户数据包

    • application:PartyA专用配置数据,包括(应用数据X_APP,数据库配置X_SOURCE)等。

    • integration:PartyB专用配置数据,主要是集成数据,用于构造Integration类专用。


4.7. 前端配置

    本章节旧事重提,主要用于配置前端环境变量:

4.7.1. 项目名称

    项目的npm名称存储于package.json中,该名称会在ai init命令中直接设置:

4.7.2. 远程集成配置

    集成配置环境变量如:

4.7.3. 风格配置

4.7.4. 开发配置

4.8. 应用配置

    应用配置在前端和后端必须对应上,前端依旧是环境变量部分:

    后端配置位于下边文件中:

    表格中的数据如下

「伍」小结

    本章主要介绍了zero新脚手架的基本配置以及开发环境和生产环境的详细部署流程,根据教程中的内容开发人员可完成如下任务:

  • 搭建项目的开发环境(从零起步以及直接导入)

  • 部署项目到生产环境

Last updated