首页 > 默认 > HZERO PaaS平台组装笔记(五)后端应用服务部署

HZERO PaaS平台组装笔记(五)后端应用服务部署

2025年11月5日

本文是H-ZERO 安装部署笔记,出于学习研究目的,刚开始按照开放平台->社区与合作伙伴->文档中心- 《HZERO 轻量版》技术文档进行部署实践,选择快速开始->微服务版进行安装; 但作为初学者, 水平太低, 由于轻量版合并了多个微服务,要改各种配置,过程中遇到多个困难,没有搞定🙂, 后来按照 开放平台->社区与合作伙伴->文档中心- 《HZERO汉得企业级PaaS平台》 技术文档进行 标准版(没有合并微服务的版本) 安装部署实践 ,安装部署成功了。本系列文章记录了这个过程。

需要说明的是,如果不是出于学习研究目的,是不需要这么麻烦的,技术中心有发发行版,可以一键安装,一小时不到可以全部安装完成。

本文是出于学习研究目的,按照技术文档从制品库里面拿各种零件进行组装,所以过程会比较繁琐,供学习研究参考。

实践系统环境:windows自带的Linux虚拟机 WSL ,linux版本在微软应用商店选择 Ubuntu22.04



五、后端应用服务部署

配置hosts:这一步前面已经完成

vim /etc/hosts

127.0.0.1 db.hzero.com.cn # 配置数据库所在服务器地址

127.0.0.1 dev.hzero.com.cn # 配置后端服务所在服务器地址

127.0.0.1 redis.hzero.com.cn # 配置redis服务所在服务器地址

修改服务配置文件

修改每个服务模块的application.yml,主要涉及到数据库、Redis、注册中心、配置中心等地址等通用信息修改,另外一些服务特殊配置也需要注意。

问题:\target\classes\application.yml,  \src\main\resource\sapplication.yml 该哪个?

答:\src\main\resource\sapplication.yml ;因为后面的每个模块的服务启动脚本run.sh,会把target 删除,然后把resource里面的文件覆盖过去。 

需要更改的内容:

  1. 每个模块的application.yml中的Jdbc链接都要加&allowPublicKeyRetrieval=true

url: ${SPRING_DATASOURCE_URL:jdbc:mysql://db.hzero.com.cn:3306/hzero_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true}

  • 在 \ps-lite\target\classes\application-custom.yaml(这个文件被ps-lite的application.yml导入,所以是其配置的一部分)我们看到:

它用到了好几个域名:
dev.hzero.org

document.hzero.org

redis.hzero.org

这几个也得加到hosts文件中去:

vim /etc/hosts

127.0.0.1 dev.hzero.org # oauth基础地址hzero-oauth可访问的网关地址

127.0.0.1 document.hzero.org  # hzero-file 用到的地址

127.0.0.1 redis.hzero.org #分布式锁用到的配置地址

备注:hosts文件是wsl自动生成的,每天第一次重启会自动生成,从而覆盖你修改的配置,要组织自动生成需要在wsl.conf中添加如下配置

/etc/wsl.conf:
[network]
generateHosts = false

3、ps-gateway的application.yml配置中,原来是

  cloud:

    gateway:

      filter:

        secure-headers:

          frame-options: ${SECURE_HEADERS_FRAME_OPTIONS:allow-from http://hzeronf.saas.hand-china.com}

把http://hzeronf.saas.hand-china.com改成 http://dev.hzero.com.cn

豆包说要改,把实际文件的扩展名改成yml(resoure里面要改,会拷贝覆盖到target)

编写服务启动脚本

编写后端服务启动脚本,这里给出ps-lite服务的启动脚本创建流程,对于其它后端服务来说只需要将该脚本的 端口号调整为对应后端服务的 端口号,再将其复制到对应 后端服务根目录即可。由于iam,oauth等服务都合共到lite了,所以我们就把iam的默认端口8030给他了: 另外标准的内存分配是2G,但我们个人学习用,这个lite合并服务合并了多个服务,我们分配给他1G;其他注册中心、网关、平台治理、接口平台 都各分配500M就可以了。飞搭比较耗资源,我们给他两个服务各1G;

cd ps-lite

vim run.sh

SERVICE_NAME=${PWD##*/}

JAR=$SERVICE_NAME.jar

MPORT=8030

echo “>>> mvn clean package -Dmaven.javadoc.skip=true”

mvn clean package -Dmaven.javadoc.skip=true -Dmaven.test.skip=true

echo “>>> cd target”

cd target

mv app.jar $JAR

echo “>>> kill -9 $(lsof -t -sTCP:LISTEN -i:$MPORT)”

kill -9 $(lsof -t -sTCP:LISTEN -i:$MPORT)

JAVA_OPTS=”-Xms1024m -Xmx1024m -Dspring.profiles.active=dev”

echo “>>> nohup java -jar $JAVA_OPTS $JAR >app.log 2>&1 &”

BUILD_ID=dontKillMe nohup java -jar $JAVA_OPTS $JAR >app.log 2>&1 &

保存后,更改执行权限:

chmod +x run.sh

启动后端服务

在每个服务目录下面执行run.sh脚本即可,建议按照如下顺序进行启动,注意监控注册中心,确保每个服务都启动成功。(含各服务建议分配端口)

服务简码默认端口描述是否必须备注
hzero-registerHREG8000注册中心_
hzero-configHCFG8010配置服务不安装各服务则需要关闭配置中心的配置
hzero-iamHIAM8030IAM服务1.10.0之后的版本需要先部署hzero-license并配置产品授权,具体请参考产品授权,在《其他》章节中有一些简单的说明
hzero-adminHADM8060平台治理服务_
hzero-platformHPFM8100平台服务
hzero-gatewayHGWY8080网关服务
hzero-oauthHOTH8020认证服务
hzero-swaggerHSWG8050Swagger测试服务开发环境可装
hzero-reportHRPT8210报表服务 
hzero-schedulerHSDR8130调度服务 
hzero-messageHMSG8120消息服务 
hzero-fileHFLE8110文件服务 
hzero-importHIMP8140导入服务 

第一个ps-register 服务

在ps-register目录下运行 ./run.sh

root@desktop-jacksen:/d02/hzero/project/ps-register# ./run.sh

看app.log中不断增加的日至可以确定服务已经在运行

  • Eureka 服务端地址,本例默认向 http://dev.hzero.com.cn:8000/eureka。

验证可用:

到注册中心的日志中可以找到生成的密码,用户名默认是user,登录后看到的信息如下:

有疑问的是ip地址怎么会是 10.255.255.254?

这个问题:解决方案如下:在bootstrap.yml配置文件中添加:

spring:

  cloud:

    inetutils:

      # 设置首选网卡,对于本机有多块网卡的情况,可以设置首选网卡来注册

      # 指定忽略的网卡

      ignored-interfaces[0]: lo

      # 选择注册的网段

      preferred-networks[0]: 172.18.14.48

添加这个配置后,重启,网址就使用我们指定的正常网址了(所有服务的bootstrap.yml文件中都要加这个配置,否则IP地址都会错误,因为我们用的是虚拟机,有多个网址);

第二个ps-lite  服务,在目录下运行 ./run.sh

因为:hzero-lite 合并了 HZERO 微服务中的如下服务,基本涵盖了单体应用必备的功能。

  • hzero-oauth:登录认证服务
  • hzero-iam:身份管理服务
  • hzero-platform:平台服务
  • hzero-swagger:Swagger文档测试服务
  • hzero-message:消息服务
  • hzero-file:文件服务
  • hzero-scheduler:调度服务
  • hzero-import:导入服务
  • hzero-report:报表服务
  • hzero-gateway-helper:用户鉴权组件
  • platform-mdm:主数据插件
  • platform-hr:HR组织架构插件
  • platform-org:组织信息插件
  • platform-search:检索插件
  • platform-dsr:数据源路由管理插件
  • platform-cusz:个性化插件
  • platform-gantt:甘特图插件

看日志,不成功,错误信息:

at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88) ~[ps-lite.jar:1.12.0.RELEASE]

Caused by: java.io.FileNotFoundException: JAR entry org/hzero/lite/config/ not found in /d02/hzero/project/ps-lite/target/ps-lite.jar!/BOOT-INF/classes

at org.springframework.boot.loader.jar.JarURLConnection.throwFileNotFound(JarURLConnection.java:175) ~[ps-lite.jar:1.12.0.RELEASE]

解决方案(豆包):

解决方案

创建配置类目录及基础配置类
在 src/main/java/org/hzero/lite/ 下新建 config 包(即创建 src/main/java/org/hzero/lite/config/ 目录),并添加一个基础配置类 AppConfig.java,示例:

package org.hzero.lite.config;

import org.springframework.context.annotation.Configuration;

// 标记为 Spring 配置类,让扫描机制识别@Configurationpublic class AppConfig {

// 可在此添加 Bean 定义、导入其他配置等}

重新打包验证
执行 mvn clean package -Dmaven.test.skip=true 重新构建项目,然后检查 JAR 包中是否包含 org/hzero/lite/config/AppConfig.class:

jar -tf target/app.jar | grep “org/hzero/lite/config/”

这次有了.

再次运行 ./run.sh

刚才那个问题没有了,但又提示缺少另一个core入口:

at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88) ~[ps-lite.jar:1.12.0.RELEASE]

Caused by: java.io.FileNotFoundException: JAR entry org/hzero/lite/core/ not found in /d02/hzero/project/ps-lite/target/ps-lite.jar!/BOOT-INF/classes

at org.springframework.boot.loader.jar.JarURLConnection.throwFileNotFound(JarURLConnection.java:175) ~[ps-lite.jar:1.12.0.RELEASE]

这个lite 看起来是卡住了,产品组说,启动脚本中要加license agent , 因为lite合并了iam服务,iam服务要用到license; 所以ps-lite的启动命令中要添加license的agent:

由于license控制策略一直在与时俱进,有关Hzero 各版本和license各版本的对应关系,请参考:汉得焱牛开放平台,中间试过好几个license agent文件,都出现不兼容问题,最后换的那个解决了不兼容问题。

重新启动ps-lite服务,发现还是有其他错误:提示什么类没有找到。 按照产品组建议,把POM文件中的部分插件依赖去掉就好了:

还有个问题就是提示数据库链接错误,那是因为在原始选配出来得yml文件中链接的mysql数据库是hzero_lite, 数据初始化的时候用的是hzero_platform,所以链接串中要改成hzero_platform

url: ${SPRING_DATASOURCE_URL:jdbc:mysql://db.hzero.com.cn:3306/hzero_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true}

还有就是因为Lite服务合并了多个服务,只给1G内存的话,服务启动非常慢,半小时过去了,状态还是starting启动过程中。

把内存加到2G再重启服务,发现一晚上过去了还是starting状态,看日志,出现了两个错误:

一个是访问iam服务失败,应该是访问路径问题:产品组说这个没有关键影响,可以忽略;

另外一个是插入iam_permission 表失败,原因是数据重复,主键冲突;

按照产品组建议,把原表里面内容清空掉了:

产品组认为服务没有完成启动,成为up状态,可能还是内存不够,于是我们把内存加到4G ,再次重启服务;

过了半小时,还是没有UP状态,查看日志,发现有错误:

编辑 run.sh 把上述启动选项加上,再重启:这个错误没了,不过在注册中心的状态还是starting,没有UP (UP是所有依赖的服务启动没有错误spring系统自己设置的标记) ,没有UP标记就是表明服务没有启动成功;

产品组分析发现,lite启动的时候去调用license服务检查,但license服务又需要调用iam服务获取在线用户数,但因为iam服务合并到了lite 服务,这个时候iam服务还没有UP就是就掉不成功,这就使得lite 和 license相互调用不成功,陷入死循环。

解决方案:把application-custom.yml中HZERO_LICENSE_TYPE:从空改成lite,意思是让lite服务不要去调用license服务验证是否授权,而是从 .lic license授权文件中解密读取读取模块授权信息,从而避免跟license服务相互调用死锁。

直接去开放平台 下载授权文件(文件名随意,只要扩展名是.lic就行)放到resource 目录下,再次运行./run.sh 会把文件拷贝到target目录。

看日志,发现lic文件读取失败,但命中了redis缓存,但没用,潇葳说缓存中内容也是加密的,开放平台现在默认下载的1.0.3版本的lic文件,但lite服务目前依赖的license start只能解密1.0.0版本的lic文件,于是重新申请了1.0.0版本的lic文件,再次重启lite服务,这次能正确读取.lic文件中的授权信息了。

但是。。 注册中心中的状态依然是starting ,没有UP

产品组认为之前的合并的lite服务,本想用于单体和微服务两种场景,现在看起来是不合适了,于是他又另外打包了一个lite合并服务微服务版(区别于lite合并服务单体版),并且他还发现了另外几处问题,一并修改了。

后面选配lite服务,就要选新的lite合共服务微服务版。

现在简单起见,我们直接在现有的lite服务的POM中把依赖改一下:

把依赖改成 hzero-lite-cloud :

这个hzero-lite-cloud在启动的时候将不再调用license服务去检查授权情况,只在被调用的时候给license服务拦截,去检查license服务。这样就避免了启动时跟license服务相互死锁;

既然已经避免了相互死锁,我们在yml文件中,把HZERO_LICENSE_TYPE:改成空

另外hzero-lite-cloud的启动类,也改了,选配平台上的模板要改,原来的模板时错误的,注解中还用了chroden, 要改成下面这样:

再次重启 ./run.sh

这次 终于成功了:

登录验证:

发现验证错误,说用户名/密码不对, 检查iam_user表发现没有默认用户,说明原来导入数据有问题,进一步检查发现在hzero-menu-user-role-lable.xlsx的 sheet页 《菜单标签数据》有两行引用内容存在,出现#REF,这个问题导致这个Excel中的相当一部分数据导入不成功,其中包括iam_user表的内容。

解决方案:把出现 #REF的两行数据删除掉,再次重新导入hzer_platform模块的数据。

导入完成后,检查数据库发现有数据了,表示导入成功:

再次重启./run.sh,验证登录:

第三个:ps-license服务(依然是要先启动注册中心服务):

文档说1.10版本之后,hzero-iam组件(这个组件也被合并到了lite组件)需要购买授权后方能正常使用,因此 hzero-lite 服务也需要相关授权。

License处理主要有两种模式,这里用第一种模式:

  1. 部署 hzero-license 服务进行统一管理
    该模式的优势在于,可以集中管理,如平台使用了多个受License控制的服务组件时,这种模式更加便捷。如采用此种模式,可在选配部署组件时追加选配 hzero-license 组件

因为前面没选配hzero-license 服务,我们再单独选配下这个服务:

下载后的resoure package里面没啥内容,不需要安装数据库表?有个 平台许可证管理.zip , 改名成ps-license.zip 上传服务器的project 目录下,pom.xml中MySQL依赖部分改一下:

<dependency>

<groupId>com.mysql</groupId>

<artifactId>mysql-connector-j</artifactId>

</dependency>

另外把lite依赖也加一下,自注册配置也加一下。然后启动(注册中心先启动):

另外:hzero 1.12 需要的license服务是1.0.3版本,所以POM文件中需要给更改如下:

进入ps-license目录,重新build一下:

root@desktop-jacksen:/d02/hzero/project/ps-license# mvn clean package -Dmaven.test.skip=true
[INFO] Scanning for projects…

另外,还需要一个license  Agent的jar文件,这个需要向潇威申请,不同版本对应的agent文件不一样。本例需要的是license-agent103.jar ,把它放到新建的目录licenseAgent目录下

启动服务命令中把agent加上:

运行./run.sh

日志报错:

chatgpt分析:

按照这个方法修改POM文件后再重新Builder:

进入ps-license目录,重新build一下:

root@desktop-jacksen:/d02/hzero/project/ps-license# mvn clean package -Dmaven.test.skip=true
[INFO] Scanning for projects…

builder之后再起服务依然报错!

后来问了潇威,说父组件依赖不对,因为我们的父组件依赖的是ps-demo-parent  0.0.1实际依赖的是hzero1.12.0 , 这个license服务不能依赖hzero1.12.0 ;

要改成依赖依赖license的父组件:

<parent>

        <groupId>org.hzero.license</groupId>

        <artifactId>hzero-license-parent</artifactId>

       <version>1.0.3.RELEASE</version>

</parent>

再次改POM文件:

进入ps-license目录,重新build一下:

root@desktop-jacksen:/d02/hzero/project/ps-license# mvn clean package -Dmaven.test.skip=true
[INFO] Scanning for projects…

build报错,说mysql 问题,POM中还是要恢复到原始的SQL配置:

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

</dependency>

改了之后再次builder就成功了;可以打开license 服务页面了:

看日志:刚才那个报错没有了,剩下就是向注册中心注册失败,原因也是验证问题(向注册中心注册需要验证,通过web页面访问也需要验证)。但各服务的yml配置文件中都默认不使用用户验证机制)

后来按产品组建议,在注册中心POM 中去掉对lite的依赖,再重新构建,启动后注册中心就不需要验证了。

测试license服务:向开放平台申请license, 审批通过后,用上面界面上的“激活链接”按钮获取激活验证码,复制后在填入验证:提示激活成功;

以一个已经购买产品的租户下的用户角色进入开放平台,进入 应用市场->我购买的产品

点【申请license授权】

填入 申请信息,包括申请授权的产品列表,license版本(当前只有1.0.3及以上版本这一个选项)、申请环境类型、环境名称,然后点【提交申请】

提交申请,等待审核员审批,审批通过后可以查看【license授权记录】

点【查看激活详情】,可以看到具体激活情况:

要激活刚刚安装的服务器授权,打开license服务的访问界面,点击【激活链接】

系统会直接链接远程的开放平台,打开开放平台页面,显示激活码:

复制激活码,到本地界面进行验证:

验证显示:激活成功。 则表示license 收取激活的动作全部完成。

对ps-license服务监控一段时间后发现会自动从注册中心消失,看日志是因为发生某种错误,导致心跳发送失败:

豆包分析可能是版本不兼容问题:

考虑到之前注册中心服务,因为增加了对lite的依赖导致,spring Sercurity的配置被非预期的覆盖,导致需要验证(期望不需要验证);后来问了产品组,说h0 1.12用的Erueka是<version>4.2.0</version>, 我直接在license服务中把Erueka的版本指定到相同版本再重启,能坚持4小时,4小时后心跳又失败了。 再后来是潇葳新发了一个license服务的版本1.1.2.RELEASE(原来是1.0.3), 那么ps-license服务的POM文件中parent和依赖全部改成这个新版本重新Builde解决问题,改了之后再重新执行./run.sh

按照产品组建议,那个对lite 的依赖 在 hzero-lite、hzero-admin、hzero-register、hzero-gateway、hzero-license 这几个服务不需要加 ,除了这几个服务之外的服务才需要加,比如飞搭低代码的服务就需要加

再打开注册中心页面,可以看到license 服务已经注册上来了:

第三个 ps-admin 平台治理服务

root@desktop-jacksen:/d02/hzero/project/ps-admin# ./run.sh

日志里面没啥错误,应该是OK的。

第四个 ps-gateway 网关服务

日志中有些路由找不到,这个需要更改application.yml文件中关于spring cloud 路由的配置,因为很多服务合并到hzero-lite了,哪些合并掉的服务路由的入口要改成hzero-lite , 比如原来hzero-iam, hzero-imp 等都要改成hzero-lite 。

另外我们发现注册中心gateway 中网关服务没有显示端口,需要在yml文件中server节点下面添加端口配置:

添加后重新启动就好了:

第五个 ps-interface 网关服务

 

 

关于作者:

昵称:Jack.shang
档案信息:jack.shang 一位从技术走向管理,再从管理走向市场的普通行者
联系方式:你可以通过syfvb@hotmail.com联系作者
点击查看发表过的所有文章...
本文永久链接: http://blog.retailsolution.cn/archives/4431

 

 

对本文的评价:

 

 

分类: 默认 标签:
本文的评论功能被关闭了.