文档说明
将牛刀开发的单体应用/服务,基于前后端源码编译,完全脱离平台独立部署运行。
前置条件
1、 基于牛刀40版本以上的SpringBoot模板,应用有后端数据、服务和前端页面,自完整并且运行正常
注意:应用中不能使用组织、用户、上下文和流程等需要依赖其他服务运行的组件
2、 以本地IDE模式打开,下载本地客户端,启动本地协同服务,点击连接云端,下载全部源码到本地
3、 打开本地IDE,在页面模型页,点击 生成页面源码,生成的页面 React 源码路径为 %JUSTEP_HOME%\model\UI2\pcx-src
4、 在高级页,用数据库管理工具导出数据库初始化脚本,备用
5、 到这里准备工作完成,可以关闭本地IDE的连接,同时关闭本地协同服务
准备数据库
准备一个 mysql,创建数据库,并执行前置条件中导出的数据库脚本,初始化
注意:数据库配置 lower_case_table_names=1 表名不区分大小写,编码选择 utf8
后端编译运行
1、 打开本地IDE自带的 Eclipse,以 mavan 工程加载 model\service\main
2、 执行 Maven clean 和 Maven install
注意:这里需要检查一下 pom.xml,spring-boot-maven-plugin 插件是否有 includeSystemScope=true的配置,如果没有请手动加上
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
3、 在 model\service\main\target 目录下,得到构建后 main.jar
4、 准备一个运行目录(本例为D:\newdao-run),按以下脚本创建批处理文件 copy-model.bat,执行复制本地IDE中构建后的main.jar文件和运行时依赖的模型资源文件,到当前目录下
CHCP 65001
@ECHO 将本地IDE中构建后的main.jar文件和运行时依赖的模型资源文件,复制到当前运行目录下
:: JUSTEP_HOME 指向本地IDE的根目录
SET JUSTEP_HOME=D:\newdao-ide-windows
COPY %JUSTEP_HOME%\model\service\main\target\main.jar .\main.jar
MD model\service\main
COPY %JUSTEP_HOME%\model\service\main\*.m .\model\service\main\
COPY %JUSTEP_HOME%\model\service\main\project.xml .\model\service\main\
MD model\service\service-meta-info
COPY %JUSTEP_HOME%\model\service\service-meta-info\serviceMetaInfo.json .\model\service\service-meta-info\
@ECHO 复制完成
@PAUSE>NUL
5、 按以下脚本创建批处理文件 run-java.bat,里面的数据库连接参数需要修改为前面准备的数据库
CHCP 65001
REM 运行后端服务
:: JUSTEP_HOME 指向运行目录
SET JUSTEP_HOME=D:\newdao-run
:: 如果本机没有设置全局JAVA_HOME,请手动指定
:: SET JAVA_HOME=%JUSTEP_HOME%\java\jdk8
:: 默认 JAVA 运行端口 8081,如果改变需要同步修改 NGINX 中的后端路由端口
SET JAVA_PORT=8081
:: 默认 NGINX 运行端口 80,这里需要与 NGINX 的端口保持一致
SET NGINX_PORT=80
SET GATEWAY_SERVICEADDRESS=127.0.0.1
SET GATEWAY_PORT=%NGINX_PORT%
:: 数据库连接参数
SET MAIN_DBPROPERTIES=
SET MAIN_DBHOST=127.0.0.1
SET MAIN_DBPORT=3306
SET MAIN_DBUSER=root
SET MAIN_DBPASSWD=x5
SET MAIN_DBTYPE=mysql
SET MAIN_DBNAME=demo
SET MAIN_DBSCHEMA=demo
SET "DB_CONN_URL_main=jdbc:mysql://%MAIN_DBHOST%:%MAIN_DBPORT%/%MAIN_DBNAME%?user=%MAIN_DBUSER%&useInformationSchema=true&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&characterSETResults=UTF-8"
SET COMP_SN_DBPROPERTIES=%MAIN_DBPROPERTIES%
SET COMP_SN_DBHOST=%MAIN_DBHOST%
SET COMP_SN_DBPORT=%MAIN_DBPORT%
SET COMP_SN_DBUSER=%MAIN_DBUSER%
SET COMP_SN_DBPASSWD=%MAIN_DBPASSWD%
SET COMP_SN_DBTYPE=%MAIN_DBTYPE%
SET COMP_SN_DBNAME=%MAIN_DBNAME%
SET COMP_SN_DBSCHEMA=%MAIN_DBSCHEMA%
SET UAA_DBPROPERTIES=%MAIN_DBPROPERTIES%
SET UAA_DBHOST=%MAIN_DBHOST%
SET UAA_DBPORT=%MAIN_DBPORT%
SET UAA_DBUSER=%MAIN_DBUSER%
SET UAA_DBPASSWD=%MAIN_DBPASSWD%
SET UAA_DBTYPE=%MAIN_DBTYPE%
SET UAA_DBNAME=%MAIN_DBNAME%
SET UAA_DBSCHEMA=%MAIN_DBSCHEMA%
%JAVA_HOME%\bin\java -Dserver.port=%JAVA_PORT% -jar %JUSTEP_HOME%\main.jar
6、 执行批处理,运行后端服务
前端编译运行
1、 按以下脚本创建 compile-ui.bat,执行前端构建
CHCP 65001
@ECHO 页面 React 源码构建
:: JUSTEP_HOME 指向本地IDE的根目录
SET JUSTEP_HOME=D:/newdao-ide-windows-top
CD %JUSTEP_HOME%/tools/uix-web/scripts/
:: 这里的 pcx 是要构建的端
%JUSTEP_HOME%/node/node.exe %JUSTEP_HOME%/tools/uix-web/scripts/ExportServer.js pcx release --release
@ECHO 构建完成,构建后的前端发布资源在前端源码目录下的 public 目录
@PAUSE>NUL
2、 构建后的前端发布资源目录在 %JUSTEP_HOME%\model\UI2\pcx-src\public
3、 准备一个 nginx,将上面的 public 复制到 nginx 目录下,更名为 pcxapp
4、 修改 nginx/conf/nginx.conf,加入以下配置,其中的 8081 端口为部署的后端服务端口
# 前端路由
location /pcxapp {
absolute_redirect off;
alias pcxapp/;
index index.html index.htm;
try_files $uri $uri/ /pcxapp/index.html;
}
# 后端路由
location /main/dbrest {
proxy_pass http://localhost:8081/dbrest;
proxy_set_header X-MODULE main;
}
location /main/dbrest/model {
proxy_pass http://localhost:8081/dbrest/main/dbrest/model;
proxy_set_header X-MODULE main;
}
location /sn {
proxy_pass http://localhost:8081/sn;
proxy_set_header X-MODULE main;
}
location ^~ /main/ {
proxy_pass http://localhost:8081/main/;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass_header Server;
proxy_set_header Host $host;
}
注意:上面 /sn 的路由配置,用于解决序号组件的请求转发,如果运行中遇到其他后端请求错误,未在上面配置列表中,同样处理即可
提醒:nginx 的配置重新加载命令为 nginx -s reload
5、 运行 nginx,访问地址 localhost/pcxapp,已经可以正常打开页面运行
附录
附件组件
如果用到了附件组件,需要在本地启动一个 MinIO 服务,并进行以下配置
1、 启动 MinIO
. 下载 minio.zip,并解压
. 执行 start-minio.bat,启动 MinIO
CHCP 65001
@ECHO 启动 MinIO 服务
:: 用户名
SET MINIO_ACCESS_KEY=admin
:: 密码
SET MINIO_SECRET_KEY=1234abcd
:: 端口为 9001
minio.exe server --address 127.0.0.1:9001 .\data
. 首次运行 MinIO,需要初始化一个 Bucket 存储桶,简单可以执行 init-minio-bucket.bat
CHCP 65001
:: 创建 minio 服务别名为 myminio
mc alias set myminio http://127.0.0.1:9001 admin 1234abcd
:: 在 myminio 下创建存储桶 demo
mc mb myminio/demo
@ECHO MinIO 初始化创建桶成功
@PAUSE>NUL
2、 在 run-java.bat 中增加 MinIO 相关环境变量
SET "MINIO_END_POINT=http://127.0.0.1:9001"
SET MINIO_HOST=127.0.0.1:9001
SET MINIO_ACCESS_KEY=admin
SET MINIO_SECRET_KEY=1234abcd
SET MINIO_BUCKET=demo
3、 在 nginx/conf/nginx.conf 中加入附件组件相关路由配置
location /storage {
proxy_pass http://localhost:8081/storage;
proxy_set_header X-MODULE main;
# X-Tenant-Key 对应 MinIO 的 Bucket
proxy_set_header X-Tenant-Key demo;
}
4、 配置完成
Excel 导入导出组件
Excel导入导出组件依赖了 migrate 数据管理工具,需要在运行目录中包含相关工具,并进行以下配置
1、 在运行目录下创建 tools 目录,并从本地IDE的 tools 目录下将 migrate 和 git 两个目录复制过来
2、 在运行目录下创建 conf 目录,目录中按以下脚本创建 env.sh,由这个脚本为 migrate 提供 数据库 和 MinIO 的环境变量
export MIGRATE_MODE=leagcy
export DB_DRIVER_CLASS_NAME=com.mysql.cj.jdbc.Driver
export DB_USERNAME=root
export DB_PASSWORD=x5
export DB_URL="jdbc:mysql://127.0.0.1:3306/demo?user=root&useInformationSchema=true&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&characterSETResults=UTF-8"
export DB_SCHEMA=demo
export MINIO_URL="http://127.0.0.1:9001"
export MINIO_ACCESSKEY=admin
export MINIO_SECRET=1234abcd
export MINIO_BUCKET=demo
3、 在 nginx/conf/nginx.conf 中加入 Excel 导入导出组件相关路由配置
location /excel {
proxy_pass http://localhost:8081/excel;
proxy_set_header X-MODULE main;
}
4、 配置完成