HZERO PaaS平台-Docker版demo笔记(二)Docker版测试 问题21-25

问题二十一、如何用上最新的Kimi k2.5模型?

进入Kimi开放平台:platform.moonshot.cn

点击【开始构造】按照提示进行注册,认证,获得Apikey

Kimi K2.5的官方文档中的对接API调用说明:

$ curl https://api.moonshot.cn/v1/chat/completions \
    -H “Content-Type: application/json” \
    -H “Authorization: Bearer $MOONSHOT_API_KEY” \
    -d ‘{
        “model”: “kimi-k2.5”,
        “messages”: [
            {“role”: “user”, “content”: “你好”}
        ],
        “thinking”: {“type”: “disabled”}
   }’

新建最新的kimi K2.5模型对接时,返回错误:

模型清求产生未知异常,请稍后重试,异常信息为: [WebClientResponseException: 400 error,{“error”:”message”:”invaid temperature: only 0.6 is

allowed for this model”,”type”:”invalid request error”}}]

产研说 如果模型温度只能0.6吗。 这个暂不支持设置,需要用私有模型对接的方法做映射来处理:模型类型选择:对话-私有大模型

认证类型选:自定义键值认证。

自定义配置填写:Bearer+空格+APIKey

然后自定义请求映射和响应映射:

%dw 2.0 

output application/json

import dw::core::Binaries

import dw::core::URL                

// 核心优化:自动识别图片MIME类型,不再写死PNG

fun getImageMimeType(imageUrl: String) = do {

    // 方案1:从URL后缀识别(简单通用,无额外请求)

    var urlLower = lower(imageUrl) // Convert URL to lowercase

    var mimeType =

        if (urlLower endsWith “.png”) “image/png”

        else if (urlLower endsWith “.jpg”) “image/jpeg”

        else if (urlLower endsWith “.jpeg”) “image/jpeg”

        else if (urlLower endsWith “.webp”) “image/webp”

        else if (urlLower endsWith “.gif”) “image/gif”

        else “image/png” // Default to PNG if no match

    —

    mimeType

}

fun urlToBase64(imageUrl: String) = do {

    var bytes = readUrl(imageUrl, “application/octet-stream”)

    var base64 = Binaries::toBase64(bytes)

    var mimeType = getImageMimeType(imageUrl)

    —

    “data:” ++ mimeType ++ “;base64,” ++ base64

}

fun mappingMessages(messages) =

    messages map ((item) -> {

        role: item.role,

        content: item.content map ((contentItem) -> {

            `type`: if (contentItem.`type` == ‘image’)

                “image_url”

            else 

                contentItem.`type`,

            image_url: if (contentItem.image startsWith “http”)

                urlToBase64(contentItem.image)

            else 

                contentItem.image,

            text: contentItem.text

        })

    })

—        

{

        messages: mappingMessages(payload.messages),

        stream: payload.stream,

        temperature:0.6,

        max_tokens: payload.maxTokens,

        tools: payload.tools,

    model:”kimi-k2.5″

}

备注:我对接的时候,提示要求温度0.6,但 另一个同事对接的时候要求1.0 ,这个可以根据提示调整。

另外kimi更新了function call的调用规范要求,从functions: payload.functions改成了:tools: payload.tools,

%dw 2.0        

output application/json

fun mergeMessage(choices) = (

 choices reduce ((item, acc = “”) -> acc ++ item.message.content))

fun mergeStreamMessage(choices) = (

  choices reduce ((item, acc = “”) ->

    acc ++ (item.delta.content default “”)

  )

)

fun mappingUsage(usage) = (

  if(isEmpty(usage)) {

    promptTokens: 0,

    completionTokens: 1,

    totalTokens: 1

  } else {

    promptTokens: usage.prompt_tokens,

    completionTokens: usage.completion_tokens,

    totalTokens: usage.total_tokens

  }

)

fun mappingStreamUsage(choices) = do {

  var choice = choices[0]

  var usage = choice.usage

  —

  if(“stop” == choice.finish_reason)

    {

      promptTokens: usage.prompt_tokens,

      completionTokens: usage.completion_tokens,

      totalTokens: usage.total_tokens

    }

  else 

    {

      promptTokens: 0,

      completionTokens: 0,

      totalTokens: 0 

    }

}

fun mappingResult(payload) = (

  {

    created: payload.created,

          id: payload.id,

          isEnd: true,

          object: payload.object,

          message: mergeMessage(payload.choices),

    usage: mappingUsage(payload.usage)

  }

)

fun mappingStreamResult(payload) = (

  if (payload is Object)

   {

    created: payload.created,

          id: payload.id,

          isEnd: false,

          object: payload.object,

          message: mergeStreamMessage(payload.choices),

    usage: mappingStreamUsage(payload.choices)

  } else 

   {

    created: payload.created,

          id: payload.id,

          isEnd: true,

          message: “”,

          object: payload.object

    }

)

fun mappingDoneResult() = (

   {

          isEnd: true,

          message: “”

    }

)

— 

if (content == “[DONE]”)

    mappingDoneResult()

  else 

    if (payload.object == “chat.completion”)

      mappingResult(payload)

    else 

      mappingStreamResult(payload)

映射脚本是DW 2.0语法,DataWeave 2.0(DW 2.0)是 MuleSoft 专属的数据转换领域专用语法,核心用于不同系统间的数据映射、格式转换(如 JSON/XML/CSV 互转),语法设计上偏向函数式 + 声明式。 对这个语法豆包和元宝的排错能力有限,通常不能给出正确的建议。 如果有错误,建议用chatgpt排错。

配置后可成功测试:

问题二十二、AI平台对话助手应用上的偶发性问题

重点:此类问题都可以通过刷新页面解决。

有一次在对话助手,上传文件是碰到json 解析错误:

Hzero-aip-server服务的日志中可以看到错误信息:

2026-02-13T16:20:35.090+08:00 DEBUG 130241 — [hzero-aip] [  XNIO-1 task-3] o.h.s.i.mvc.InvokeDecryptionFilter       : Request cipher condition mismatch, receive POST “/v1/open/documents/personal”, headers={H-Invoke-Encryption: null}

2026-02-13T16:20:35.100+08:00 ERROR 130241 — [hzero-aip] [  XNIO-1 task-3] o.h.core.exception.BaseExceptionHandler  : Unknown runtime exception, Request: {URI=/v1/open/documents/personal}, User: CustomUserDetails{userId=2, username=admin, roleId=1, roleIds=[1, 2, 9], siteRoleIds=[1, 9], tenantRoleIds=[2], roleMergeFlag=false, secGrpIds=[], tenantId=0, tenantIds=[2, 0], organizationId=0, isAdmin=true, clientId=null, timeZone=’GMT+9, language=’zh_CN, roleLabels='[MODEL_PLATFORM_ADMIN, LOWCODE_PLATFORM_ADMIN], apiEncryptFlag=1}

org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.lang.Long` from String “instance-monitor”: not a valid `java.lang.Long` value

at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:409) ~[spring-web-6.2.1.jar!/:6.2.1]

at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:357) ~[spring-web-6.2.1.jar!/:6.2.1]

at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:204) ~[spring-webmvc-6.2.1.jar!/:6.2.1]

at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:176) ~[spring-webmvc-6.2.1.jar!/:6.2.1]

然后我刷新也页面后这个错误就没有了。

刚开始以为是更换账户组合中的模型生效/失效引起的,但后来测试发现也未能重现这个问题。于是尝试重现问题:保持当前的AI对话助手窗口不刷新,更改多模态账户组合中的生效账户,然后再次上传图片,就会出现这种错误:

然后回到 对话助手界面,不刷新页面,直接上传文件,发现又是正常的,未能重现问题:

那上次碰到那个需要刷新页面的问题可能是session过期导致的?

但是我来回把两个模型生效/失效 切换多次,多试几次就能试出问题:

会出现模型XX不可用的错误:

这个时候,你刷新后再试就正常了:

总结:以后碰到此类莫名其妙的问题,现尝试刷新页面解决。

问题二十三、Agent编排:应用导航编辑保存出错问题

系统内置的Agent编排:应用导航编辑保存出错,界面上提示:请联系管理员,报错信息明细中提示:Expected one result (or null) to be returned by selectOne(), but found: 2″

打开HZERO-AIP服务(aip-server)的服务日志,看到报错也是期望获得单条数据的地方实际返回超过一条。没有debug模式的情况下,日志没有显示具体的SQL语句。

在hzero-aipserer-docker的容器配置docker-compose.yml中设置环境变量,- LOG_LEVEL=debug 启用debug模式,在重启该容器:

## 要求Docker/Docker CE >= 19.x

services:

  hzero-aip-server:

    image: hzero-aip-server-jk-demo:1.12

    container_name: hzero-aip-server

    ports:

      – “8270:8270”

      – “8271:8271”

    environment:

      – JAVA_OPTS=-Xms128m -Xmx2000m -Dspring.profiles.active=dev

      – AGENT=-javaagent:/license-agent112a.jar

      – LOG_LEVEL=debug

    deploy:  # 限制容器总内存(Docker Compose v2.3+)

      resources:

        limits:

          memory: 3000m  # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)

networks:

  default:

    name: hzero-demo

external: true

然后再次执行,看日志:

把SQL语句和参数替换后再执行,返回结果有两条:

看SQL语句和实际数据,问题原因是这个Agent编排的历史版本的激活标志应该为0,但不知为何实际数据是1,所有要修复数据,改成0

修改后在界面上再次保存就不会报错,正常了。

另一个问题是,运行 企业应用导航的时候,可能会遇到提示“应用[企业应用导航]未分配编排或没有编排执行权限,请联系管理员”

解决这个问题可以在Agent编排的编辑处,权限管理从白名单改成黑名单即可:

然后运行这个应用的时候,可能没有效果:

这个原因可能是 企业应用导航这个Agent编排用到的菜单列表字典的向量化不正常:

图中的问题是 因为种子数据导入的时候,向量库集合 这个字段本应留空,然后部署后重新同步向量,让系统重新生成这个集合的。但实际上没有留空,导致系统以为向量库已经存在这个集合,但实际不存在,从而导致向量同步错误。

解决方案是,从后台数据库做datafix,把这个字段删除,重新同步:

然会回到界面:再次重新同步还是失败:

错误信息是:


2026-03-05T14:55:48.737+08:00 ERROR 8996 — [hzero-aip] [    dict-pool-7] .a.d.s.q.DictionaryScheduledSynchronizer : sync dictionary error

org.hzero.core.exception.ValidateFailureException: [collectionName must not be blank; ]
        at org.hzero.core.base.DefaultValidationResultProcessor.process(DefaultValidationResultProcessor.java:43) ~[hzero-starter-core-1.12.1.RELEASE.jar!/:1.12.1.RELEASE]
        at org.hzero.core.util.ValidUtils.valid(ValidUtils.java:59) ~[hzero-starter-core-1.12.1.RELEASE.jar!/:1.12.1.RELEASE]
        at org.hzero.core.base.BaseAppService.validObject(BaseAppService.java:35) ~[hzero-starter-core-1.12.1.RELEASE.jar!/:1.12.1.RELEASE]
        at org.hzero.aip.app.service.impl.VectorCollectionServiceImpl.create(VectorCollectionServiceImpl.java:95) ~[hzero-aip-server-1.6.1.ALPHA.6.13.jar!/:1.6.1.ALPHA.6.13]


解决方案:

把原来那个字典删除掉(删除之前先把字典值导出),然后重新新建一个词典,词典名称和词典编码(HAIP.APPLICATION_LINK)跟原来保持一致,新建之后再把词典值导入进来,执行导入的动作会自动同步向量,这次向量同步成功了。

看向量库集合,里面也确实有了,是自动新增的:

再次执行应用导航,成功了:

问题二十四、Agent编排:简易智能体 AutoAgent运行报错:

错误信息:

java.lang.ClassCastException: org.hzero.aip.model.domain.vo.response.content.FailureResp incompatible with org.hzero.aip.model.domain.vo.response.content.chat.ChatCommonResp
        at org.hzero.aip.model.infra.helper.SyncResponseHelper.apply(SyncResponseHelper.java:98)

Hzero-aip-app服务中的错误信息:

2026-03-05 11:31:18.231 | org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request on POST request for “https://ark.cn-beijing.volces.com/api/v3/chat/completions”: “{“error”:{“code”:”InvalidParameter”,”message”:”‘messages’ must contain the word ‘json’ in some form, to use ‘response_format’ of type ‘json_object’. Request id: 021772681472981c54cfbc8e773a7e1d131d5b1cad603e0f69745″,”param”:””,”type”:”BadRequest”}}”

产研说这个问题在 hzero-aip-app  1.6.1.ALPHA.7.1 中解决了,我现在的版本是hzero-aip-app  1.6.1.ALPHA.6.13, 执行升级,再测:OK了:

问题二十五、低代码平台在删除页面后再 删除业务对象失败

删除业务对象时报错:”exception”: “Not found [PAGE_STRUCTURE], [B0] PivotProvider

Modeler服务后台错误是:io.choerodon.core.exception.ext.IllegalArgumentException: Not found [PAGE_STRUCTURE], [BO] PivotProvider.

at org.hzero.boot.modeler.pivot.PivotProviderManager.getPivotProvider(PivotProviderManager.java:269) ~[hzero-boot-modeler-client-2.10.2-1.12.BETA.4.jar!/:2.10.2-1.12.BETA.4]

产研说是部署问题,删除一下 redis db1 下的 apaas:pivot:provider 这个key,然后重启一下 modeler 和 lowcode 应该就好了。

重启服务之后,再试依然报错:

服务中错误信息:io.choerodon.core.exception.ext.IllegalArgumentException: Not found [PAGE_STRUCTURE], [BO] PivotProvider.

看redis中的键值,只有7个,比正常的10个少了3个;

第二天所有服务重启之后,键值恢复到10个:但是_US和_CN中还是只有7个;

测试删除业务对象还是报同样错误。

不过 ,我发现非Docker环境是可以正常删除业务对象的,而非docker环境的redis中的键值比Docker环境中多,看起来是Docker环境的Redis中键值有缺失。

另外产业看到我的Docker环境中lowcode服务的版本 还是 2.10.0-1.12.RELEASE版本的,我比较了下非Docker环境版本是2.10.2-1.12.BETA.2的,modeler服务的版本是2.10.2-1.12.BETA.4,所以docker环境的版本要升级下。

执行:升级Docker环境的lowcode服务到2.10.2-1.12.BETA.4, 再次测试,可以正常删除业务对象了。 redis中 _CN 和 _US中键值的数量也不缺了。

问题解决。

HZERO PaaS平台-Docker版 -更新日志

==============

2026/03/09
仅针对在2026/03/09 之前下载的朋友需替换文件(根据CPU类型选择):
1、镜像文件更新:
./2026-03-09/x86/hzero-docker-images/hzero-aipserver-docker.tar、hzero-aipapp-docker.tar、hzero-modeler-docker.tar、hzero-lowcode-docker.tar
./2026-03-09/arm64/hzero-docker-images-arm64/hzero-aipserver-docker.tar、hzero-aipapp-docker.tar、hzero-modeler-docker.tar、hzero-lowcode-docker.tar
2、数据文件更新:
./2026-03-09/x86/hzero-dockers.tar.gz
./2026-03-09/arm64/hzero-dockers-arm64.tar.gz
3、具体更新内容:
3.1 字段长度更改:
hdoc_document.document_name, hdoc_document_tl.document_name ,hdoc_document_version.version_name,hdoc_document_version_tl.version_name 这四个字段长度都从120改成240,目的是解决AI生成低代码功能中上传设计草稿图的文件名长度不够的问题(图片上传后,会转存文档,文档名会加上会话ID导致原长度不够)
3.2 更新hzeor-lowcode 和 hzero-modeler 服务升级到 2.10.2-1.12.BETA.4 ,解决AI生成低代码时,业务对象选择修改模式时报错 field_type错误的问题。
3.3 Agent编排导入更新:AI生成低代码业务对象和页面 ,更新到34版,去掉了生成领域内原有业务对象的Json上下文节点,解决上下文Prompt太长的问题。 去掉了参数收集节点中字段类型关联关系类型和引用类型的字段类型,解决大模型有时候会自动提取字段为此类类型,但又没有提前生成相应的被引用到的业务对象的问题。保障程序运行的稳定性。
3.4 更改Redis配置,持久化频率从5分钟一次更改为1小时一次。
3.5 升级hzero-aip-app服务到 1.6.1.ALPHA.7.1,解决简易智能体编排中autoagent节点执行错误问题。
3.6 删除默认导航词典,重建默认导航词典和对应的向量库集合,解决导航不起作用的问题。

==============

2026/02/11
仅针对在2026/02/11之前下载的朋友需替换文件(根据CPU类型选择):
1、镜像文件更新:
./2026-02-11/x86/hzero-docker-images/hzero-aipserver-docker.tar、hzero-aipapp-docker.tar、hzero-gateway-docker.tar
./2026-02-11/arm64/hzero-docker-images-arm64/hzero-aipserver-docker.tar、hzero-aipapp-docker.tar、hzero-gateway-docker.tar
2、数据文件更新:
./2026-02-11/x86/hzero-dockers.tar.gz
./2026-02-11/arm64/hzero-dockers-arm64.tar.gz
3、具体更新内容(主要是跑通Agent:AI生成业务对象和页面):
3.1、hzero-aip-server 和hzero-aip-app 都升级到1.6.1.ALPHA.6.13
3.2、hzero-aip-app 的启动类注释掉@EnableWebFlux 注解,application.yml更改配置:支持100M的payload
3.3、在hzero-gateway的application.yml中调整timeout配置,原来是2秒,调整到20秒依然有问题,调整到200秒就没问题了。
3.4、新建自定义账户,模型类型=对话-vllm, 账户编码=JACK-TALK-DOUBAO-SEED-1.8-3, 账户名称=Jack对话-豆包-seed-1.8-3,Model=doubao-seed-1-8-251228
开放API地址=https://ark.cn-beijing.volces.com/api/v3/chat/completions
支持多模态=Y,支持非流式=Y,支持json_object=Y ,是否支持函数调用=Y,图片传输方式:BASE64,最大上下文token数=80000,最大响应token数=8000
认证类型=自定义健值认证,健值位置=请求头参数,健=Authorization,自定义的配置=Bearer+空格+火山引擎大模型APIKey
默认参数:KV模式,参数名称=thinking,参数值={“type”:”disabled”}
3.5、把账户Jack对话-豆包-seed-1.8-3 添加到账户组合:Jack-talk-multmodel (组合名称:Jack对话-多模态)
3.6、把Jack-talk-multmodel配置给Agent编排中分类为飞搭的三个编排。
3.7、AI平台全局配置的切片配置处,图片识别模型配置为这个多模态模型(这里不配置会让HKMS服务报错)
3.8、hzero-file文件服务的max内存调整到800M

==============

2026/01/30
仅针对在2026/01/30之前下载的朋友需替换文件(根据CPU类型选择):
1、镜像文件更新:
./2026-01-30/x86/hzero-docker-images/hzero-workflow-docker.tar
./2026-01-30/arm64/hzero-docker-images-arm64/hzero-workflow-docker.tar
2、数据文件更新:
./2026-01-30/x86/hzero-dockers.tar.gz
./2026-01-30/arm64/hzero-dockers-arm64.tar.gz
3、具体更新内容:
3.1 增加账户大模型组合:AZUREGPT4O2 ,这个是AI生成低代码业务对象的Agent编排中要试用的账户组合,在这个账户组合中添加账户:jack对话-DeepSeek-V3 这是火山方舟上的deepseek-V3
3.2 给低代码AI编排用到的大模型账户组合LOWCODE.AIGC 添加具体的账户jack对话-DeepSeek-V3
3.3 AIGC中台-全局选项配置-权限管理 ,启用维护权限控制都关掉。目的:默认让种子数据中已经存在的AI生成低代码业务对象的编排都在编排定义界面显示出来。
3.4 Agent安排界面导入 Trail环境导出的AI生成飞搭低代码业务对象和界面相关的三个编排,目的:解决这三个Agent编排,再打开编辑时显示画布数据加载错误的问题。导入后三个编排执行重新发布,修改一个节点名称-保存-再改回来-保存 刷新缓存。
3.5 AIGC中台/企业应用库/低代码AI助手 – 业务对象 执行动作取消发布,然后再保存发布。目的:更新缓存,解决低代码工作台通过应用连接-全屏连接 调用该应用的时候报“应用[LOWCODE.GENERATOR_BUSINESS_OBJECT]未发布或者没有访问权限,请联系管理员”这个错误的问题。
3.6 启用redis持久化,解决Redis重启后因缓存丢失导致的Agent应用白屏问题以及时不时出现的504 GATEWAY_TIMEOUT “Response took longer than timeout: PT20S”
3.7 前端新增 hzero-front-haip-card@1.6.1-alpha.2.7 , 升级到hzero-front-haip@1.6.1-alpha.6。目的:AIGC平台新增卡片配置菜单,解决AI生成低代码业务对象和界面Agent编排用到的卡片编辑问题,这个卡片问题会导致测试编排时白屏。后续继续升级到”hzero-front-haip”: “1.6.1-alpha.6.1″ 和”hzero-front-haip-card”:”1.6.1-alpha.3″ 解决卡片显示不能解析HTML的问题。
3.8 导入trail环境的AI生成低代码业务对象和界面Agent编排用到的卡片,原来的卡片信息有缺失,导致测试编排时白屏(卡片节点输出Json有截断),导入正确的卡片可解决此问题。
3.9 升级workflow 前后端到hzero-workflow@1.20.1-1.12.RELEASE 和hzero-front-hwkf@1.20.2-beta.1,hzero-front-hwkf-mobile@1.20.1-beta.8 解决工作流模拟运行的时区问题。

===============
2026/01/19
仅针对在2026/01/19之前下载的朋友需替换文件(根据CPU类型选择):
1、镜像文件更新:无
2、数据文件更新:
./2026-01-19/x86/hzero-dockers.tar.gz
./2026-01-19/arm64/hzero-dockers-arm64.tar.gz
3、具体更新内容:
3.1、执行了update hzero_platform.iam_role set is_enabled=1 where id =5;解决新建租户失败的问题。

3.2、redis-docker目录下的docker-compose.yml增加配置:command: redis-server –save “” –appendonly no ; 目的是去掉了持久化,解决低资源环境下某些服务的日志中出现的redis 操作有时会的timeout问题。

==============

2026/01/12
仅针对在2026/01/12之前下载的朋友需替换文件(根据CPU类型选择)
1、镜像文件更新:
./2026-01-12./x86/hzero-docker-images/hzero-orchestration-docker.tar
./2026-01-12./arm64/hzero-docker-images-arm64/hzero-orchestration-docker.tar
2、数据文件更新:
./2026-01-12./x86/hzero-dockers/hzero-orchestration/docker-compose.yml
./2026-01-12./arm64/hzero-dockers/hzero-orchestration/docker-compose.yml
3、具体跟新内容:
3.1 升级编排服务从1.8.1.RELEASE 到1.8.2.RELEASE ,解决编排服务导入报错的问题。

3.2 因为hzero-orchestration1.8.2.RELEASE 用的license-agent版本跟1.8.1.RELEASE不一样,所以这个docker-compose.yml文件要替换一下。

==============

2026/01/10
仅针对在2026/01/10之前下载的朋友需替换文件(根据CPU类型选择)
1、镜像文件更新:
./2026-01-10/x86/hzero-docker-images/hzero-report-docker.tar
./2026-01-10/x86/hzero-docker-images/hzero-oauth-docker.tar
./2026-01-10/arm64/hzero-docker-images-arm64/hzero-report-docker.tar
./2026-01-10/arm64/hzero-docker-images-arm64/hzero-oauth-docker.tar
2、数据文件更新:无
3、具体更新内容:
1.1 添加字体渲染引擎 libfreetype6 更正因为hzero-report 中ureport 因为缺少freetype6字体渲染引擎而导致的加载Libfontnanager-so失败,从而导致服务启动失败的问题。
1.2 添加字体文件 fonts-dejavu-core fonts-dejavu-extra, hzero-oauth服务的验证码需要这两个字体文件,默认系统设置为不需要验证码,没有这两个文件也没问题,但是如果在系统设置中启用验证码就需要了。

HZERO PaaS平台-Docker版demo笔记(二)Docker版测试 问题16-20

问题十六、集成平台服务编排导入问题

在低代码POC演示租户导入集成平台服务编排的定义,界面显示导入校验成功&导入完成。

关闭后界面并未显示数据,查数据库:显示导入错误:普通租户用户只能操作本租户的数据,请检查数据所属租户。

打开导入的zip文件,看其中的租户编码:

先维护租户映射:

导入后,在导入历史中显示上传完成。

但在定义出还是看不到流程定义内容:

切换到平台租户,再次进行导入

先维护租户编码映射:

上传压缩文件,导入后点击“数据映射”

基础映射和资源映射都是空的:

看导入历史:服务注册和编排定义都是空的:

再切到低代码POC演示租户看编排定义也还是空的

查hzero-orchestration 服务日志,错误信息:

2026-01-18 04:13:44.747 ERROR 1 — [  XNIO-1 task-5] o.j.o.s.a.s.i.ImportZipDataServiceImpl   : MCP Get Data Mapping Has Error

feign.codec.DecodeException: Error while extracting response for type [java.util.List<org.jipaas.orchestration.service.app.dto.ImportMappingDTO>] and content type [application/json;charset=UTF-8]

at feign.InvocationContext.decode(InvocationContext.java:125)

……

Caused by: org.springframework.web.client.RestClientException: Error while extracting response for type [java.util.List<org.jipaas.orchestration.service.app.dto.ImportMappingDTO>] and content type [application/json;charset=UTF-8]

at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:127)

……

Caused by: org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.util.ArrayList<org.jipaas.orchestration.service.app.dto.ImportMappingDTO>` from Object value (token `JsonToken.START_OBJECT`)

……

Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.util.ArrayList<org.jipaas.orchestration.service.app.dto.ImportMappingDTO>` from Object value (token `JsonToken.START_OBJECT`)

 at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 1]

元宝分析:

这个错误的关键在于客户端预期的数据结构与服务端实际返回的数据结构不一致。最稳妥的办法是首先确定服务端返回的确切JSON格式,然后相应地调整客户端的接收类型,是直接使用对象、使用包装类,还是需要自定义解析逻辑。

这个得找产研解决了。

后来跟王凡沟通了下,他说是在相同租户下,不是通过数据迁移导入,而是在服务编排定义界面导入:

先在平台租户,以平台管理员角色登录系统
在 工作台菜单/系统管理/租户管理/租户维护 ,创建一个相同的租户:HAND-DEV

然后切换到平台租户,租户管理员角色,

在 工作台菜单/系统管理/角色管理,创建新建的HAND-DEV租户的租户管理员角色,把菜单权限都分配给这个角色,并分配用户admin到这个角色;

然后再切换到新建的HAND-DEV租户,以租户管理员角色

进入菜单 服务编排/服务编排定义,右上角导入,导入完成后可以看到导入的服务编排:

问题十七、集成平台服务编排编辑流程报错

菜单 服务编排/服务编排定义,导入的16个服务编排流程中,有4个点[编辑]报错: 比如:

后台服务报错信息:
2026-01-18 07:24:48.173 ERROR 1 — [  XNIO-1 task-2] o.h.core.exception.BaseExceptionHandler  : Unknown exception, Request: {URI=/v1/10/orch-definitions/=a2j0_i3_rTyvt0UxFM3Os-6o6vIQP2NfwyxjNyxF_Pw==}, User: CustomUserDetails{userId=2, username=admin, roleId=13, roleIds=[13], siteRoleIds=[], tenantRoleIds=[13], roleMergeFlag=false, secGrpIds=[], tenantId=10, tenantIds=[0, 10, 2], organizationId=0, isAdmin=true, clientId=null, timeZone=’GMT+8, language=’zh_CN, roleLabels='[], apiEncryptFlag=1}

java.lang.NullPointerException: Cannot invoke “com.fasterxml.jackson.databind.JsonNode.asText()” because the return value of “com.fasterxml.jackson.databind.JsonNode.get(java.lang.String)” is null

这个得找产研解决了。

问题十八、低代码平台AI生成页面问题

目前这个AI生成页面的功能,只在平台层开放。

进入平台租户,切换到低代码开放平台的工作台

点这个按钮,如果系统中缺少专门为低代码开发的Agent编排,则会报错:

在 平台菜单/AIGC中台/应用中心/企业应用库

打开低代码助手这个应用,可以看到里面用的Agent编排:

然后去Agent编排定义的地方看是缺少了【生成低代码业务对象和页面】这样的编排。

去trail环境,导出编排,然后在导入的时候报错:

提示是账户组合不存在,AZUREGPT4O2, 那我们先建立个账户组合:

建立账户组合之后再次导入:

这次导入成功了,但还是看不到,问了产研说是全局配置的地方,要把权限控制关掉,或者把当前角色加进去,简单起见,我们就先关掉。

然后再回到编排界面,就能看到了:

导入后都需要重新发布一下。

关乎编排用到的账户组合,我们在数据库中可以看到:

但是,在界面上没有明显的地方能看到 编排用的账户组合设置。有的时候前端报错,后台发服务只是提示模型请求失败,但没有明确的提示说那个模型账户请求失败,在监控的地方也找不到这这错误提示,需要自己清楚编排用到了哪些账户组合,去检查这些账户组合的模型的APIKey是否都已经配置好,并测试OK。 后来问AI平台的产研,了解到这个配置在编辑的时候是隐藏在三个小单点里面:

这个编排流程还是有点复杂的:

配置这个编排的权限,把平台管理员加上:

然后回到企业应用库,选择低代码AI助手 – 业务对象

执行报错:

看aip-app服务日志:Caused by: org.hzero.aip.model.domain.exception.ModelRuntimeException: haip.error.model_request.failure

打开低代码AI助手应用,会一闪而过:

测试这个编排的时候界面也是一闪而过, 后台日志看不出啥错误,前端有错误,好像是json解析出错了:

看下服务器有无最新修订版:后端服务hzero-aip当前版本是1.6.1.ALPHA.4,制品库hzero-release目录下最新修订版是1.6.1.ALPHA.6.2 ,hzero-aip-app最新版本是1.6.1.ALPHA.6.3

前端当前版本是:1.6.1-alpha.4,制品库hzero-ui 目录下最新修订版是hzero-front-haip-1.6.1-alpha.6.tgz 也得升;

那就升级

后端hzero-aip 和hzero-aip-app两个服务的pom版本改到1.6.1.ALPHA.6.2 和 1.6.1.ALPHA.6.3

升级完毕,都成功了,重启服务

测试:升级后,AIGC生成低代码对象和页面的 Agent编排流程测试还是一闪而过了

在应用库打开 低代码AI助手 时依然白屏,问题依旧。

跟产研前端组沟通了下,检查了实际情况,发现前端还是1.6.1-alpha.4,没有成功升级到1.6.1-alpha.6,另外说要在package.json中加一条:hzero-front-haip-card

    “hzero-front-haip”: “1.6.1-alpha.6”,

    “hzero-front-haip-card”:”1.6.1-alpha.2.7″,

为啥上次没升成功呢? 想起来了,上级升级后忘记执行 apply_update_to_runtime_env.sh 部署了。

再次升级前端,这次主要就是把卡片加上。

$ yarn

$ yarn run build:ms hzero-front-haip-card

Done in 370.76s.

完成后执行部署:

$ bash apply_update_to_runtime_env.sh

再次测试,发现还是白屏,产研前端说看下WS的返回:

然后说,就是那个卡片问题 ,然后问后端是否升级到了最新版:

hzero-aip-server 1.6.1.ALPHA.6.4

hzero-aip-app 1.6.1.ALPHA.6.3

hzero-front-haip hzero-front-haip@1.6.1-alpha.6

我看了下我的后端,没有到这个版本,只是1.6.1.ALPHA.6.2

继续升级后端到产研前端同时说的版本,再测试:结果:

hzero-aip-server 启动失败了,out of memory了,

JVMDUMP010I Snap dump written to /d02/hzero-aipaas/project/ps-aip-server/target/Snap.20260126.123409.50072.0004.trc

JVMDUMP013I Processed dump event “systhrow”, detail “java/lang/OutOfMemoryError”.

这个服务内存分配了2G的,之前没有out 过,先不管,重新启动,重启成功。但是一会儿又出现out of memory了,把内存调整到2.5G,再重启:这次OK了,但是测试还是白屏.

而且发现 :hzero-aip-server 1.6.1.ALPHA.6.X 不稳定,有内存溢出问题   恢复到 1.6.1.ALPHA.4了。

低代码产研组有次解决了其他人碰到的类似问题,说是把卡片前端升级到 hzero-front-haip-card@1.7.0-alpha.1 可以解决,试一下:

修改package.json后

$yarn

Done in 17.94s

$yarn run build:ms hzero-front-haip-card

结果报了一堆错:

ERROR in ./node_modules/hzero-front-hlod/lib/routes/NewRenderEngine/RenderContainerComponents/RenderSteps/RenderSteps.js 16:0-27

Module not found: Error: Package path ./v4 is not exported from package /d02/hzero/front/front/node_modules/hzero-front-haip-card/node_modules/uuid (see exports field in /d02/hzero/front/front/node_modules/hzero-front-haip-card/node_modules/uuid/package.json)

前端组说需要回滚:

那还是在 package.json中改回:

“hzero-front-haip-card”:”1.6.1-alpha.2.7″,

然后再yarn ,yarn run build:ms

yarn run build:ms hzero-front-haip,hzero-front-haip-card

Done in 617.23s.

然后说我这个跟其他人工单问题不一样,1.6.1的后端服务对应的卡片就是1.6.1 对应的 就是 1.6.1-alpha.2.7,不能用那个1.7.0-alpha.1的,至于卡片出不来 可能需要试试编排对应关联的卡片 在卡片管理那是不是能预览, 对不对。

看监控:

把卡片输出的json发给产研前端看,认为有问题,输出内容有截断。

这个卡片有问题:

保存重新发布后,编排测试就不会白屏了:

Trail环境这个卡片是完整的,于是把低代码相关的8个卡片从trial环境导出,再导入。导入后内容是有了,不过显示有问题:

这个显示问题在trail环境没有问题,跟产研前端沟通了下,说是卡片依赖了飞搭的前端,要添加下依赖,发了个新版本hzero-front-haip-card@1.6.1-alpha.2.8,接下来把前端卡片升级到这个版本再看看:package.json 中卡片改到这个版本

$yarn

Done in 31.68s.

$yarn run build:ms hzero-front-haip-card

结果报错了,一堆错误指向依赖hzero-front-hlod相关的内容缺失,看起来是渲染卡片的飞搭前端程序依赖新版的飞搭前端了。

前端产研说先回滚,让飞搭前端团队验证了以后再说。

回滚:

那还是在 package.json中改回:

“hzero-front-haip-card”:”1.6.1-alpha.2.7″,

然后再yarn ,yarn run build:ms

yarn run build:ms hzero-front-haip,hzero-front-haip-card

Done in 593.84s.

回滚成功;

第二天前端产研说发了一个新的修订版,让试一下:

    “hzero-front-haip”: “1.6.1-alpha.6.1”,

    “hzero-front-haip-card”:”1.6.1-alpha.3″,

修改package.json后

$yarn

Done in 70.77s.

yarn run build:ms hzero-front-haip,hzero-front-haip-card

Done in 625.03s.

这次编译成功了。

完成后执行部署:

$ bash apply_update_to_runtime_env.sh

然后启动服务测试:

测试结果:卡片预览显示正常了,问题解决。

拷贝到Docker环境:

$ cp -r  -Force \\wsl.localhost\Ubuntu-2204-hzero-openjdk\d02\hzero\front\dist   \\wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\volumes\nginx\

另外关于后端服务 ,产研组说1.6最新的修订版是hzero-aip-server 1.6.1.ALPHA.6.5,hzero-aip-app 1.6.1.ALPHA.6.4

先尝试下hzero-aip-server 1.6.1.ALPHA.6.5 ,看看还有没有内存溢出问题,有的话,把log发给姜洲。

实际测试下来,也是有内存问题的,log已经发给姜洲。

还是回滚到1.6.1.ALPHA.4

后来在docker环境发现,低代码AI助手编排测试正常后,去看低代码AI助手的应用,点全屏连接的时候依然白屏,但这个问题在非docker环境是不存在的,判断不是程序问题。后来尝试换卡片也不行,去掉该应用的一个Agent编排也不行,就判断应用本身有问题,于是新建一个一模一样的应用,发现就么有问题。所以后来就取消发布,记住该应用的编码,然后删除该应用,重新建一个相同的应用,编码也用原来的。 问题就解决了。在低代码里面调用也正常。

继续测试: 接下来把编排的模型换成豆包seed 1.8多模态模型,测试图片识别生成:

#从低代码工作台,调研问卷领域进入,进入AI生成页面:

开始新会话,然后上传手绘采购订单图片,发现流程报错:

进入Agent监控,打开执行流程日志:

有报错信息:

Caused by: org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request on POST request for “https://ark.cn-beijing.volces.com/api/v3/chat/completions”: “{“error”:{“code”:”InvalidParameter”,”message”:”schema must be provided. Request id: 021770360514613b1540e0519088842060f281dec849b042fa5ea”,”param”:””,”type”:”BadRequest”}}”

后台服务aip-app服务日志,显示是:2026-02-06T14:48:39.414+08:00  WARN 63182 — [hzero-aip-app] [       model-38] o.h.a.m.d.s.GradientIntervalStrategy     : CHAT@HAIP.DOUBAO_CHAT_COPY is silenced, release time is: 2026-02-06T14:50:34.956188440

说是模型账号被silenced了。

产研建议升级到:

hzero-aip-server        1.6.1.ALPHA.6.12
hzero-aip-app        1.6.1.ALPHA.6.10

新的版本已经默认关闭这个静默了。

hzero-aip-server 升级到1.6.1.ALPHA.6.12依然有内存溢出问题,回退到1.6.1.ALPHA.4;

过了一小时,产研给了最新修复版:1.6.1.ALPHA.6.12.1 经测试这个版本的内存溢出问题解决了。

hzero-aip-app 升级到1.6.1.ALPHA.6.10 没有问题,可以用,继续功能测试,发现在原来那个Agent编排的节点依然卡住,不过这次aip-app服务后台的报错信息不一样了:

Caused by: java.lang.NullPointerException: Cannot invoke “java.lang.String.hashCode()” because “<local2>” is null

at org.hzero.aip.model.domain.vo.Parameter.toJsonSchema(Parameter.java:36) ~[hzero-aip-common-1.6.1.ALPHA.6.8.jar!/:1.6.1.ALPHA.6.8]

at java.base/java.util.Optional.map(Optional.java:260) ~[na:na]

这个问题的原因是:模型不支持json schema,需要在模型对接配置的地方关掉这个选项,但检查模型对接发现默认是关闭的,也没有开:

产研在检查是否代码实现逻辑跟配置没有同步。

过了一会,产研修复了问题,升级到:

hzero-aip-server        1.6.1.ALPHA.6.13
hzero-aip-app        1.6.1.ALPHA.6.12

升级后再测试,发现那个节点还是没有能过去。

Hzero-aip-app服务的日志,显示错误:

com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve subtype of [simple type, class org.hzero.aip.common.jsonschema.JsonSchema]: missing type id property ‘type’ (for POJO property ‘properties’)

 at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 155] (through reference chain: org.hzero.aip.common.jsonschema.ObjectSchema[“properties”]->java.util.LinkedHashMap[“platform”])

at com.fasterxml.jackson.databind.exc.InvalidTypeIdException.from(InvalidTypeIdException.java:43) ~[jackson-databind-2.18.1.jar!/:2.18.1]

产研说查下本地maven库,是不是没拉到最新的:

本地maven库最新的版本信息如下:看起来是最新的:

\root\.m2\repository\org\hzero\hzero-aip-server\1.6.1.ALPHA.6.13

\root\.m2\repository\org\hzero\hzero-aip-app\1.6.1.ALPHA.6.12

不过产研说\hzero-aip-app\1.6.1.ALPHA.6.12 这个覆盖过,要在本地库删除掉,重新拉。

删除重新拉后再运行测试:还是同样错误,产研让升级到1.6.1.ALPHA.6.13 试试。

升级到6.13还是错误,设置为debug模式,打详细日志给产研,产研具体分析日志后暂时看不出问题,尝试用自定义模式新建了豆包1.8 seed多模态的账户:

单测这个账户OK,然后添加到现有组合。继续测试,这次又往下走了几步:

2026-02-11T05:31:21.973Z ERROR 1 — [hzero-aip-app] [async-execute-3] o.h.a.a.f.s.impl.FlowExecuteServiceImpl : [Flow Executor] [0bb282fed69c4bae8f6a5a1b9ca74012] Failed on node AIGC 生成低代码业务对象和页面/LOWCODE.BUSINESS_OBJECT_PAGE/CHAT_2025031411431417419237947530: class org.hzero.aip.agent.flow.execute.executor.impl.chat.ChatNodeHandler

feign.RetryableException: Read timed out executing POST http://hzero-file/v1/0/files/byte?bucketName=haip&directory=interaction&fileName=06dded21e9414302b4d4a59a220042b5%40%E6%89%8B%E7%BB%98%E9%87%87%E8%B4%AD%E8%AE%A2%E5%8D%95.jpg⁠

at feign.FeignException.errorExecuting(FeignException.java:300) ~[feign-core-13.5.jar!/:na]

at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:132) ~[hzero-starter-feign-replay-1.12.0.RELEASE.jar!/:na]

这次错误是:feign调用hzero-file服务读取文件是time out了,重启hzero-file服务再试:

有问题,看文件管理界面汇总查询也在打圈圈,看起来是minio服务出问题了,重启minio服务,重启后文件服务正常了,再测试编排流程:结果还是文件服务read timeOut了,查文件服务的日志,out of Memory了:
2026-02-09T20:10:34.012+08:00 ERROR 108664 — [hzero-file] [   XNIO-1 I/O-4] org.xnio.listener                        : XNIO001007: A channel event listener threw an exception

java.lang.OutOfMemoryError: Java heap space

at java.base/java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:332) ~[na:na]

at io.undertow.server.DefaultByteBufferPool.allocate(DefaultByteBufferPool.java:149) ~[undertow-core-2.3.18.Final.jar!/:2.3.18.Final]

at io.undertow.server.protocol.http.HttpReadListener.handleEventWithNoRunningRequest(HttpReadListener.java:149) ~[undertow-core-2.3.18.Final.jar!/:2.3.18.Final]

at io.undertow.server.protocol.http.HttpReadListener.handleEvent(HttpReadListener.java:136) ~[undertow-core-2.3.18.Final.jar!/:2.3.18.Final]

想来大概是我不断重试文件操作,把内存给用爆了。加大内存重启HZERO-file服务,这次文件read timeout的问题没有了,但是这个节点还是过不去,问题出在aip-app服务,不过这个服务日志看不出问题:
io.choerodon.core.exception.CommonException: 程序出现错误,请联系管理员

at org.hzero.core.util.ResponseUtils.lambda$static$1(ResponseUtils.java:54) ~[hzero-starter-core-1.12.1.RELEASE.jar!/:1.12.1.RELEASE]

继续看aip-server日志:发现是文档的文件太长了:

### SQL: INSERT INTO hdoc_document (creation_date, created_by, last_update_date, last_updated_by, object_version_number, document_uuid, document_name, public_flag, tenant_id, delete_flag) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

### Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column ‘document_name’ at row 1

; Data truncation: Data too long for column ‘document_name’ at row 1

at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:118) ~[spring-jdbc-6.2.1.jar!/:6.2.1]

at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:107) ~[spring-jdbc-6.2.1.jar!/:6.2.1]

at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:116) ~[spring-jdbc-6.2.1.jar!/:6.2.1]

看起来这个varchar2(120)长度不够用?把字段长度改成240,再测试:还是错误,重启aip-server服务,再测试:还是同样错误,看起来不是改字段长度能解决的,那就改测试数据,把图片文件名7f96cbebc8d64775a9b7143af26b1493@手绘采购订单.jpg 改短:手绘采购订单.jpg 再测试:这次这个节点终于过去了。

备注: 在后来的测试中,发现改字段长度可以解决这个问题,但是,单纯改hdoc_document的document_name字段这一个地方不够,还需要修改hdoc_document_tl 表的 document_name ,hdoc_document_version表的 version_name
hdoc_document_version_tl表的  version_name 这四张表的字段长度都要改成240,就可以解决文档名长度不够的错误

这个图片识别的节点,还可能会出现错误:Read timed out executing POST http://hzero-file/v1/0/files/byte?bucketName=haip&directory=interaction&fileName=06dded21e9414302b4d4a59a220042b5%40%E6%89%8B%E7%BB%98%E9%87%87%E8%B4%AD%E8%AE%A2%E5%8D%95.jpg⁠

初看以为是hzero-file服务的错误,但原来这个节点对模型为空,配置这个节点对话模型为多模态模型后,这个read time Out问题就过去了,因为确实在hzero-file服务日志中也没有其他错误。但hzero-aip服务的日志中提示这个read time Out的错误具备误导性。

新的错误出现在这个节点:

这个错误是aip-app的日志,
io.choerodon.core.exception.CommonException: 程序出现错误,请联系管理员

at org.hzero.core.util.ResponseUtils.lambda$static$1(ResponseUtils.java:54) ~[hzero-starter-core-1.12.1.RELEASE.jar!/:1.12.1.RELEASE]

at org.hzero.core.util.ResponseUtils.getResponse(ResponseUtils.java:230) ~[hzero-starter-core-1.12.1.RELEASE.jar!/:1.12.1.RELEASE]

at org.hzero.core.util.ResponseUtils.getResponse(ResponseUtils.java:86) ~[hzero-starter-core-1.12.1.RELEASE.jar!/:1.12.1.RELEASE]

at org.hzero.aip.agent.flow.execute.executor.impl.chat.ChatNodeHandler.createPersonalDocuments(ChatNodeHandler.java:1385) ~[hzero-aip-app-1.6.1.ALPHA.6.13.jar!/:1.6.1.ALPHA.6.13]
但是没有明确的错误信息,而且在aip-server中也没有出现错误。不知道是啥原因了:

产研看了下,应该是前面调用飞搭内部API创建对象时报的错,应该到hzero-modeler服务的日志中去找原因。在hzero-modeler服务日志中可以看到错误信息:

2026-02-09T20:53:05.545+08:00 ERROR 21206 — [hzero-modeler] [  XNIO-1 task-6] o.h.core.exception.BaseExceptionHandler  : Unknown exception, Request: {URI=/v1/0/business-objects/domain/simple-generator}, User: CustomUserDetails{userId=2, username=admin, roleId=1, roleIds=[1, 2, 9], siteRoleIds=[1, 9], tenantRoleIds=[2], roleMergeFlag=false, secGrpIds=[], tenantId=0, tenantIds=[2, 0], organizationId=0, isAdmin=true, clientId=null, timeZone=’GMT+9, language=’zh_CN, roleLabels='[MODEL_PLATFORM_ADMIN, LOWCODE_PLATFORM_ADMIN], apiEncryptFlag=1}

org.springframework.dao.DataIntegrityViolationException:

### Error updating database.  Cause: java.sql.SQLIntegrityConstraintViolationException: Column ‘field_type’ cannot be null

### The error may exist in org/hzero/modeler/business/infra/mapper/BusinessObjectFieldMapper.java (best guess)

### The error may involve org.hzero.modeler.business.infra.mapper.BusinessObjectFieldMapper.updateOptional-Inline

### The error occurred while setting parameters

### SQL: UPDATE hmde_bo_field SET last_update_date = ?, last_updated_by = ?, object_version_number = object_version_number + 1, bo_field_name = ?, remark = ?, required_flag = ?, default_value_type = ?, default_value = ?, max_length = ?, component_type = ?, formula = ?, country_code = ?, max_value = ?, min_value = ?, digital_accuracy = ?, master_bo_id = ?, master_field_code = ?, master_field_name = ?, master_option_type = ?, master_option_code = ?, master_opt_display_field_code = ?, master_required_flag = ?, cascade_del_strategy = ?, ref_bo_field_code = ?, ref_bo_associate_code = ?, lov_code = ?, attribute_json = ?, link_relation_type = ?, exportable_flag = ?, rule_code = ?, sequence_isolation_level = ?, multi_language_flag = ?, bo_option_code = ?, option_type = ?, option_display_field_code = ?, default_display_field_flag = ?, storage_encrypt_flag = ?, field_behavior = ?, use_type = ?, storage_code = ?, storage_bucket_name = ?, storage_directory = ?, attachment_delete_flag = ?, parent_id = ?, field_type = ?, child_field_category_code = ?, custom_field_code = ? WHERE bo_field_id = ? AND OBJECT_VERSION_NUMBER = ?

### Cause: java.sql.SQLIntegrityConstraintViolationException: Column ‘field_type’ cannot be null

; Column ‘field_type’ cannot be null

at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:97) ~[spring-jdbc-6.2.1.jar!/:6.2.1]

看起来往 hmde_bo_field 表插入数据时,field_type有空字段导致的。估计可能是有个字段加工过程出问题了。

第二天,重启了服务,然后查看所选低代码领域”调研问卷”中的业务对象,存在之前创建过的采购订单头和行,考虑到之前测试时,对业务对象的处理方式在卡片中选择的是新建,而不是更新,这个应该也不符合测试要求。于是把这两个业务对象删除之后再测试,这次测试成功了:成功创建了采购订单的业务对象和页面。

在Ageng运行监控处显示“成功”

查看执行详情,可以看到流程都顺利执行了:

还有一次碰到一个问题:

问题卡在节点:批量创建对象。

然后因为之前单独运行过AI生成对象的流程编排,已经创建过物理表,我就把物理表删除了,但即使把物理表删除了,去单独发布AI生成的对象也会报错:

原因是:这个物理对象在飞答元数据中有记录,解决这个问题,需要同步表物理模型:这个同步的作用是会查看实际物理表,如果不存在会把对应的元数据删除掉,这样就不会产生误判了。

另外就是删除未发布的业务对象,并不会同步删除对应的表物理模型,如果要一起删除掉表物理模型,需要在系统界面“表物理模型”的地方去删,这样会把元数据记录和实际的物理表一起删除:

总结下修正内容:

1、解决这个问题的前提是已经解决问题二十,多模态识别问题。

2、hzero-aip-server 和hzero-aip-app 都升级到1.6.1.ALPHA.6.13

3、hzero-aip-app 的启动类注释掉@EnableWebFlux 注解,application.yml更改配置:支持100M的payload

4、在hzero-gateway的application.yml中调整timeout配置,原来是2秒,调整到20秒依然有问题,调整到200秒就没问题了。

5、新建自定义账户,模型类型=对话-vllm, 账户编码=JACK-TALK-DOUBAO-SEED-1.8-3, 账户名称=Jack对话-豆包-seed-1.8-3,Model=doubao-seed-1-8-251228

开放API地址=https://ark.cn-beijing.volces.com/api/v3/chat/completions

支持多模态=Y,支持非流式=Y,支持json_object=Y ,是否支持函数调用=Y,图片传输方式:BASE64,最大上下文token数=80000,最大响应token数=8000

认证类型=自定义健值认证,健值位置=请求头参数,健=Authorization,自定义的配置=Bearer+空格+火山引擎大模型APIKey

默认参数:KV模式,参数名称=thinking,参数值={“type”:”disabled”}

6、把账户Jack对话-豆包-seed-1.8-3 添加到账户组合:Jack-talk-multmodel (组合名称:Jack对话-多模态)

7、把Jack-talk-multmodel配置给Agent编排中分类为飞搭的三个编排。

8、AI平台全局配置的切片配置处,图片识别模型配置为这个多模态模型(这里不配置会让HKMS服务报错)

9、hzero-file文件服务的max内存调整到800M

#更新Docker环境 (待执行):

  1. hzero-gateway、hzero-aip-app 和hzero-aip-server重新打镜像包

cp \\wsl.localhost\Ubuntu-2204-hzero-openjdk\d02\hzero\project\ps-gateway\target\ps-gateway.jar \\wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-gateway-docker\

cp \\wsl.localhost\Ubuntu-2204-hzero-openjdk\d02\hzero-aipaas\project\ps-aip-app\target\ps-aip-app.jar \\wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-aipapp-docker\

cp \\wsl.localhost\Ubuntu-2204-hzero-openjdk\d02\hzero\project\ps-license\licenseAgent\license-agent112a.jar \\wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-aipapp-docker\

cp \\wsl.localhost\Ubuntu-2204-hzero-openjdk\d02\hzero-aipaas\project\ps-aip-server\target\ps-aip-server.jar \\wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-aipserver-docker\

cp \\wsl.localhost\Ubuntu-2204-hzero-openjdk\d02\hzero\project\ps-license\licenseAgent\license-agent112a.jar \\wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-aipserver-docker\

cd  /d01/openJ9-0.53-dockers

bash load-dockers.sh

$ cd /d01/hzero-dockers/hzero-gateway-docker

$ docker build -t hzero-gateway-jk-demo:1.12 .

$ cd /d01/hzero-dockers/hzero-aipapp-docker

$ docker build -t hzero-aip-app-jk-demo:1.12 .

$ cd /d01/hzero-dockers/hzero-aipserver-docker

$ docker build -t hzero-aip-server-jk-demo:1.12 .

  • hzero-file 更改docker-compose.yml文件,更改启动服务的max内存到800M
  • 启动服务,执行总结中的5、6、7、8

测试:功能完成:

问题十九、Agent应用的权限问题

现象,Agent应用发布后,拷贝应用连接中的全屏连接,在另一个浏览器tab页打开,发现错误:

hzero-app-server的application.yml 中,设置

org.apache.ibatis: ${LOG_LEVEL:DEBUG}

后台服务日志出现加解密错误:

io.choerodon.core.exception.CommonException: error.key-encrypt.decrypt.error

元宝说可能是版本不一致导致的,考虑到之前hzero-aip-app升级的了1.6.1.ALPHA.6,但我hzero-aip 服务已经降到1.6.1.ALPHA.4, 所以这次把hzero-aip-app也降低到1.6.1.ALPHA.4再试:发现还是一样的加解密错误:

找了产研,产研把这个Agent应用取消发布后再重新发布就正常了,开源代码好像是缓存问题。取到缓存就OK了,取不到就报错。

以后再碰到类似问题,就取消发布再重新发布,生成缓存。

这个问题解决后,到低代码平台,试用AI生成业务对象的功能,可以正常使用了:

拷贝前端文件到docker环境:

cp -r -Force \\wsl.localhost\Ubuntu-2204-hzero-openjdk\d02\hzero\front\dist \\wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\volumes\nginx\

问题二十、问答应用中 多模态模型图片识别问题:

配置了豆包Seed1.8多模态模型,问答的时候,上传图片,结果报错:调用HKMS执行文件切片时发生错误:Failed: Either`image_explainer or `ocr adapter must be provided

这是个多模态模型,按理不需要OCR,这里提示OCR,产研说是模型配置的时候没有打开多模态属性,需要打开这个属性,另外图片格式,因为是本地服务器,外网无法访问到文件服务器,所以要设置成Base64格式。

另外就是全局配置的切片配置处要配置图片识别模型为这个多模态模型:

更改之后,上述错误就没有了,但提示 :网络错误:

http://hzero-aip-app:8088/v1/open/chat/kms 无法访问。

查HKMS服务的日志,显示是调用

http://hzero-aip-app:8088/v1/open/chat/kms报错

2026-02-03 09:41:06 [44][MainThread] [ERROR] (api.py:68) Exception when call HZERO API at url ‘http://hzero-aip-app:8088/v1/open/chat/kms’: error.network – 网络异常,请稍后重试

Traceback (most recent call last):

在hzero-hkms容器内,curl命令访问

http://hzero-aip-app:8088/v1/open/chat/kms可以连通。说明连接到hzero-aip-app:8088的网络没有问题。

看aip-app服务的日志,有报错是payload容量超载了:

2026-02-03T17:08:06.049+08:00 ERROR 73158 — [hzero-aip-app] [or-http-epoll-6] o.h.a.i.handler.RequestExceptionHandler : Unknown exception for request: StrictFirewallHttpRequest [delegate=org.springframework.http.server.reactive.ReactorServerHttpRequest@e996c636] org.springframework.web.server.PayloadTooLargeException: 413 PAYLOAD_TOO_LARGE

产研说尝试更改 hzero-aip-app服务的application.yml配置:

      # 等待连接池分配连接的最大时长(毫秒)

      connection-timeout: ${SPRING_DATASOURCE_CONNECTION_TIMEOUT:30000}

  server:

    max-http-request-size: 100MB  # 全局最大请求体大小

  codec:

    max-in-memory-size: ${SPRING_CODEC_MAX_IN_MEMORY_SIZE:100MB}

spring.cloud.gateway:

  httpclient:

    max-in-memory-size: 100MB

  server:

    max-http-request-size: 100MB

更改后依然有问题,然后尝试更小的图片文件,之后几十K(原来那个有问题的图片有2M,依然不行),小图片会显示网关TimeOut问题,不过后台依然继续运行了,所以是可以测试出效果了:

至于网关TimeOut的问题,在hzero-gateway的application.yml中原来是2秒,调整到20秒依然有问题,调整到200秒就没问题了,进一步研究发现,这个模型带思考模式,思考比较花时间,但看说明是可以关掉思考的,这样可以节省9秒。

在模型配置的地方加个参数就好了:

豆包说图片转BASE64大约会增加30%的大小,所以对于一个2.5M的图片,转BASE64后大小约3M,按照我们上面的设置大小应该够了,至于还提示超限错误,估计还是有参数没有设置对,问元宝,给出的建议是调整hzero-aip-app服务的application.yml中如下两个参数:

# application.yml 配置

spring:

  codec:

    max-in-memory-size: 10MB

  webflux:

max-in-memory-size: 10MB

改了之后重启服务,问题依旧,不过元宝提到如果使用了nginx反向代理,也要调整配置,按建议修改:

# aigc.hzero.com.cn 专用服务器

server {

    listen 80;

    server_name aigc.hzero.com.cn;

    # 设置此server块的默认客户端请求体最大大小为20MB

    client_max_body_size 100M;

    location / {

        # 改为后端服务实际IP:端口

        proxy_pass http://127.0.0.1:8088;  # 示例:假设后端在本机8088

        # 添加WebSocket支持

        proxy_http_version 1.1;

        proxy_set_header Upgrade $http_upgrade;

        proxy_set_header Connection $connection_upgrade;

        proxy_set_header Host $host;  # 保留一个Host配置

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_buffering off;  # 按需开启/关闭(实时交互场景建议关闭)

        # 可选:调整代理超时设置,应对大文件上传耗时

        proxy_connect_timeout 60s;

        proxy_send_timeout 60s;

        proxy_read_timeout 120s;

    }

}

重启nginx服务,问题依旧。不能超过256K;

后来的实验证明:这个问题跟Nginx配置没关系,实际不需要更改Nginx配置,一样是可以正常运行的。

后来继续跟踪这个问题,产研说,要把hzero-aip-app服务启动类里面的@EnableWebFlux 注解去掉,说 app 服务不要加这个注解,加了这个注解会覆盖掉一些自己的配置,导致配置不生效。

#去掉这个注解,然后重新build,经过测试,可以了,一个2.5M图片可以成功上传并解析:

又测试了一张5.8M大小的图片,上传并解析返回时间大约为35秒:

但直接在豆包中上传文件并返回总结的时间是秒级的,这里面差距主要在什么环节呢?

HZERO PaaS平台-Docker版demo笔记(二)Docker版测试 问题10-15

问题十、新建租户失败

现象:在2026/01/09下载的版本上,有同事 发现以平台租户下系统管理员身份创建新的租户HAND-DEV 出错

分析:检查/网络 :调用的是iam服务的API , 返回200 Ok,响应中提示的错误是:

“exception”:”io.choerodon.core.exception.CommonException: hiam.error.role.tplRoleNotFound”,

    “throwable”: [

        “hiam.error.role.tplRoleNotFound”,  “org.hzero.iam.saas.domain.service.observer.TenantRoleObserver.lambda$tenantCreate$1(TenantRoleObserver.java:59)”,

检查hzero-iam 服务的后台日志,发现在这个错误之前有另一个错误:

Exception in thread “pool-40-thread-9” org.springframework.dao.QueryTimeoutException: Redis command timed out

检查redis容器的CPU占用和内存占用都很低,看起来Redis服务没啥问题。

继续检查redis:

#查询耗时超过50毫秒的客户端命令:

/data # redis-cli 127.0.0.1:6379> config set slowlog-log-slower-than 50000

让豆包对输出内容进行分析:

1. 高风险耗时命令(直接导致超时)

SET “hpfm:language:auto-refresh:lock”:耗时 165.5ms(第 4 条)

DEL “apaas:data-transport:active:hzero-lowcodedata”:耗时 132.1ms(第 5 条)

SET “apaas:data-transport:active:hzero-modeler”:耗时 44.9ms(第 7 条)

如果你的 Spring 配置中 redis.timeout 是默认的 2000ms(2 秒),单条命令 165ms 本不该超时,但高并发下多条慢命令排队,总耗时就会超过阈值(比如 10 条 160ms 的命令排队,总耗时 1.6 秒,接近 2 秒超时)。

2. 潜在风险命令(HGETALL)

HGETALL “hiam:doc:permission:rule:hadm_notice_publisher”(第 13 条)

HGETALL “hpfm:permission:hadm_service_route”(第 14 条)

HGETALL 是全量获取哈希表的命令,如果哈希表中字段数多(比如上千个),即使单次耗时 11.5ms(11546 微秒),高频率执行也会:

占满 Redis 单线程(Redis 单线程每秒处理能力有限);

导致后续命令排队,总耗时累积超时。

#继续查询各命令执行次数:

$ docker exec -it redis-hzero redis-cli info commandstats | sort -k 4 -r

输出结果中,有一条比较特殊:

cmdstat_hgetall:calls=15346,usec=-1069515,usec_per_call=-69.69,rejected_calls=0,failed_calls=0

豆包分析:

calls=15008:该命令执行了 1.5 万次,频次极高;

usec=-1073589:耗时字段为负数,说明 Redis 内部的耗时计数器已溢出,实际总耗时远超千万微秒(即数秒甚至数十秒);

即使单次平均耗时显示 -71.53(溢出导致),结合慢查询日志中 HGETALL 实际耗时 11-17ms,1.5 万次执行的总耗时会完全占满 Redis 单线程,导致后续所有命令排队。

豆包总结:

核心根因:HGETALL 执行 1.5 万次且耗时溢出,占满 Redis 单线程,导致其他命令排队超时;

紧急方案:调大 Redis 客户端超时时间和连接池,缓解超时问题;

根本方案:用 HSCAN 替换 HGETALL,分批获取 Hash 数据,清理 / 拆分大 Key;

长期保障:添加 AOP 监控,提前发现慢命令,避免问题复发。

我估计在所有服务一起启动的时候,可能出现redis超时,不过等服务全部启动完成后就不会有超时问题了。所以这个不太可能导致hiam.error.role.tplRoleNotFound这个问题,也就是不太可能因为日志中的redis超时,导致租户创建失败。

#开放平台全平台搜索“tplRoleNotFound” 未搜到任何结果。

#到非Docker环境去创建租户:出现问题是一样的。

#我上次创建“低代码演示租户”的时候,没有出现过这个问题,我看下升级日志

2025-09-11  升级飞搭  从 2.9.1-1.12.BETA.8 到  2.10.0.RELEASE

我上次创建“低代码演示租户”的时候是在这次升级之前。

看了这之后的历次升级动作,只有在2025-09-26升级底座的时候升级过iam服务。

2025-09-26  升级HZERO底座   从1.12.1.RELEASE   到  1.12.2.RELEASE

当时,iam服务从1.12.1.RELEASE替换成1.12.2.RELEASE

那我把iam服务的版本退回到1.12.1.RELEASE行不行?尝试一下:

更改:
/d02/hzero/project/pom.xml

/d02/hzero/project/ps-iam-saas/pom.xml

尝试了,不行,iam服务退回到1.12.1.RELEASE后,系统就无法登录了。

还是恢复到1.12.2.RELEASE

继续思考:报错信息是tplRoleNotFound,是不是模板角色未找到?

尝试下 在创建租户时“集成租户管理员模板”选择“否”,结果错误跟原来是一样的。

看下有无更新的补丁版:最新版是2025/03/18 的版本,后面没有更新的了。

那可能是数据问题?

搞不定了,明天上班,去问下产研吧!

第二天问了产研,产研说看下数据,下面的SQL能否查到,如果查不到原因是什么,针对原因解决即可:

use hzero_platform;

select

ir.id,

ir.name as “name”,

ir.code as “code”,

ir.fd_level,

ir.h_tenant_id,

ir.h_inherit_role_id,

ir.h_parent_role_id,

ir.tpl_role_name,

il.id label_id,

il.name label_name,

il.type label_type

from iam_role ir

join hiam_label_rel hlr on (

hlr.data_type = ‘ROLE’

and hlr.data_id = ir.id

)

join iam_label il on il.id = hlr.label_id

where ir.is_enabled = 1

and il.preset_flag = 1

and il.enabled_flag = 1

and exists (

select 1

from iam_label il

join hiam_label_rel hlr on (

hlr.data_type = ‘ROLE’

and hlr.label_id = il.id

)

where

hlr.data_id = ir.id

and il.enabled_flag = 1

and il.preset_flag = 1

and il.name = ‘TENANT_ROLE_TPL’

)

直接结果是查不到数据,分析原因是因为 hzero_platform.iam_role表中租户管理员模板的is_eanbled标记错了,应该是1,不是0,才能被上面SQL查出来。

解决方案:把这个标记更新成1

update hzero_platform.iam_role set is_enabled=1 where id =5;

更新完成后再次尝试新建租户:

创建成功。问题解决。

问题十一、集成平台,导入编排报错

产研说这个问题升级到1.8的最新版本可以解决掉,集成平台产研组,提供了一个工具,获取某个中版本的最新稳定版小版本。

http://172.22.5.71:8765/index

我们原来的编排服务版本是1.8.1.RELEASE的,查了下最新稳定版是1.8.2.RELEASE

把集成平台的父parent和编排的POM都改成1.8.2.RELEASE之后重新构建成功但启动服务失败。

思考:是否agent的版本依赖有更新,原来用的agent是license-agent110(别名:license-agent103), 改成 license-agent112a试试看。

果然,改了之后服务启动成功。

测试,编排服务正常,但出现调用接口平台错误:

查接口平台日志,发现错误:

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘externalInvokeAdvisor’: Unsatisfied dependency expressed through field ‘advice’: Error creating bean with name ‘internalInvokeAdvisor’: Unsatisfied dependency expressed through field ‘advice’: Error creating bean with name ‘internalInvokeAdvice’: Unsatisfied dependency expressed through field ‘objectMapper’: Error creating bean with name ‘interfaceGatewayConfig’ defined in URL [jar:nested:/d02/hzero-ipaas/project/ps-jipaas-interface/target/ps-jipaas-interface.jar/!BOOT-INF/lib/hzero-interface-gateway-1.1.1.RELEASE.jar!/org/hzero/interfaces/gateway/config/InterfaceGatewayConfig.class]: Error creating bean with name ‘org.springframework.cache.annotation.ProxyCachingConfiguration’: No bean named ‘org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry’ available

元宝分析原因:

主要原因与解决方案

这种内部 Bean 缺失通常不直接是业务代码错误,而是由以下情况引发的 Spring 容器初始化异常:

可能原因

说明与解决方案

版本冲突​

这是最可疑的原因。不同 Spring 组件(如 spring-context, spring-aop, spring-cache)或第三方库(如 MyBatis)的版本不兼容,可能导致内部 Bean 注册紊乱 。解决方案:检查项目的依赖树(如使用 mvn dependency:tree或 gradle dependencies),确保所有 Spring 相关依赖的版本保持一致且兼容。

配置顺序或覆盖问题​

自定义配置或 Bean 可能意外干扰了 Spring 容器的标准初始化流程。解决方案:检查是否有自定义配置类(特别是使用了 @EnableCaching或相关 AOP 配置)或通过 @Primary、@Qualifier注解覆盖了默认 Bean,暂时注释掉这些配置来排查 。

项目构建或缓存问题​

旧的编译文件或损坏的依赖缓存可能导致运行时类路径不完整。解决方案:执行清理和重新构建操作(如 mvn clean compile或清理 IDE 的缓存并重启)。

但我认为不是这个原因,因为这个服务之前一直启动正常,如果有上述问题,不可能之前启动正常。

于是我重启了接口平台服务:

$ cd /d02/hzero-ipaas/project/ps-jipaas-interface

$ bash run_nobuild.sh

重启后服务正常了,编排服务也正常了。

重新打包编排服务的镜像:

  1. 拷贝文件

#Windows PowerShell:

cp \\wsl.localhost\Ubuntu-2204-hzero-openjdk\d02\hzero-ipaas\project\ps-orchestration-all\target\ps-orchestration-all.jar \\wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-orchestration-docker\

cp \\wsl.localhost\Ubuntu-2204-hzero-openjdk\d02\hzero\project\ps-license\licenseAgent\license-agent112a.jar \\wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-orchestration-docker\

  • 更改Dockerfile,把license-agent110改成license-agent112a

COPY license-agent112a.jar /license-agent112a.jar

  • 更改docker-compose.yml ,把license-agent110改成license-agent112a

      – AGENT=-javaagent:/license-agent112a.jar

4、目标环境构建Docker镜像

$ cd /d01/hzero-dockers/hzero-orchestration-docker

$ docker build -t hzero-orchestration-all-jk-demo:1.12 .

5、测试启动容器,可以正常启动服务;

6、save & 更新

问题十二、低代码平台数据迁移功能异常

路径:低代码平台/资源管理/数据迁移,显示有两个服务不可用。

分析:实际情况是这两个服务启动状态正常:

产研的说法是,这个界面的服务状态是从Redis中读取的,查Redis的特定键下面内容,确实缺了这两个服务:

有个疑问是,之前曾经成功导出过数据,这个界面曾经处理到正常状态的,可以参考:

Jack.Shang的技术博客 » HZERO PaaS平台demo升级笔记

那为什么现在又提示这种错误了呢?有个同事的说法是:服务第一次加载的时候会把服务加载到active目录下,那个时候可能会显示正常,然后有服务会去刷新数据,刷新的时候,会看服务的application.yml中有没有配置,如果没有就去掉了:

Hzero:

  apaas:

     data-transport:

        enable: true

我看了自己的hzero-iam服务的配置,配置是有的,但缩进有问题:

更改缩进后再重启hzero-iam服务,发现Redis中就有了:

同样在hzero-platform的application.yml中检查发现,缺少

hzero:

  apaas:

     data-transport:

        enable: true

也加上,再重启hzero-platform服务, 这次不稳定,发现active健下的服务反而变少了。

估计这个健值是hzero-modeler服务里面的定期程序刷进去的,重启hzero-modeler服务。

结果还是老样子。

hzero-modeler服务的application.yml中去掉hzero-lowcodedata,仅保留5个服务即可:

hzero:

  apaas:

data-transport.include-services: hzero-modeler, hzero-lowcode, hzero-platform, hzero-workflow,hzero-iam

重新构建启动hzero-modeler服务

另有同事反馈说:hzero-workflow 父工程的POM中的parent要换成hzero-apaas-parent

    <parent>

        <groupId>org.hzero</groupId>

        <artifactId>hzero-apaas-parent</artifactId>

        <version>2.10.0-1.12.RELEASE</version>

    </parent>

另外开放平台文档中说明的hzero-workflow配合低代码平台要添加跟hzero-modelerxiangguan 的四个依赖,但由于在hzero-workflow本身的POM中都已经添加了,所以在我们自己套壳的ps-workflow的POM中就不需要添加了. 你可以在本地maven库中查看hzero-workflow的POM文件内容,就明白了。

#重新构建启动hzero-workflow服务

重启之后,进去了:

今天先到这里,关闭所有服务,明天再搞:

第二天重启所有服务之后,发现正常了:

那这是算稳定性不够吗? 我再重启hzero-modeler服务试试看:

$ cd /d02/hzero-apaas/project/ps-modeler

$ bash run.sh

重启之后,显示异常:

过一分钟后点”刷新”,又正常了:

如果我们, 去掉redis持久化配置,清空redis ,  再重启会怎样?

我们发现hzero-platform 异常了,实际就是没有进入redis

而且过了10多分钟,多次刷新也没用。

#重启下hzero-platform服务试试看:

$ cd /d02/hzero/project/ps-platform

$ bash run_nobuild.sh

数据迁移界面又正常了:

为什么要这么设计呢? 为什么不直接去注册中心检查服务是否Ok呢?为什么要到redis里面去记录下服务状态OK,才判断为OK呢?这不是增加故障点吗? 此事询问产研,产研的答复是他们要检查的服务状态内容比较多,不是说在注册中心活着就表示服务可用,他们还要检查该服务的其他一些功能可用性,全部检查通过才会放到Redis,表明该服务对飞搭的导入/导出 功能是可用的。

另外,服务的application.yml配置中

Hzero:

  apaas:

     data-transport:

        enable: true

这个配置的作用是什么,如果没加会产生什么影响? lowcode-data服务必须要加这个配置吗?

产研的回答是:开启数据迁移,默认就是开启的,就是你不加这个配置,默认就是true,除非你要禁止数据迁移,要加这个配置,设置为false.

所以,我们刚开始碰到的数据迁移界面上服务异常的这个问题,并非我们上面修改application.yml解决的,也不是ps-workflow服务原来依赖的parent有问题,原来依赖的是hzero-parent, 不是hzero-apaas-parent, 但也能用,没有错误,并不是这个parent的问题导致说在迁移界面显示服务异常,因为之前也是这样的没有异常,只能说是重启服务解决的,但问题的根因还未找到。只是重启相关服务是个解决方法。

问题十三、Redis TimeOut问题

正如我们在问题十所见,

Exception in thread “pool-40-thread-9” org.springframework.dao.QueryTimeoutException: Redis command timed out

这个Redis TimeOut的问题,开始在服务刚开始集中启动时,多个服务都曾经出现timeOut的问题,在不改程序的情况下,是否可以优化,豆包说:
Redis 是内存数据库,而持久化需要将内存数据写入磁盘,磁盘 I/O 速度远慢于内存,会直接带来性能损耗:

RDB 的性能影响:执行 BGSAVE 时,Redis 会 fork 子进程,这个过程会产生内存拷贝(写时复制机制),如果数据量很大,fork 操作会阻塞主进程,导致 Redis 短暂无法响应请求;子进程写入 RDB 文件时,也会占用磁盘 I/O 资源。

所以我们可以关闭Redis的持久化,提高redis的性能。

$ cp /etc/redis/redis.conf /etc/redis/redis.conf.bak20260113

$ vi /etc/redis/redis.conf

# ========== 关闭RDB持久化 ==========

# 注释掉所有以 “save” 开头的行(默认有save 900 1、save 300 10等)

# save 900 1

# save 300 10

# save 60 10000

# 新增空的save规则,彻底禁用RDB

save “”

# ========== 关闭AOF持久化 ==========

# 将appendonly设为no(默认就是no,确认即可)

appendonly no

# 可选:如果之前开启过AOF,可删除AOF文件(避免重启时加载)

# appendfilename “appendonly.aof”  # 无需修改,关闭后不会写入

# ========== 可选:禁用持久化相关的后台进程 ==========

# 禁止自动生成rdb文件(防止意外触发)

rdbcompression no

rdbchecksum no

重启前执行 redis-cli FLUSHALL 命令清空所有数据

$ redis-cli FLUSHALL

$ systemctl restart redis

我们之前用的redis容器,没有挂在持久化文件,使用也正常,但却开启了持久化配置,这个就要改了,因为本身就没有做持久化挂载,还保持持久化配置就是纯浪费性能。

这个很简单,只要改下redis服务的 docker-compose.yml就好了

跟port平级,加上:

command: redis-server –save “” –appendonly no

改完重启,验证是否生效:

docker exec -it redis-hzero redis-cli config get save

root@desktop-jacksen:/d01/hzero-dockers/redis-docker# docker exec -it redis-hzero redis-cli config get save
1) “save”
2) “”

说明已经生效。

重启所有服务,逐个检查所有服务的日志,这次没看到redis 的timeout信息出现。

问题解决。

但后来在使用过程中很快发现,经用Redis持久化之后引起了其他问题,比如hzero-platform 服务日志中经常出现错误:
Caused by: io.lettuce.core.RedisCommandTimeoutException: Command timed out after 5 second(s)

界面操作时不时会出现:504 GATEWAY_TIMEOUT “Response took longer than timeout: PT20S”

所以还是把持久化恢复吧:

$ cp  /etc/redis/redis.conf.bak20260113 /etc/redis/redis.conf

$ systemctl restart redis

然后需要重启hzero-platform服务

#Docker 环境改成持久化

$mkdir -p /d01/hzero-dockers/volumes/redis/{data}

$chmod 777 /d01/hzero-dockers/volumes/redis/data

#docker-compose.yml中注释掉去持久化配置:

#command: redis-server –save “” –appendonly no

#挂载data目录

    volumes:

      # 映射数据目录(持久化文件存储位置,核心)

      – ${DOCKER_VOLUME_DIRECTORY:-../volumes}/redis/data:/data    

持久化恢复也有问题,后来在使用的时候,发现各模块经常会频繁的redis timeout问题,导致系统运行非常卡,默认每5分钟会全量保存持久化一次,太频繁了,后来就改成一小时保存一次。这可以在redis容器的docker-compose.yml中配置:command: redis-server –save 3600 1 –save “”

## 要求Docker/Docker CE >= 19.x

services:

  redis-hzero:

    image: redis:6-alpine

    container_name: redis-hzero

    ports:

      – “6379:6379”

    volumes:

      # 映射数据目录(持久化文件存储位置,核心)

      – ${DOCKER_VOLUME_DIRECTORY:-../volumes}/redis/data:/data   

    #command: redis-server –save “” –appendonly no

    command: redis-server –save 3600 1 –save “”

    deploy:  # 限制容器总内存(Docker Compose v2.3+)

      resources:

        limits:

          memory: 1000m  # 容器最大内存

networks:

  default:

    name: hzero-demo

    external: true

由于是笔记本上WSL虚拟机,我后来发现redis time out的问题不仅仅是这个持久化写的频率问题, 笔记本的电源计划在某天升级Windows后变成了节能模式,在接通电源情况3分钟就休眠,这也是导致各服务卡顿的主要问题。后来就更改了电源计划,在接通电源的模式下改成永不休眠。 卡顿的问题就得到了改善。

另外就是,在碰到前端报gateway timeout错误,在gateway服务中看到 TimeOut错误是调用platform服务导致的等待超时,这种情况可能是重启了redis而没有重启platform服务导致的,在重启platform服务之后可以解决这种卡顿问题。

问题十四:资源分配问题还是OpenJ9 JVM的稳定性问题?

进入流程平台工作台,报hzero-lowcode服务不可用。

分析,查hzero-lowcode服务的日志:

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException:

Error creating bean with name ‘externalInvokeAdvisor’:

Unsatisfied dependency expressed through field ‘advice’:

… [嵌套异常链] …

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException:

No bean named ‘org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry’ available

元宝分析:总而言之,当前服务掉线是由于Spring容器在初始化时因配置或依赖问题而无法启动,并非运行中的崩溃。您的排查重点应放在 依赖版本兼容性​ 和 配置类/Bean的加载顺序​ 上。从日志末尾的EurekaDiscoveryClient来看,这个问题可能与服务注册发现相关的配置有关联。

我之前遇到这种问题是重启解决的,我还是重启一下:结果

有这个错误:

Error starting ApplicationContext. To display the condition evaluation report re-run your application with ‘debug’ enabled.

2026-01-16T06:00:58.870Z ERROR 1 — [hzero-lowcode] [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name ‘observationRestTemplateCustomizer’: Requested bean is currently in creation: Is there an unresolvable circular reference or an asynchronous initialization dependency?

at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.beforeSingletonCreation(DefaultSingletonBeanRegistry.java:421) ~[spring-beans-6.2.1.jar!/:6.2.1]

at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:282) ~[spring-beans-6.2.1.jar!/:6.2.1]

at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:334) ~[spring-beans-6.2.1.jar!/:6.2.1]

元宝分析:问题根源:循环依赖

错误信息 BeanCurrentlyInCreationException和 Is there an unresolvable circular reference?明确指出了问题的核心:Spring 容器在初始化 Bean 时,发现它们之间存在直接的或间接的循环引用关系​ 。

简单来说,这就像几个团队项目互相“卡脖子”:Bean A的创建需要先有 Bean B,而 Bean B的创建又反过来需要先有 Bean A。Spring 容器无法决定谁应该先被创建,从而陷入死锁,最终抛出异常并导致应用启动失败 。

在您这个案例中,问题直接指向了 observationRestTemplateCustomizer这个 Bean。从 Bean 的名称推测,它很可能与 Spring Boot 的应用监控功能(可能是 Micrometer 或相关组件)相关。这个 Bean 在创建过程中,与另一个或多个 Bean 形成了这种循环依赖。

这有无可能是IBM OpenJ9 Jvm的问题?

OpenJ9 和 HotSpot 是两种不同的 JVM 实现,它们在类加载、内存管理和即时编译(JIT)策略上存在差异 。这些底层实现的区别,可能导致 Spring 容器初始化 Bean 的顺序和时机发生微妙的改变。

具体来说,有实践表明,在由 HotSpot 迁移至 OpenJ9 时,可能会遇到一些兼容性问题。例如,某公司在实践中发现,OpenJ9 在类加载机制、内存使用模式等方面与 HotSpot 存在差异,这有时会导致一些在 HotSpot 上运行良好的应用在 OpenJ9 上出现异常 。您的情况很可能类似:之前隐藏在 HotSpot 下的循环依赖,在 OpenJ9 不同的初始化时序下被提前触发了​ 。

简单来说,这就像两个仓库管理员(HotSpot 和 OpenJ9)用不同的方法整理货物(Bean)。可能有一种方法能勉强把有问题的货物塞进仓库,而另一种更“较真”的方法则会立刻发现货物尺寸不匹配而卡住。

按照错误日志第一行的建议,使用 –debug参数重启应用(例如 java -jar your-app.jar –debug)。Spring Boot 会打印出一份非常详细的条件评估报告,其中会清晰列出形成循环依赖的完整 Bean 链条,这是解决问题的关键第一步 。

这个麻烦了,需要该服务的开发者调试。不是我们该干的事。

我还是停掉服务,不要马上重启,过一段时间再重启,结果启动成功了,没有报上面的这种错误。

疑问:是否可以说OpenJ9的JVM不稳定,仅使用于个人实验环境,因为可以通过重启服务解决,但也就是个人实验环境适合这么干?

产研认为不太可能是OpenJ9的稳定性问题,因为外面有很多商业项目也在用OpenJ9,更可能是资源问题;那我再看下资源消耗:

内存消耗目前已经到了864M

我们在docker-compose.yml中分配的max内存是800M,资源非配确实有问题。

      – JAVA_OPTS=-Xms128m -Xmx800m -Dspring.profiles.active=dev

那我们继续做实验,把xmx 调整到600M,再启动,果然又出现之前的bean创建不了的情况了。

#继续实验,把xmx 调整到1000M,再启动,结果启动成功了,没有报上面的那些Bean创建失败的错误。

#继续实验,把xmx 再次调整到600M, 再启动,结果居然也成功启动了,那这个成功启动是不是之前设置为1000M的时候的缓存还在,导致能成功启动的?

#继续实验,关闭服务之后等一会再以xmx=600M 启动,等了大概5分钟后再重启,结果居然也成功了。

那暂时似乎也不能说是资源问题。

问题十五、工作流模拟启动时报错:流程版本未生效!

分析:查hzero-workflow服务日志,错误信息如下:

2026-01-16T08:26:02.546Z  INFO 1 — [hzero-workflow] [ool-3-thread-10] org.hzero.core.util.CommonExecutor       : [>>ExecutorStatus<<] ThreadPool Name: [bean-searcher], Pool Status: [shutdown=false, Terminated=false], Pool Thread Size: 0, Largest Pool Size: 0, Active Thread Count: 0, Task Count: 0, Tasks Completed: 0, Tasks in Queue: 0

2026-01-16T08:26:05.457Z  WARN 1 — [hzero-workflow] [  XNIO-1 task-7] o.h.core.exception.BaseExceptionHandler  : Common exception, Request: {URI=/v1/2/monitor-simulate/start}, User: CustomUserDetails{userId=2, username=admin, roleId=10, roleIds=[10], siteRoleIds=[], tenantRoleIds=[10], roleMergeFlag=false, secGrpIds=[], tenantId=2, tenantIds=[2, 0], organizationId=0, isAdmin=true, clientId=null, timeZone=’GMT+9, language=’zh_CN, roleLabels='[TENANT_ADMIN], apiEncryptFlag=1}

io.choerodon.core.exception.CommonException: error.deployment.not_valid_yet

at org.hzero.workflow.engine.run.impl.ModelServiceImpl.checkValid(ModelServiceImpl.java:656) ~[hzero-workflow-1.20.0-1.12.RELEASE.jar!/:1.20.0-1.12.RELEASE]

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]

元宝分析可能原因:

依赖版本冲突

在某些情况下,如果项目依赖的库(如 MyBatis-Plus, jsqlparser 等)版本不兼容,可能会在运行时抛出 NoSuchMethodError或 NoClassDefFoundError,最终被包装为 Handler dispatch failed异常

问了产研

看到发布记录中生效时间是一小时后。 再发布一个版本,看默认是当前时间:

这次看生效时间默认还是一小时后。当前时间是16:41

如果没特意配置,可能是系统时间有问题:

个人中心把时区改成北京时区再发布一下:这次一致了:

但模拟还是不行:

修改个人中心的时区之后,在重新建一个工作流:年假申请测试流程2,再测试:

建好后,保存发布,看到生效时间立即生效是对的:

再次点“模拟” ,还是不行,没法马上模拟成功,要过一天才能模拟:

当前的hzero-workflow 是1.20-1.12.RELEASE的,是25年7月发的版,最新更新已经到了 1.20.1-1.12-BETA.8 是25年12月24日,期间补丁版本已经发了8个了;

升级到1.20.1-1.12-BETA.8 问题依旧。

产研时区问题后来解决了,发了新的版本,需要升级:

=============================================

2026-01-28  升级HZERO 工作流  从1.20.0-1.12.RELEASE 到 1.20.1-1.12.RELEASE

=============================================

升级原因:解决流程平台编辑流程后模拟运行时因为时区设置差异导致 不能立即执行的问题。

1、升级种子数据

再次下载:hwkf-resource-1.20-1.12.RELEASE.zip(产研说因为这个修复版加上了咸亨的部分需求,与数据库字段变更,所以要跑下种子数据:表结构和种子数据)

解压后启动脚本,启动完成后 ,在界面上 执行 1和3  成功完成。

2、升级后端服务

hzero-workflow@1.20.1-1.12.RELEASE

更新POM,然后重新bash run.sh 服务启动正常。

3、升级前端组件

hzero-front-hwkf@1.20.2-beta.1

hzero-front-hwkf-mobile@1.20.1-beta.8

更新package.json

yarn

Done in 45.28s.

yarn run build:ms hzero-front-hwkf,hzero-front-hwkf-mobile

Done in 223.22s

完成后执行部署:

$ bash apply_update_to_runtime_env.sh

cp \\wsl.localhost\Ubuntu-2204-hzero-openjdk\d02\hzero-bpaas\project\ps-workflow\target\ps-workflow.jar \\wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-workflow-docker\

重新构建镜像

拷贝前端文件到Docker环境:

$ cp -r  -Force \\wsl.localhost\Ubuntu-2204-hzero-openjdk\d02\hzero\front\dist   \\wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\volumes\nginx\

#拷贝种子数据到Docker环境:

cp \\wsl.localhost\Ubuntu-2204-hzero-openjdk\d02\hzero-bpaas\hwkf-resource\hwkf-resource-1.20-1.12.RELEASE.zip \\wsl.localhost\Ubuntu-22.04\d01\tmp\

#Docke环境启动mysql容器

/d01/hzero-dockers/mysql-docker# docker compose up -d

cd /d01/tmp

unzip hwkf-resource-1.20-1.12.RELEASE.zip

cd hwkf-resource-1.20-1.12.RELEASE

bash database-init.sh执行1和3,完成种子数据更新

再测测试,时区正常了,模拟可以正常立即执行了。问题解决。

HZERO PaaS平台-Docker版demo笔记(六)制作Arm64版安装文件

一、Mac电脑用户发现的问题:

有使用Mac笔记本电脑的同事按照 Jack.Shang的技术博客 » HZERO PaaS平台-Docker版demo笔记(五)安装部署readme 进行部署后发现问题:

启动平台服务的时候会提示 警告,AMD64 不匹配当前平台

但是可以启动成功。

  1. 前台 URL 无法登录

访问 http://dev.hzero.com.cn/

点击重新登录

二、问题分析&解决

分析:我们之前的镜像是基于默认的amd64,需要生成arm64版的,这包括JDK和linux基础镜像都要用arm64版的。

操作步骤:

  1. 下载arm64版的 IBM OpenJDK

Semeru Runtime Downloads – IBM Developer

下载这个版本:

  • 新建目录 /d01/openJ9-0.53-dockers-arm64

把下载的文件放到这个目录下

  • 编辑arm64版的 JavaBase 基础镜像

# 明确指定arm64架构的基础镜像

FROM arm64v8/ubuntu:22.04

ENV TZ=UTC \

    LANG=en_US.UTF-8 \

    JAVA_HOME=/opt/java/openjdk \

    PATH=/opt/java/openjdk/bin:$PATH

# 安装arm64架构的依赖(和amd64依赖名一致,系统会自动匹配架构)

RUN apt-get update \

    && DEBIAN_FRONTEND=noninteractive apt-get install -y –no-install-recommends \

       libc6 libstdc++6 zlib1g ca-certificates \

    && apt-get clean \

    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

RUN mkdir -p ${JAVA_HOME} && chmod -R 755 ${JAVA_HOME}

# 替换为arm64版本的JDK包

COPY ibm-semeru-open-jdk_aarch64_linux_17.0.16_8_openj9-0.53.0.tar.gz /tmp/

RUN cd ${JAVA_HOME} \

    && tar -xvf /tmp/ibm-semeru-open-jdk_aarch64_linux_17.0.16_8_openj9-0.53.0.tar.gz –strip-components=1 \

    && rm -f /tmp/*.tar.gz \

    && rm -rf ${JAVA_HOME}/docs \

    && rm -rf ${JAVA_HOME}/lib/src.zip \

    && rm -rf ${JAVA_HOME}/legal \

    && rm -rf ${JAVA_HOME}/man \

    && java -version

CMD [“java”, “–version”]

  • #构建Ibm OpenJDK OpenJ9-0.53版 arm版的Java基础镜像

#先把arm64版的ubuntu 22.04 pull下来

$ docker pull –platform linux/arm64/v8 arm64v8/ubuntu:22.04

22.04: Pulling from arm64v8/ubuntu
0ec3d8645767: Pull complete
Digest: sha256:e59ca854700f0c80ac005a52585e2e594ba70dfe82fa4c5228db509163222444
Status: Downloaded newer image for arm64v8/ubuntu:22.04
docker.io/arm64v8/ubuntu:22.04

#构建java运行基础镜像

$ cd /d01/openJ9-0.53-dockers-arm64

$ docker build –platform linux/arm64/v8 -t ibm-semeru-runtimes:open-17-jdk .

5、#拷贝复制jar文件

打开/d01/batch_copy_jar_from_wsl_openj9.ps1

复制并在powershell窗口中粘贴,可完成拷贝。

6、#修改批量构建镜像的脚本

$ cd /d01

$ cp hzero-batch-build-dockerimage.sh hzero-batch-build-dockerimage-arm64.sh

$ vi hzero-batch-build-dockerimage-arm64.sh

更改构建命令部分,添加–platform linux/arm64/v8:

    # 执行Docker构建命令,并捕获结果

    if docker build –platform linux/arm64/v8 -t “$image_name:$VERSION” . >> “$LOG_FILE” 2>&1; then

7、#基于新的java基础镜像批量构建平台服务镜像

$ cd /d01

$ bash hzero-batch-build-dockerimage-arm64.sh

  • 更换中间件服务为arm64版

8.1 mysql

$ cd /d01/hzero-dockers/mysql-docker

$ vi Dockerfile

修改:

# 基于官方 MySQL 8 镜像

FROM –platform=linux/arm64/v8 mysql:8.4.7

# 设置 MySQL root 密码  ENV MYSQL_ROOT_PASSWORD=

ENV MYSQL_ALLOW_EMPTY_PASSWORD=yes

# 复制自定义配置文件到 MySQL 配置目录(配置文件无架构差异,无需修改)

COPY my_custom.cnf /etc/mysql/conf.d/

#构建mysql镜像

$ docker build –platform linux/arm64/v8 -t mysql-hzero-jk-demo:8.4.7 .

#下载 arm64版的minio

docker pull –platform linux/arm64/v8 minio/minio:RELEASE.2025-06-13T11-33-47Z

这个下载下来后,没有arm64标记,点进去看也是x_86的版本

$ docker compose up -d

$ docker exec -it minio-hzero uname -m

$ 显示的也是 x86_64

豆包说这是多架构的镜像,多架构镜像不会有arm64标记,至于说在镜像层看到的x86_64标记可能是镜像制作者“偷懒”没改掉,实际可能是arm64的,最终能判断的是容器启动后看docker exec -it minio-hzero uname -m返回的结果

另外:必须在docker-compose.yml中指定平台,否则默认就是启动当前架构(x86)的镜像:

#更改docker-compose.yml文件,指定平台:

## 要求Docker/Docker CE >= 19.x

services:

  minio-hzero:

    image: minio/minio:RELEASE.2025-06-13T11-33-47Z

    platform: linux/arm64/v8

    container_name: minio-hzero

$ docker compose up -d

启动命令执行后发现它主动去拉去镜像了,说明之前docker pull –platform linux/arm64/v8 minio/minio:RELEASE.2025-06-13T11-33-47Z 没有真实拉到arm64的镜像?

$ docker exec -it minio-hzero uname -m

确实启动后进入可以看到确实是arm64的架构:

#下载 arm64版的mongo:5.0.25

docker pull –platform linux/arm64/v8 mongo:5.0.25

#下载arm64版的neo4j

docker pull –platform linux/arm64/v8 neo4j:5.16.0

#下载arm64版的nginx:latest

docker pull –platform linux/arm64/v8 nginx:latest

#下载arm64版的onlyoffice/documentserver

docker pull –platform linux/arm64/v8 onlyoffice/documentserver:latest

#下载arm64版的redis:6-alpine(6-alpine标签下载失败,改成latest标签,不影响使用)

docker pull –platform linux/arm64/v8 redis:latest

#下载arm64版的elasticsearch:8.12.2

docker pull –platform linux/arm64/v8 elasticsearch:8.12.2

#实验发现:mongo,neo4j,nginx,onlyoffice,redis,elasticsearch  指定arm平台Pull之后,都没有arm64标记:

那就是应该认为,这些中间件都是多架构镜像,都要像minio一样在docker-compose.yml中指定平台:

platform: linux/arm64/v8

#redis 修改后启动

确认是arm64架构

其他几个:mongo,neo4j,nginx,onlyoffice,elasticsearch 也都这样修改,再启动验证

实验发现,这几个在启动的时候都有pulling的过程,说明之前直接执行pull命令没啥作用,关键还是要在docker-compose.yml启动文件中指定平台。

#下载arm64版的kkfileview

https://resource.kkview.cn/kkFileView-4.4.0-docker_aarch64.tar

$ docker load -i kkFileView-4.4.0-docker_aarch64.tar

#这个加载后是有arm64标记的

修改kkfileview的docker-compose.yml

#修改image:  image: keking/kkfileview_aarch64:4.4.0

9、2个python镜像:

#下载arm64版的hzero-hkms
docker pull –platform linux/arm64 registry.hand-china.com/hzero-public/hkms-python_arm64:1.6.1

注意:这个命令要在Linux安装的docker环境执行,汉得的这个制品库在WSL集成的Docker Desktop环境中执行报连不上,经测试不是用户名密码的问题,ping也能通,但就是连不上。

#下载arm64版的hzero-hype

docker pull –platform linux/arm64  registry.hand-china.com/hzero-public/hkms-python_arm64:1.6.1

注意:这个命令要在Linux安装的docker环境执行,汉得的这个制品库在WSL集成的Docker Desktop环境中执行报连不上,经测试不是用户名密码的问题,ping也能通,但就是连不上。

#hzero-hkms 镜像

$ cd /d01/hzero-dockers/hzero-hkms-docker

$ cp docker-compose.yml docker-compose.yml.x86

#编辑 docker-compose.yml

#更改:

image: registry.hand-china.com/hzero-public/hkms-python_arm64:1.6.1

#hzero-hype 镜像

$ cd /d01/hzero-dockers/hzero-hype-docker

$ cp docker-compose.yml docker-compose.yml.x86

#编辑 docker-compose.yml

#更改:

 image: registry.hand-china.com/hzero-public/haip-python-executor_arm64:0.2

10、更改save-dockers.sh  & Save Arm版镜像

$ cd /d01/hzero-docker-images-arm64

#更改 save-dockers.sh ,主要是两个python镜像名,kkfileview 镜像名要改,另外几个中加件原来用registry.hand-china.com的,改成直接用官方的了。其他不需要变。

#导出arm64版的镜像集合

$ bash save-dockers.sh

结果,有6个save未成功:

docker save -o mongo-hzero.tar mongo:5.0.25

docker save -o redis-hzero.tar redis:latest

docker save -o nginx-hzero.tar nginx:latest

docker save -o elasticsearch-hzero.tar elasticsearch:8.12.2

docker save -o neo4j-hzero.tar neo4j:5.16.0

docker save -o onlyoffice-hzero.tar onlyoffice/documentserver:latest

豆包分析是:问题根源:x86 Docker 对 arm64 镜像的元数据解析和文件存储不兼容,导致 “创建时间 N/A” 和 “导出失败”;

解决方案:无需解决,因为docker-compose.yml 中已经指定arm平台,且可以自动下载,都是官方镜像。

在save-dockers.sh 中注释掉这几个镜像

在load-dockers.sh 中去掉这几个镜像

#docker load -i mongo-hzero.tar

#docker load -i redis-hzero.tar

#docker load -i nginx-hzero.tar

#docker load -i elasticsearch-hzero.tar

#docker load -i neo4j-hzero.tar

#docker load -i onlyoffice-hzero.tar

  1. 打包

# 先删除jar文件

$ cd /d01
$ bash delete_jar_files.sh
# 再打包
$ tar -czvf hzero-dockers-arm64.tar.gz hzero-dockers

$ tar -czvf hzero-docker-images-openj9-0.53-arm64.tar.gz hzero-docker-images-arm64

  1. 备份下Ibm OpenJDK OpenJ9-0.53版 arm版的Java基础镜像

$ cd /d01/openJ9-0.53-dockers-arm64

$ docker save -o ibm-semeru-runtimes-open-17-jdk-openJ9-0.53-arm64.tar ibm-semeru-runtimes:open-17-jdk

三、后续工作

一、恢复到x86环境

1、#批量并执行-恢复到x86环境的shell脚本

$ cd /d01

$ bash batch_recovery_x86_env.sh

==============================

#!/bin/bash

#恢复中间件服务

cp -f /d01/hzero-dockers/redis-docker/docker-compose.yml.x86  /d01/hzero-dockers/redis-docker/docker-compose.yml

cp -f /d01/hzero-dockers/onlyoffice-docker/docker-compose.yml.x86  /d01/hzero-dockers/onlyoffice-docker/docker-compose.yml

cp -f /d01/hzero-dockers/nginx-docker/docker-compose.yml.x86  /d01/hzero-dockers/nginx-docker/docker-compose.yml

cp -f /d01/hzero-dockers/neo4j-docker/docker-compose.yml.x86  /d01/hzero-dockers/neo4j-docker/docker-compose.yml

cp -f /d01/hzero-dockers/mongo-docker/docker-compose.yml.x86  /d01/hzero-dockers/mongo-docker/docker-compose.yml

cp -f /d01/hzero-dockers/minio-docker/docker-compose.yml.x86  /d01/hzero-dockers/minio-docker/docker-compose.yml

cp -f /d01/hzero-dockers/elasticsearch-docker/docker-compose.yml.x86  /d01/hzero-dockers/elasticsearch-docker/docker-compose.yml

cp -f /d01/hzero-dockers/kkfileview-docker/docker-compose.yml.x86  /d01/hzero-dockers/kkfileview-docker/docker-compose.yml

#恢复hzero 两个python服务

cp -f /d01/hzero-dockers/hzero-hkms-docker/docker-compose.yml.x86  /d01/hzero-dockers/hzero-hkms-docker/docker-compose.yml

cp -f /d01/hzero-dockers/hzero-hype-docker/docker-compose.yml.x86  /d01/hzero-dockers/hzero-hype-docker/docker-compose.yml

#恢复Mysql

cp -f /d01/hzero-dockers/mysql-docker/Dockerfile.x86  /d01/hzero-dockers/mysql-docker/Dockerfile

2、#恢复x86版的Java运行环境基础镜像

cd /d01/openJ9-0.53-dockers

docker build -t ibm-semeru-runtimes:open-17-jdk .

3、#恢复加载X86版的Java服务和中间件镜像

$ cd /d01/hzero-docker-images

$ bash load-dockers.sh

#或者先拷贝jar文件再批量构建

#在Windows powershell 窗口中粘贴batch_copy_jar_from_wsl_openJ9.ps1中的内容,然后

#构建x86版Java服务镜像和mysql镜像

$ cd /d01

$ bash hzero-batch-build-dockerimage-arm64.sh

$ cd /d01/hzero-dockers/mysql-docker

$ docker build -t mysql-hzero-jk-demo:8.4.7 .

二、批量切换到arm64环境

1、#批量并执行-切换到arm64环境的shell脚本

$ cd /d01

$ bash batch_switch_to_arm64_env.sh

==============================

#!/bin/bash

#切换到arm64版中间件服务

cp -f /d01/hzero-dockers/redis-docker/docker-compose.yml.arm64  /d01/hzero-dockers/redis-docker/docker-compose.yml

cp -f /d01/hzero-dockers/onlyoffice-docker/docker-compose.yml.arm64  /d01/hzero-dockers/onlyoffice-docker/docker-compose.yml

cp -f /d01/hzero-dockers/nginx-docker/docker-compose.yml.arm64  /d01/hzero-dockers/nginx-docker/docker-compose.yml

cp -f /d01/hzero-dockers/neo4j-docker/docker-compose.yml.arm64  /d01/hzero-dockers/neo4j-docker/docker-compose.yml

cp -f /d01/hzero-dockers/mongo-docker/docker-compose.yml.arm64  /d01/hzero-dockers/mongo-docker/docker-compose.yml

cp -f /d01/hzero-dockers/minio-docker/docker-compose.yml.arm64  /d01/hzero-dockers/minio-docker/docker-compose.yml

cp -f /d01/hzero-dockers/elasticsearch-docker/docker-compose.yml.arm64  /d01/hzero-dockers/elasticsearch-docker/docker-compose.yml

cp -f /d01/hzero-dockers/kkfileview-docker/docker-compose.yml.arm64  /d01/hzero-dockers/kkfileview-docker/docker-compose.yml

#切换到arm64版 hzero 两个python服务

cp -f /d01/hzero-dockers/hzero-hkms-docker/docker-compose.yml.arm64  /d01/hzero-dockers/hzero-hkms-docker/docker-compose.yml

cp -f /d01/hzero-dockers/hzero-hype-docker/docker-compose.yml.arm64  /d01/hzero-dockers/hzero-hype-docker/docker-compose.yml

#切换到arm64版Mysql

cp -f /d01/hzero-dockers/mysql-docker/Dockerfile.arm64  /d01/hzero-dockers/mysql-docker/Dockerfile

2、#切换到arm64版的Java运行环境基础镜像

cd /d01/openJ9-0.53-dockers-arm64

docker build –platform linux/arm64/v8 -t ibm-semeru-runtimes:open-17-jdk .

3、#切换到arm64版hzero java和中间件服务镜像

$ cd /d01/hzero-docker-images-arm64

$ bash load-dockers.sh

#或者先拷贝jar文件再批量构建

#在Windows powershell 窗口中粘贴batch_copy_jar_from_wsl_openJ9.ps1中的内容,然后

#构建Arm64版Java服务镜像和mysql镜像

$ cd /d01

$ bash hzero-batch-build-dockerimage-arm64.sh

$ cd /d01/hzero-dockers/mysql-docker

$ docker build –platform linux/arm64/v8 -t mysql-hzero-jk-demo:8.4.7 .

#faq-section

四、实测问题

问题1:访问注册中心服务的网页速度很慢的问题

原因:同事的mac版Docker Desktop设置里面分配的内存太少(默认是8G)

解决:在Docker的设置/资源管理处把内存调整到30G后速度很快,问题解决。

问题2:启动服务时发现oauth服务的8021端口被占用,导致该服务启动失败

这个8021端口冲突问题在MAC上比较常见
现象:docker start  hzero-oauth

Error response from daemon: ports are not available: exposing port TCP 0.0.0.0:8021 -> 127.0.0.1:0: listen tcp 0.0.0.0:8021: bind: address already in use

Error: failed to start containers: hzero-oauth

可以用如下命令查看8021被什么程序占用?

PID=$(lsof -t -i tcp:8021) && if [ -n “$PID” ]; then ps -ef | grep “$PID”; else echo “端口 8021 未被占用”; fi

之前已经发现的原因有:
原因1:有同学发现是因为Docker Desktop本身的进程占用了该端口。

解决:重启Docker Desktop之后问题解决,因为该端口也是随机占用的端口。

原因2:也有同学发现是ftp-proxy占用了这个端口

解决:临时停止ftp-proxy
$ sudo launchctl tootout system/com.apple.ftp-proxy

#再次确认端口情况

$ sudo lsof-l :8021

#长期解决方案:鉴于8021端口在MAC环境冲突概率很高,所以改成18021端口:

#源环境:更改端口,重新build oauth服务 jar包

# windows powershell中

cp \\wsl.localhost\Ubuntu-2204-hzero-openjdk\d02\hzero\project\ps-oauth\target\ps-oauth.jar \\wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-oauth-docker\

# 加载arm64版java base镜像

cd /d01/openJ9-0.53-dockers-arm64

docker load -i ibm-semeru-runtimes-open-17-jdk-openJ9-0.53-arm64.tar

#切换到arm64环境

cd /d01

bash batch_switch_to_arm64_env.sh

#重新构建oauth服务docker镜像

cd /d01/hzero-dockers/hzero-oauth-docker

docker build –platform linux/arm64/v8 -t hzero-oauth-jk-demo:1.12 .

#更改docker-compose.yml文件

#把8021端口映射改成18021端口

#导出镜像

cd  /d01/hzero-docker-images-arm64

docker save -o hzero-oauth-docker.tar hzero-oauth-jk-demo:1.12

#删除jar包

rm -f /d01/hzero-dockers/hzero-oauth-docker/ps-oauth.jar

#重新打包hzero-dockers

cd /d01

tar -czvf hzero-dockers-arm64.tar.gz  hzero-dockers

#重新打包hzero-docker-images-arm64

cd /d01

tar -czvf hzero-docker-images-openj9-0.53-arm64.tar.gz  hzero-docker-images-arm64

==========

恢复x86环境

# 加载x86版java base镜像

cd /d01/openJ9-0.53-dockers

docker load -i ibm-semeru-runtimes-open-17-jdk-openJ9-0.53-x86.tar

#切换到x86环境

cd /d01

bash batch_recovery_x86_env.sh

备注:在2026.01.08提交的安装文件中,已经改成18021端口。

问题3:登录时要求验证码,提示错误:缺少字体

NullPointerException: Cannot invoke

“java.awt.Font.deriveFont(java.awt.geom.Affine Transform)”

because “this.clickWord Font” s null

原因:arm64版ubuntu 22.04 默认没有安装验证码所需字体(但该问题在x86/amd64版的ubuntu 22.04上不存在)

解决方案:先进入容器安装字体,然后进入hzero平台系统之后,在界面上把验证码设置关闭掉。

#进入 oauht服务的容器

docker exec -it hzero-oauth bash

# 更新软件源

sudo apt update

# 安装字体相关包(对应CentOS的fontconfig、dejavu字体)

sudo apt install -y fontconfig fonts-dejavu-core fonts-dejavu-extra

# 更新字体缓存(和CentOS的fc-cache命令一致)

fc-cache -fv

#完成上述字体安装后,再次登录hzero平台,多刷新几次可以成功登录;

登录后,在hzero平台系统设置的安全设置中,去掉验证码设置。

问题解决。

进一步思考:既然是hzero-oauth服务的容器缺少字体,那么在java基础运行环境镜像构建的时候把 fontconfig fonts-dejavu-core fonts-dejavu-extra 一并加上就可一劳永逸解决问题了。

于是就开始修改Dockfile ,添加字体,重新构建,但失败了,只要加上这个内容,就构建失败,当然可能是因为放在同一层构建才导致失败? 再尝试放在单独层构建,也同样失败,看起来这字体想在镜像中直接加上是难以成功了。先这样吧,以后再说。

成功登录系统之后,更改系统设置:  在平台菜单/系统管理/安全设置 处,把验证码设置为非必须。

备注:在2026.01.06提交的安装文件中,已经预先更改系统设置:  在平台菜单/系统管理/安全设置 处,把验证码设置为非必须。

2026/01/09 因为有同事发现hzero-report服务启动时缺少libfreetype6字体文件而导致启动错误,在x86环境已经在Java基础镜像构建时添加了这个字体而解决了问题,现在arm64也得解决这个问题,也就是添加字体在arm64环境还是必须解决。

刚开始在按豆包的各种建议/试错循环折腾了半小时,没解决问题,主要还是x86上运行arm64构建的兼容问题,虽然之前也成功执行过,但一旦碰到需要在镜像内运行的指令时就会出问题,这个时候错误信息给豆包,豆包就会建议更改镜像中lib库的更新源,但更新这些东西实际解决不了问题,后来按照元宝建议,执行:

docker run –rm –privileged multiarch/qemu-user-static –reset -p yes

这个可以下载arm64的模拟器,而且对windows Docker Desktop来说,支持那个该指令可以持久化,不需要每次重启再执行,更妙的是后面运行docker 构建镜像的命令,docker Desktop会自动识别,按照需要决定是否需要启动这个多架构模拟器,也就是我可以自由的在x86机器上顺利构建x86和arm64镜像。

使用这种方法后,把fontconfig fonts-dejavu-core fonts-dejavu-extra加到之前的Dockerfile, 再次构建就成功了。

Jack.Shang的技术博客

然后我就可以重新构建arm64版的hzero-report 镜像和hzero-oauth镜像,就永久解决这个问题了。

问题4:AIGC中台/Agent编排/编排测试 出现会话链接失败的错误

新建一个Agent编排,保存后,点上方的“编排测试” 结果出现 “会话链接失败,请联系管理员”的错误:

前端错误:

connection to ‘ws://aigc.hzero.com.cn/websocket?access_token=c45eaa37-5af6-41ed-aef5-bbd9c4ec995f&appSessionId=ea30a822-33fa-4cd0-a6e2-e4243de14025&interactionFlowCode=ZTEST_SAP_001&appFlowVersionNum=3&processorKey=interaction-pc&tenantId=2’ failed:

分析:

查看后台hzero-aip-app服务的日志,错误提示:

org.springframework.web.server.ServerWebInputException: 400 BAD_REQUEST “Invalid ‘Upgrade’ header: [X-Real-IP:”172.18.0.1″, Host:”aigc.hzero.com.cn”, X-Forwarded-For:”172.18.0.1″, Connection:”close”, Pragma:”no-cache”, Cache-Control:”no-cache”, User-Agent:”Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0″, Origin:”http://dev.hzero.com.cn”, Sec-WebSocket-Version:”13″, Accept-Encoding:”gzip, deflate”, Accept-Language:”zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6″, Sec-WebSocket-Key:”bBfD+JwcSTroPEwfkFnziA==”, Sec-WebSocket-Extensions:”permessage-deflate; client_max_window_bits”]”

问题给豆包,豆包说:

核心原因:Upgrade 头被代理 / 网关错误覆盖或过滤,导致其值不是 websocket 而是其他请求头的集合;

关键修复:代理(Nginx)需配置 proxy_set_header Upgrade $http_upgrade 和 proxy_set_header Connection “upgrade”,网关需保留 WebSocket 相关头部;

解决方案:

在nginx.conf 中添加配置(hzero-dockers\volumes\nginx\nginx.conf):

在反向代理前面增加:

# 添加WebSocket支持

map $http_upgrade $connection_upgrade {

    default upgrade;

    “” close;

}

在反向代理中增加:

          # 添加WebSocket支持

          proxy_http_version 1.1;

          proxy_set_header Upgrade $http_upgrade;

          proxy_set_header Connection $connection_upgrade;

更改后重启nginx服务

$ cd /d01/hzero-dockers/nginx-docker && docker compose down && docker compose up -d

然后再次访问编排页面,就正常了:

这个问题是之前非docker环境迁移docker环境时漏掉的配置,之前非docker环境中,在/etc/nginx/sites-available/default中 反向代理是这么配置的:

# aigc.hzero.com.cn 专用服务器

server {

    listen 80;

    server_name aigc.hzero.com.cn;

    location / {

        # 改为后端服务实际IP:端口

        proxy_pass http://127.0.0.1:8088;  # 示例:假设后端在本机8088

        proxy_set_header Upgrade $http_upgrade;

        proxy_set_header Connection “upgrade”;

        proxy_set_header Host $host;  # 保留一个Host配置

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_buffering off;  # 按需开启/关闭(实时交互场景建议关闭)

    }

}

迁移到Docker环境后,由于$http_upgrade 变量缺少,当时为了启动Nginx,直接把这两行删除掉了:

        proxy_set_header Upgrade $http_upgrade;

        proxy_set_header Connection “upgrade”;

后来测试容器环境的时候只是测试了对话应用和知识库问答应用,但因为对话应用和知识库问答应用走的是SSE协议,没有走WS协议,所以就没发现问题。但编排应用会走WS协议,所以测试编排应用的时候就会发现问题。而且原来在default中的设置也不规范,有隐藏风险:

  • 如果客户端请求全是 WebSocket(必然带 Upgrade: websocket 头),硬编码 Connection: upgrade 完全匹配需求;
  • 只有当同一 location 同时处理「WebSocket 请求」和「普通 HTTP 请求」时,硬编码才会出问题(普通 HTTP 请求不需要 Connection: upgrade,会导致协议异常)。

问题已经更正。

备注:在2026.01.06提交的安装文件中,已经包含了更正过的nginx.conf配置文件了。

HZERO PaaS平台-Docker版demo笔记(五)安装部署readme

最新更新:2026/07/04

本文是HZERO PaaS平台-Docker版Demo 实验环境的readme文件

说明:本实验环境版本仅供个人测试用,企业开发、测试、正式环境不要用,企业用平台可参考汉得开放平台上各产品的官方文档去安装。

HZERO PaaS 平台介绍:

HZERO 是汉得企业级 PaaS平台, 本HZERO PaaS 平台 R12 Demo实验环境 Docker版  是基于汉得HZERO 基础开发平台1.12.2.RELEASE、流程平台1.20.0-1.12.RELEASE版、低代码平台2.10.0-1.12.RELEASE版、集成平台1.8.1.RELEASE,AI平台 1.6.1.ALPHA.7.1 版本组装而成。

一、安装准备-下载文件:

先下载文件:

百度网盘分享的文件:hzero-demo-docker-openJ9

链接: https://pan.baidu.com/s/1atCVvaDxlR2LHhixVo3Q0Q?pwd=Hand  提取码: Hand (下载镜像压缩包目录和持久化数据压缩包文件,大小约24G, 建议使用百度网盘SVIP会员下载大约20分钟。普通用户则会非常慢(100K/秒),没有也不想申请短期百度网盘SVIP会员的用户可考虑用阿里云快传下载,速度稍快(大概1M/秒),缺点是只有一天有效期,请联系作者索要临时的阿里云快传链接。)

需下载文件说明(x86的Cpu用户,在x86目录下):

  1. Docker镜像包目录:hzero-docker-images,包含所有服务的Docker镜像。
  2. 持久化数据压缩包文件:hzero-dockers.tar.gz,包括数据库文件、配置文件、启停服务脚本。

备注:如果使用基于M系列芯片的Mac电脑用户,CPU架构是arm64的,请下载对应的arm版文件:

下载 hzero-docker-images-arm64目录 替代hzero-docker-images目录

下载 hzero-dockers-arm64.tar.gz 替代hzero-dockers.tar.gz

Arm版 Mac电脑在安装时,需要注意 Docker默认分配内存比较小,会导致服务起不来或者非常慢,请提前分配好Docker的内存到25G(跑全部服务)或者11G(仅跑精简版基础开发平台+低代码平台)


二、安装准备:Docker环境

先安装Docker 和Docker compose

安装场景:

1.1 如果你是直接在linux平台上安装,先安装Docker 再装docker compose

安装方法:请在豆包中输入:“请给我 linux 上先装Docker 再装 新版Compose 的操作步骤”

然后按豆包给出步骤操作即可。

备注:务必安装新版的docker compose, 重点

老版本:指 docker-compose(v1 系列),基于 Python 开发的独立命令行工具,命令是: docker-compose
新版本:指 docker compose(v2 系列),基于 Go 语言重构的 Docker CLI 插件,命令是:docker compose
新版本(v2)在权限处理逻辑上更贴合 Docker 原生行为,老版本(v1)因架构问题易出现权限不一致的情况。
权限问题的核心根源:

Docker Compose 本身不直接控制 “容器内用户权限”,而是负责解析配置、调用 Docker 引擎创建容器;权限最终由 Docker 引擎决定,但新老版本的调用方式 / 时机不同,导致了权限表现的差异:
老版本(v1,Python 实现):docker-compose 是独立 Python 进程,创建挂载目录时,会以宿主机执行 docker-compose 命令的用户(通常是 root / 当前普通用户)权限在宿主机创建目录,而非容器内指定的用户。比如:容器内用 user: 1000:1000 运行,但宿主机的挂载目录会被 docker-compose 以 root 权限创建(权限 755,属主 root:root),容器内 1000 用户可能无法写入。

新版本(v2,Go 实现):docker compose 作为 Docker CLI 插件,直接调用 Docker 引擎的 API,挂载目录的创建逻辑完全交给 Docker 引擎处理—— 而 Docker 引擎会根据容器内指定的 user/group 适配权限(或保持与宿主机一致),更符合开发者预期。


1.2 如果你是在windows上使用WSL, 那么直接安装Docker Desktop(包含Docker引擎和Docker compose, 且为可视化管理),然后再做WSL跟Docker Desktop的集成即可(在Docker Desktop的右上角的Setting齿轮/Resoures/WSL intergration 处把要集成的WSL开关设置为开 )

安装方法:请在豆包中输入:“请给我Windows安装Docker Desktop 的操作步骤”

然后按豆包给出步骤操作即可。

安装完成后做WSL跟Docker Desktop的集成。

说明:WSL是windows的linux子系统,如果不知道如何启用WSL,请在豆包中输入:“请给我在Windows中启用WSL的操作步骤”

然后按豆包给出的步骤操作即可。

三、加载Docker镜像

以root用户 操作:

进入 hzero-docker-images目录,运行load-dockers.sh脚本,完成所有服务镜像的加载

$ cd  hzero-docker-images

$ bash load-dockers.sh

四、启动/关闭平台服务

在linux系统下,解压缩 持久化数据压缩包文件 ,例如:

tar -xzvf hzero-dockers.tar.gz

备注:务必在linux系统下解压,这样可以保留目录权限,不要在windows目录下解压再拷贝到linux,会因为权限问题报错。

启动HZERO PaaS平台(基础开发平台+低代码平台+集成平台+AI平台)服务:

$ cd hzero-dockers

$ bash start-all-dockers.sh

#全部服务启动完成大约需要12分钟,内存消耗25G(笔记本电脑环境,如果是Windows上的WSL虚拟机,考虑windows本身还需要消耗7-8G,那么32G内存笔记本启动 HZERO PaaS平台 是够用的)

#备注:Mac电脑Arm 版CPU用户首次启动时会从dockerHub官方下载mongo,redis,nginx,elasticsearch,neo4j,onlyoffice 这几个Docker镜像,时间会稍长,请耐心等待并保持网络畅通

关闭平台服务:

$ cd hzero-dockers

$ bash stop-all-dockers.sh

#备注:如果要 单启动HZERO基础开发平台+低代码平台可以:
$ cd hzero-dockers
$ bash lowcode-all-dockers-start.sh
关闭服务:
$ bash lowcode-all-dockers-stop.sh

#备注:如果要 单启动HZERO基础开发平台+AI平台可以:
$ cd hzero-dockers
$ bash ai-all-dockers-start.sh
关闭服务:
$ bash ai-all-dockers-stop.sh

五、访问系统

在windows host文件添加解析:

假设你 的服务器IP是 172.18.14.48

172.18.14.48 dev.hzero.com.cn #Nginx服务器地址
172.18.14.48 gateway.hzero.com.cn # 网关的地址
172.18.14.48 aigc.hzero.com.cn # AIGC服务的反向代理
172.18.14.48 kkv.hzero.com.cn # 文件预览服务域名
172.18.14.48 oss.hzero.com.cn # minio文件服务域名
172.18.14.48 onlyoffice.hzero.com.cn # onlyoffice文档在线编辑服务

完成hosts设置户,访问http://dev.hzero.com.cn

用户名/密码: admin/Admin@123!

5.1 看低代码平台Demo

选择低代码POC演示租户 ,进入系统后点右上角的“前往控制台”,然后点左上角菜单,选择菜单”POC演示-知识产权管理” ,可以看到一个低代码搭建的关于知识产权管理的应用.

选择菜单“低代码平台”,进入低代码工作台,可进行低代码开发;

低代码POC演示-知识产权管理

低代码工作台:

进入低代码平台 菜单,接下来你可以 进行低代码开发了。 学习文档和视频可以看汉得开放平台的学习路线:

开放平台网址:open.hand-china.com

视频路径: 开放平台/社区与合作伙伴/视频与培训/学习路线/飞搭平台学习路线  

从初级开始学习

5.2 看AI平台demo

切换租户,选择HZERO 平台租户 ,进入系统后点右上角的“前往控制台”,然后点左上角菜单,进入AIGC中台/模型管理中心/模型对接配置

点击右上角三个小点点,切换到平台租户:

然后点击右上角“前往控制台”,切换到传统菜单

进入AIGC中台/模型管理中心/模型对接配置

5.2.1、设置jack对话-deepseek-V4-flash,Jack文本向量-阿里2,Jack-图文向量-豆包 ,Jack重排模型-阿里,这四个模型的API Key

5.2.1.1 你需要预先在火山引擎注册账号 https://www.volcengine.com/, 然后从主页 /大模型 进入,然后选择左边的“开通管理”菜单,找到deepseek-v4-flash-260425,doubao-embedding-vision-250615,doubao-seed-2-0-mini-260428 这三个模型,点操作“开通服务”

5.2.1.2 在火山引擎/火山方舟 左边菜单 API key管理 处,复制API-KEY

然后把获取的API Key 填入:

5.2.2、设置 Jack重排模型-阿里 , 和 Jack文本向量-阿里-2 的API Key

5.2.2.1 你需要预先在阿里云注册账号 ,然后在主页/大模型/免费体验 进入阿里云百炼平台,然后点左下角的密钥管理可获取API Key

然后把获取的API Key填入:

2.3、看AI平台demo

选择HZERO 平台租户 ,进入系统后点左上角菜单,进入AIGC中台/应用中心/企业应用库, 点击进入“我的HZERO运营知识库”, 可以咨询Hzero平台相关问题,比如 :你可以问:“飞搭会用到AI平台功能吗?”


重要提醒:

1、现在这个版本用的IBM OpenJ9的JVM , 是内存节省优先的,32G内存的笔记本可以跑所有服务。

2、如果你内存很大,比如有64G,要性能优先的: 可以用OpenJDK标准的HotSpot JVM , 这个版本内存消耗较大,HostSport JVM版本的下载地址:

https://pan.baidu.com/s/1cqL199Cl_61qpAANo8pnwA?pwd=Hand      提取码: Hand 文件大小:18.31G, 使用百度超级会员下载大约20分钟

备注: 这个Demo版本主要用于个人学习,以适应40G以内的笔记本为主要目标,所以,OpenJDK标准的HotSpot JVM , 这个版本 在2026年之后就不再维护了。

3、如果你只有16G内存的笔记本,也想把HZERO平台部署跑起来,请参考

Jack.Shang的技术博客 » HZERO PaaS平台组装笔记十五-使用IBM OpenJDK_OpenJ9 第四部分: 16G笔记本运行方案

4、关于docker版实验Demo环境系列笔记可参考:

http://blog.retailsolution.cn/archives/category/hzero/hzero-docker%e7%89%88

5、有关本Demo系统的更新日志可参考:
Jack.Shang的技术博客 » HZERO PaaS平台-Docker版 -更新日志

HZERO PaaS平台-Docker版demo笔记(四)添加服务&问题修改

本文是针对《HZERO PaaS平台组装笔记十四:继续验证测试》的问题在Docker版Demo中做对应的跟进工作日志

问题1、平台/调度任务/任务调度中心,打开时报错:

原因分析:hzero_platform.iam_permission表中缺调度服务模块的相关权限记录。

解决方案:去平台/开发管理/开发管理/系统工具/刷新权限 去手动刷新下IAM权限。

刷新报错:

针对此报错的解决方案:删掉临时记录,再重新刷新:

# delete from hzero_platform.iam_permission where service_name =’hzero-scheduler’

再次刷新就成功了:

再测:平台/调度任务/任务调度中心,打开就正常没有错误了:

问题2、事件管理服务未安装

解决方案:

制作事件管理服务的docker镜像

==================================================

16、制作HZERO PaaS 平台 1.12版本的Demo环境的HZERO 微服务-事件管理服务 ps-event 镜像

==================================================

二、目标环境:

环境:WSL:Ubuntu-22.04系统

5、建立hzero-event-docker目录

$ cd /d01/hzero-dockers

$ mkdir hzero-event-docker

6、拷贝Jar包到目标环境

#在windows powershell 中执行

$ cp \\wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-event\target\ps-event.jar \\wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-event-docker\

7、编辑Dockerfile

$ cd /d01/hzero-dockers/hzero-event-docker

$ vi Dockerfile

————————————-

FROM registry.cn-shanghai.aliyuncs.com/c7n/javabase:17

COPY ps-event.jar /ps-event.jar

ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

ENTRYPOINT exec java -XX:+UnlockExperimentalVMOptions $JAVA_OPTS $REFLEC_OPTS $AGENT $SKYWALKING_OPTS  -jar /ps-event.jar

————————————

8、编辑docker-compose.yml

$ vi docker-compose.yml

———————————-

## 要求Docker/Docker CE >= 19.x

services:

  hzero-event:

    image: hzero-event-jk-demo:1.12

    container_name: hzero-event

    ports:

      – “8135:8135”

      – “8136:8136”

    environment:

      – JAVA_OPTS=-Xms250m -Xmx250m -Dspring.profiles.active=dev

    deploy:  # 限制容器总内存(Docker Compose v2.3+)

      resources:

        limits:

          memory: 500m  # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)

networks:

  default:

    name: hzero-demo

    external: true

———————————-

9、构建Docker镜像

$ cd /d01/hzero-dockers/hzero-event-docker

$ docker build -t hzero-event-jk-demo:1.12 .

构建成功:

$ docker images | grep event

  1. 种子数据初始化:
    #拷贝种子数据:

$ cp -r  \\wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-event\resource-package \\wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-event-docker\

#更改resource-package\application.yml 把数据库连接改一下:

mysql-hzero -> localhost

$  cd /d01/hzero-dockers/hzero-event-docker/resource-package

$ bash database-init.sh

访问:http://localhost:8099/

执行1和3, 成功完成

11、测试Docker镜像(测试之前先确保 redis-docker 和 mysql-docker,hzero-register , hzero-admin容器已经启动):

$ cd /d01/hzero-dockers/hzero-event-docker

$ docker compose up -d

看日志:docker logs hzero-event

看起来是正常启动了

http://localhost:8000注册中心中可见hzero-event服务

测试:
路径:平台菜单/事件管理/事件源定义
功能正常,服务地址改成实际部署环境的:

问题3、API测试数据不全

路径:平台工作台菜单/服务监控/API测试

发现有些已经安装的服务在这里没有显示,比如hzero-license

解决方案:

1、调整hzero-admin的docker-compose.yml中的启动内存,-Xmx 从300M调整到800M, 内存上限提高到memory: 1600m

重启hzero-admin服务

  • 在平台治理注册hzero-license服务:

路径:平台菜单/平台治理/服务管理

新建hzero-license服务路由注册

调整后都可以看到:

问题4、授权信息查看报错

路径:平台工作台菜单/系统管理/授权信息

查看报错,报404错误

解决方案:先尝试刷新license服务的iam权限

刷完后再试,就OK了:

问题5、权限组显示错误

路径:平台菜单/系统管理/数据权限控制/权限组管理

分析:这个问题是 hzero-platform 少依赖了platform-dpc-saas,原系统的hzero-platform已经添加依赖,从新构建了jar,只需要拷贝过来重建Docker镜像就好了。

  • 目标环境:

环境:WSL:Ubuntu-22.04系统

拷贝Jar包到目标环境

#在windows powershell 中执行

$ cp \\wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-platform\target\ps-platform.jar \\wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-platform-docker\

9、构建Docker镜像

$ cd /d01/hzero-dockers/hzero-platform-docker

$ docker compose down

$ docker build -t hzero-platform-jk-demo:1.12 .

$ docker compose up -d

#再次测试,就OK了:

问题6、jar包管理界面打开报错:

路径:平台菜单/开发管理/个性化管理

点击 jar包管理,报错:The route you visited does not exist or the related service is not installed

分析:这个问题是缺少hzero-jar服务,该服务在原系统应完成jar构建,只需要拷贝过来构建docker镜像即可:

解决方案:

制作事件管理服务的docker镜像

==================================================

制作HZERO PaaS 平台 1.12版本的Demo环境的HZERO 微服务-事件管理服务 ps-jar 镜像

==================================================

二、目标环境:

环境:WSL:Ubuntu-22.04系统

5、建立hzero-jar-docker目录

$ cd /d01/hzero-dockers

$ mkdir hzero-jar-docker

6、拷贝Jar包到目标环境

#在windows powershell 中执行

$ cp \\wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-jar\target\ps-jar.jar \\wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-jar-docker\

7、编辑Dockerfile

$ cd /d01/hzero-dockers/hzero-jar-docker

$ vi Dockerfile

————————————-

FROM registry.cn-shanghai.aliyuncs.com/c7n/javabase:17

COPY ps-jar.jar /ps-jar.jar

ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

ENTRYPOINT exec java -XX:+UnlockExperimentalVMOptions $JAVA_OPTS $REFLEC_OPTS $AGENT $SKYWALKING_OPTS  -jar /ps-jar.jar

————————————

8、编辑docker-compose.yml

$ vi docker-compose.yml

———————————-

## 要求Docker/Docker CE >= 19.x

services:

  hzero-jar:

    image: hzero-jar-jk-demo:1.12

    container_name: hzero-jar

    ports:

      – “8055:8055”

      – “8056:8056”

    environment:

      – JAVA_OPTS=-Xms250m -Xmx250m -Dspring.profiles.active=dev

    deploy:  # 限制容器总内存(Docker Compose v2.3+)

      resources:

        limits:

          memory: 500m  # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)

networks:

  default:

    name: hzero-demo

    external: true

———————————-

9、构建Docker镜像

$ cd /d01/hzero-dockers/hzero-jar-docker

$ docker build -t hzero-jar-jk-demo:1.12 .

构建成功:

$ docker images | grep jar

  1. 种子数据初始化:
    #拷贝种子数据:

$ cp -r  \\wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-jar\resource-package \\wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-jar-docker\

#更改resource-package\application.yml 把数据库连接改一下:

mysql-hzero -> localhost

$  cd /d01/hzero-dockers/hzero-jar-docker/resource-package

$ bash database-init.sh

访问:http://localhost:8099/

执行1和3, 成功完成

11、测试Docker镜像(测试之前先确保 redis-docker 和 mysql-docker,hzero-register , hzero-admin容器已经启动):

$ cd /d01/hzero-dockers/hzero-jar-docker

$ docker compose up -d

看日志:docker logs hzero-jar

看起来是正常启动了

http://localhost:8000注册中心中可见hzero-jar服务

测试:
路径:平台菜单/开发管理/个性化管理

点击 jar包管理,可正常显示:

#faq-question6-2

但是后来有一次重启之后,服务报错:

org.springfranework.jdbc.BadSqlGrannarException:# Error querying database. Cause: java.sql.SoLSyntaxErrorException: Table ‘hzero jar-hpfn tenant’ doesn’t exist# The error nay exist in URL [jar:nested:/ps-jar-jar/!B00T-INF/lib/hzero-jar-1.2.0.RELEASE. jar!/napper/JarConfigMapper .xnL]

分析:hpfm_tenant表是在hzero_platform这个数据库schema下面的,正常要加上前缀才行,这里没有加前缀,产研说可能是数据源缓存问题。

解决方案:刷新 “数据源缓存”

刷新后,再重启hzero-jar服务就正常了。

问题7、接口平台API注册报404错误

路径:平台菜单/接口平台/API配置/API注册

这个菜单打开会报404错误

分析:跟产研沟通,在1.8版本中暂不提供这个功能,这个是在1.9以后的大版本中规划的API维度的一个界面。

解决方案:暂时先禁用掉该菜单。

在 平台菜单/系统管理/菜单管理/菜单配置:

问题8、接口平台API权限汇总查看报404错误

路径:平台菜单/接口平台/API权限/API权限汇总查看

这个菜单打开会报404错误

分析:跟产研沟通,在1.8版本中暂不提供这个功能,这个是在1.9以后的大版本中规划的一个功能。

解决方案:暂时先禁用掉该菜单。在 平台菜单/系统管理/菜单管理/菜单配置:

问题9: 集成平台/服务编排/应用连接器 打开页面一闪而过,白屏

路径:平台菜单/服务编排/应用连接器/应用连接器

分析:

这个问题在原系统已解决,是前端模块缺失的问题,把前端文件拷贝过来就可以

解决方案:

#windows powershell:复制前端文件 和nginx配置文件

$ cp -r -Force \\wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\front\dist   \\wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\volumes\nginx\

拷贝完成后,再测:可正常显示:

问题10: hzero-gateway 服务日志太多的问题

这个问题在原系统已经改了,把日志级别改到info了,只需要把jar拷贝过重构docker镜像即可。

#拷贝Jar包到目标环境

#在windows powershell 中执行

$ cp \\wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-gateway\target\ps-gateway.jar \\wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-gateway-docker\

9、构建Docker镜像

$ cd /d01/hzero-dockers/hzero-gateway-docker

$ docker build -t hzero-gateway-jk-demo:1.12 .

问题11: 接口平台的健康检查定时任务导致日志文件太多的问题

这个定时任务,原来的种子数据中设定的是每30秒检查一次,会产生一个日志文件,这导致文件系统中的日志文件太多,日志表记录条多,文件记录表中记录太多。

经过测试,只是停掉这个调度任务不够,把日志策略改成仅记录异常也不够,每次重启就会恢复到全量记录。所以需要把自动初始化这个开关关掉,保存,然后再停掉这个任务。

HZERO PaaS平台-Docker版demo笔记(三)非容器环境运行jar包适配

我们为了制作Docker版本的Demo, 让微服务在容器中顺利运行,更改了所有微服务的yml配置,重新构建了所有的jar,详情可参考:

Jacksen的技术博客 » HZERO PaaS平台-Docker版demo笔记(一)Docker版制作  

现在回过头来想想,其实当时也可以不改的,不用去把每个微服务的yml文件中的中间件服务域名改成容器服务名的,只需要这些中间件服务的容器都给他们起个别名,跟原来yml中的域名保持一致就可以相互在容器间访问到的。但是当时不懂,已经那么做了,所以现在就继续在这个基础上继续吧。

当时我们备份了所有微服务原来的yml配置和jar文件,想着后面在linux 中直接运行这些微服务的时候还要把原来备份的yml配置恢复过来,然后重建微服务的jar包,但这么做会比较麻烦,因为后面每个微服务版本升级后还可能要继续重新构建适用于Docker的Jar包,而我们的微服务升级频率又很高,所以要考虑yml配置和jar包最好有方法同时适用于容器内运行和直接在linux运行。

问题分析:

我们对微服务门的application.yml和bootstrap.yml配置文件的更改,主要就是四种:中间件服务的域名、部分微服务的域名(注册中心、网关、配置中心等)、网络preferred ip、系统界面上的域名配置。

分别来看;

一、中间件服务域名

mysql,redis,mongo,mino,kkfileview,onlyoffice,elasticsearch 中间件服务的域名,改成了容器的服务名;

这一点:如果直接在linux中运行,那么只需要在hosts中把容器服务名的DNS解析指定到本机IP就可以。当然也可以不改,在run.sh和run_nobuild.sh中的启动命令中在JAVA_OPTS字符串中把原来的域名比如mysql的域名:db.hzero.com.cn 作为环境变量注入进去,类似PREFERRED_IP那样处理。但是也麻烦,每个服务都有两个脚本,每个脚本都要去改。所以还是在linux的hosts文件更改方便:

172.18.14.48 mysql-hzero  

172.18.14.48 redis-hzero   

172.18.14.48 mongo-hzero

172.18.14.48 kkfileview-hzero

172.18.14.48 onlyoffice-hzero 

172.18.14.48 elasticsearch-hzero  

二、注册中心、网关、配置中心等微服务的域名

这些域名在微服务的application.yml和bootstrap.yml中改成了容器的服务名;

这一点:如果直接在linux中运行,那么只需要在hosts中把容器名的DNS解析指定到本机IP就可以。

172.18.14.48 hzero-gateway   

172.18.14.48 hzero-register    

172.18.14.48 hzero-admin     

172.18.14.48 hzero-hkms      

172.18.14.48 hzero-hype      

172.18.14.48 hzero-aip-app   

三、网络preferred ip

网络从指定preferred ip改成去掉preferred ip,网络接口忽略改成了:

      ignored-interfaces:

        – lo

        – docker0

        – veth.*

      这一点,我们无需恢复到指定preferred ip,这样的写法可同时兼容linux本机运行和Docker容器中运行。

四、需要进入系统之后更改的配置

1、minio配置:需要进入系统->文件管理->minio 配置服务器地址,原来的oss.hzero.com.cn,没有更改。无需更改。

2、aigc开放api地址(AI网关):需要进入系统->AIGC中台->全局选项配置->开发api地址,原来是aigc.hzero.com.cn, 没有更改。  无需更改。

3、neo4j 图数据库地址:需要进入系统->AIGC中台->知识图谱->图数据库管理,原来是个IP地址,需要改成neo4j-hzero,在hosts中要添加172.18.14.48 neo4j-hzero  

4、向量数据库配置地址:需要进入系统->AIGC中台->向量库管理->向量库配置/平台内置向量库类型:ElasticSearch,原来是个IP地址,需要改成elasticsearch-hzero,在hosts中要添加172.18.14.48 elasticsearch-hzero  

备注:由于我们在全局设置中默认向量库用的是elasticsearch,没用milvus,所以milvus不用配置。

解决执行

一、更改linux的hosts文件

$ cp /etc/hosts /etc/hosts.bak20251126

$ vi /etc/hosts

删除定制原来内容,添加如下内容:

172.18.14.48 mysql-hzero

172.18.14.48 redis-hzero

172.18.14.48 mongo-hzero

172.18.14.48 elasticsearch-hzero

172.18.14.48 neo4j-hzero

172.18.14.48 hzero-gateway

172.18.14.48 hzero-register

172.18.14.48 hzero-admin

172.18.14.48 hzero-hkms

172.18.14.48 hzero-hype

172.18.14.48 hzero-aip-app

172.18.14.48 oss.hzero.com.cn

172.18.14.48 kkv.hzero.com.cn

172.18.14.48 gateway.hzero.com.cn

二、更改windows 客户端的hosts文件设置:

172.18.14.48  dev.hzero.com.cn          #hzero-demo环境 Nginx服务器地址

172.18.14.48  gateway.hzero.com.cn     # 网关的地址

172.18.14.48  aigc.hzero.com.cn         # AIGC ai-app服务的反向代理

172.18.14.48  kkv.hzero.com.cn          # 文件预览服务域名

172.18.14.48  oss.hzero.com.cn          # minio文件服务域名(客户端直接预览PDF需要)

三、启动AI平台服务,更改向量数据库和图数据库配置

$ cd /d02/

$ bash service-ai-all-start.sh

#启动完成,进入系统

3、图数据库配置更改成功:

4、向量数据库配置更改成功:

四、测试:

1、从原来的导出文件中恢复导入模型对接账号,并重新填入api_key后这些账号测试工作正常。
2、AIGC平台/企业应用库/我的运营知识库:知识库问答工作正常。
3、AIGC平台/文档库管理:上传文档向量化操作正常,PDF,Word文档预览正常,查看切片操作正常;

4、Office文件在线编辑问题:

按照开放平台 文件服务/在线编辑 结合自己的域名和端口进行hzero-file服务的application.yml配置:

hzero:

  file:

    only-office:

      edit-type: onlyOffice

      file-key-expire: 30

      doc-server-url: http://onlyoffice-hzero:8800

      call-back-url: http://dev.hzero.com.cn/hfle/v1/only-office/save/file

      converter-url: http://onlyoffice-hzero:8800/ConvertService.ashx

镜像使用平台打包的镜像:registry.hand-china.com/hzero-public/hzero-office:1.0

考虑到容器需要访问Minio服务和回调写文件的APi,所以在容器的docker -compose.yml中添加:

    extra_hosts:

      – “oss.hzero.com.cn:172.18.14.48”

      – “dev.hzero.com.cn:172.18.14.48”

平台 /文件管理/文件汇总查询  pdf,docx,xlsx 预览正常,docx编辑错误,错误信息:

分析:

1、前端界面错误显示是无法读取未定义的属性’document’

2、浏览器检查/网络中的API调用没有错误,URL返回正常;

3、hzero-file服务后端日志没有显示任何错误。

说明问题出在前端。假设前端代码跟onlyoffice容器服务返回的内容不兼容,这么假设是因为平台提供的onlyoffice镜像是5.6版本的,是2020年的版本,假设文档没有更新,但由于部分客户已经使用了更新版本的onlyoffice,前端为了适配新版onlyoffice做了改动,因而与旧版不兼容。

尝试:更换onlyoffice到8.02版镜像,这是2024年的镜像。

swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/onlyoffice/documentserver:8.2.0

#考虑到新的镜像中的安全策略跟平台提供的镜像不一样(在local.json中默认是需要验证的,平台镜像已经把验证去掉了),所以要先启动镜像,然后把local.json拷贝出来,

$ cd /d02/hzero/project/ps-file/onlyoffice

$ docker cp onlyoffice-hzero:/etc/onlyoffice/documentserver/local.json ./volumes/onlyoffice/DocumentServer/

然后再改local.json, 去掉验证,

      “token”: {

        “enable”: {

          “request”: {

            “inbox”: false,

            “outbox”: false

          },

          “browser”: false

然后再挂载到容器。再重启容器,使得新的镜像也不需要验证。

    volumes:

      – ${DOCKER_VOLUME_DIRECTORY:-./volumes}/onlyoffice/DocumentServer/local.json:/etc/onlyoffice/documentserver/local.json

chown -R 109:112 ./volumes

# 再次测试:问题依旧,而且问题表现也是一样的,假设失败。

看容器日志:

docker exec -it onlyoffice-hzero bash

cd /var/log/onlyoffice/documentserver/docservice

tail -f out.log看不到任何错误

docker exec -it onlyoffice-hzero tail -f /var/log/onlyoffice/documentserver/docservice/out.log

看前端  url API返回的响应内容:这个内容展开后发现跟http://onlyoffic-hzero:8800的主页是一样的。也就是说这返回的内容并不是具体我们要编辑的那篇文档的内容。

我们先测试onlyoffice服务器本身的可用性:

提示词给AI

我的onlyoffice服务器的 doc-server-url是: http://onlyoffice-hzero:8800 call-back-url是:http://hzero-gateway:8080/hfle/v1/only-office/save/file 要编辑的文件地址是: http://oss.hzero.com.cn:9000/hz-haip/haip01/0/MINIO/588ed65df356418282963399668bbccc@上海益吉-低代码平台应用成功案例.docx 请帮我构建一个在bash 中测试的命令,获得onlyoffice返回的编辑该文档的URL

元宝建议直接构建本地Html: 用5.6版本的onlyoffice 是可以正常使用的

<!DOCTYPE html>

<html lang=”zh-CN”>

<head>

    <meta charset=”UTF-8″>

    <title>OnlyOffice 编辑器测试</title>

    <!– 新增:让页面根元素撑满视口,消除默认边距 –>

    <style>

        html, body {

            height: 100%;  /* 让html、body占满浏览器窗口高度 */

            margin: 0;     /* 消除页面默认边距 */

            padding: 0;    /* 消除页面默认内边距 */

        }

    </style>

    <!– 引入 OnlyOffice API –>

    <script type=”text/javascript” src=”http://onlyoffice-hzero:8800/web-apps/apps/api/documents/api.js”></script>

</head>

<body>

    <div id=”editor” style=”height: 100%; width: 100%;”></div>

    <script type=”text/javascript”>

        // 编辑器配置

        var config = {

            document: {

                fileType: “docx”,

                key: “test-doc-key-001”, // 一个唯一的文档标识,可用于跟踪保存版本

                title: “上海益吉-低代码平台应用成功案例.docx”,

                url: “http://oss.hzero.com.cn:9000/hz-haip/haip01/0/MINIO/588ed65df356418282963399668bbccc%40%E4%B8%8A%E6%B5%B7%E7%9B%8A%E5%90%89-%E4%BD%8E%E4%BB%A3%E7%A0%81%E5%B9%B3%E5%8F%B0%E5%BA%94%E7%94%A8%E6%88%90%E5%8A%9F%E6%A1%88%E4%BE%8B.docx”

            },

            documentType: “text”,

            editorConfig: {

                callbackUrl: “http://hzero-gateway:8080/hfle/v1/only-office/save/file”, // 文档保存后的回调地址

                lang: “zh-CN”,

                mode: “edit”, // 设置为编辑模式

            },

            width: “100%”,

            height: “100%”

        };

        // 初始化编辑器

        new DocsAPI.DocEditor(“editor”, config);

    </script>

</body>

</html>

所以,结论是: hzero-file服务的url 这个api返回的内容错误,他返回了onlyoffice的主页,实际要返回我们上面这样的内容才对。

另外hero-file的POM中两个依赖也没添加:这要加上。

       <dependency>

           <groupId>org.hzero.starter</groupId>

           <artifactId>hzero-starter-fileview-onlyoffice</artifactId>

      </dependency>

     <dependency>

        <groupId>org.hzero.starter</groupId>

        <artifactId>hzero-starter-fileview-hoffice</artifactId>

     </dependency>

POM中加了这两个依赖后重启hzero-file服务,再测效果一样不行,。

比较公司开发环境发现用的onlyoffice是9.1.0 的版本,是2025年10月发的最新版

我换用latest版本,就是9.1.0的,去掉认证JWT要求:

$ docker exec -it onlyoffice-hzero bash

$ nano /etc/onlyoffice/documentserver/local.json

# 把认证去掉,重启:

$docker exec -it onlyoffice-hzero supervisorctl restart all

结果,本地那个测试html文件也提示无法下载文件,无法保存了,打不开:

看onlyoffice 日志:

$ docker exec -it onlyoffice-hzero tail -f /var/log/onlyoffice/documentserver/docservice/out.log

错误日志

[2025-12-06T11:21:56.832] [ERROR] [localhost] [test-doc-key-001] [uid-17649991598246] nodeJS – postData error: url = http://hzero-gateway:8080/hfle/v1/only-office/save/file;data = {“key”:”test-doc-key-001″,”status”:4,”actions”:[{“type”:0,”userid”:”uid-1764999159824″}]} Error: DNS lookup 172.18.14.48(family:4, host:hzero-gateway) is not allowed. Because, It is private IP address.

豆包说是触发了onlyoffice的内网渗透限制

更改local.json , 把IP限制去掉:

“services”: { “CoAuthoring”: { “sql”: { … }, “token”: { … }, “secret”: { … }, 在这个后面添加:

“requests”: { “restrictions”: { “ip”: { “allow”: [“*”], // 允许所有IP(测试用,生产不推荐) “deny”: [] } } }

再重启
$ supervisorctl restart all

问题依旧,chatgpt, 元宝,豆包均没有给出真正的解决方案, 豆包是瞎说,元宝和chatgpt就不会,他们基本没有onlyoffice的知识。

但在onlyoffice的官网论坛搜索问题,有个答案,并且答案是有用的:

参数 allowPrivateIPAddress 定义是否允许连接私有IP地址。这包括私有IP地址和预留IP地址

文档服务器默认不允许使用内部IP地址。为避免这种情况,请在docker容器中打开/etc/onlyoffice/documentserver/default.json,找到allowPrivateIPAddress参数并将其值改为true。

之后执行supervisorctl restart all并检查问题是否仍然存在。

把这个修改后的文件拷贝出来:

$ docker cp onlyoffice-hzero:/etc/onlyoffice/documentserver/default.json /d02/hzero/project/ps-file/onlyoffice/volumes/onlyoffice/DocumentServer/

顺便把local.json也拷贝出来

$ docker cp onlyoffice-hzero:/etc/onlyoffice/documentserver/local.json /d02/hzero/project/ps-file/onlyoffice/volumes/onlyoffice/DocumentServer/

这个方案确实可以,改了之后本地html中调用onlyoffice可以正常显示:

注意:allowPrivateIPAddress 这个参数本身不能像 JWT_ENABLED 那样通过简单的环境变量来设置,可以通过文件挂载的方式实现持久生效。

HZERO里面文件编辑会报错:

 HZERO-file 服务后台也会报错(认证我去掉了,不是认证问题) ,把hzero-file服务的错误日志给元宝查一下,元宝指出:

根据您提供的完整错误日志,核心问题已经明确:​OnlyOffice文档服务返回了HTTP 308状态码(永久重定向)​,导致HZERO服务无法完成HTML预览生成。以下是关键证据:

​明确的状态码记录​

ERROR o.hzero.starter.fileview.util.HttpUtils: current onlyOffice resultCode was:308

​重定向引发的处理中断​

日志显示在收到308响应后,系统立即抛出CommonException: hfle.error.onlyOffice.generateHtml

关于308重定向的问题,元宝根据他从CSDN别人分享的经验文章,给出了解决方案:

docker run -i -t -d -p 8800:80 \

  -e JWT_ENABLED=false \

  -e USE_UNAUTHORIZED_STORAGE=true \

  -e ONLYOFFICE_HTTPS_HSTS_ENABLED=false \

  onlyoffice/documentserver

编辑/etc/nginx/includes/ds-docservice.conf

全局替换$the_host成$http_host

nginx -s reload

这个方案未能解决308问题,测试发现还是报错,还是308。

我们把hzero-file的日志级别改成debug,看更详细的日志:

2025-12-07T12:04:39.075+08:00 DEBUG 119681 — [hzero-file] [  XNIO-1 task-2] o.h.s.f.service.impl.HofficeServiceImpl  : generateRequestParam param : RequestParam{accessToken=’epFl7vl24D’, docServerUrl=’http://onlyoffice-hzero:8800′, bodyJson='{“document”:{“title”:”公牛集团-aPaaS飞搭低代码项目案例.docx”,”url”:”http://oss.hzero.com.cn:9000/hz-haip/haip01/0/MINIO/343b6feac396458e8bb0817e64442a6b%40%E5%85%AC%E7%89%9B%E9%9B%86%E5%9B%A2-aPaaS%E9%A3%9E%E6%90%AD%E4%BD%8E%E4%BB%A3%E7%A0%81%E9%A1%B9%E7%9B%AE%E6%A1%88%E4%BE%8B.docx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=hzero.admin%2F20251207%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251207T040439Z&X-Amz-Expires=300&X-Amz-SignedHeaders=host&X-Amz-Signature=3b2852b7ef47d629f4531bc610952f23f60affa717b561198fb14c34dbd01a3d”,”fileId”:”http://oss.hzero.com.cn:9000/hz-haip/haip01/0/MINIO/343b6feac396458e8bb0817e64442a6b@公牛集团-aPaaS飞搭低代码项目案例.docx”},”permissions”:{“edit”:true,”review”:true,”dealWithReview”:true,”dealWithReviewOnly”:false,”changeReview”:true,”download”:true,”print”:true,”comment”:false},”editor”:{“callbackUrl”:”http://hzero-gateway:8080/hfle/v1/only-office/save/file”,”userId”:”2″,”userName”:”超级管理员”},”customization”:{“logoImage”:””,”logoLink”:””,”preloaderLogoImage”:””},”extra”:”{\”type\”:\”U\”,\”tenantId\”:0,\”bucketName\”:\”haip\”,\”storageCode\”:\”MINIO\”}”}’}

这里面docserverurl 没看到拼接完整的url;http://onlyoffice-hzero:8800/web-apps/apps/api/documents/api.js

在hzero-file的yml里面改下配置再试试看,再次测试报405(Method Not Allowed)错误了。看起来也不是这个问题。调用程序应该是自己做了拼接的。还是改回来。http://onlyoffice-hzero:8800

接下来:

Docker-compose.yml中增加环境变量:

  – JWT_ENABLED=false 

  – USE_UNAUTHORIZED_STORAGE=true 

  – ONLYOFFICE_HTTPS_HSTS_ENABLED=false 

更改后的defauly.json 实现挂载持久化:

      – ${DOCKER_VOLUME_DIRECTORY:-./volumes}/onlyoffice/DocumentServer/default.json:/etc/onlyoffice/documentserver/default.json

重启onlyoffce容器,再次测试,还是308问题;

我在onlyoffice中怎样才能看到请求方发起内容的详细日志?我必须看到hzero-file 发给onlyoffce的详细内容才能明白为啥还有308,

$ ps aux | grep nginx 可以看到:

tail -F /var/log/onlyoffice/documentserver/adminpanel/out.log /var/log/onlyoffice/documentserver/adminpanel/err.log /var/log/onlyoffice/documentserver/docservice/out.log /var/log/onlyoffice/documentserver/docservice/err.log /var/log/onlyoffice/documentserver/converter/out.log /var/log/onlyoffice/documentserver/converter/err.log /var/log/onlyoffice/documentserver/nginx.error.log /var/log/onlyoffice/documentserver/metrics/out.log /var/log/onlyoffice/documentserver/metrics/err.log /var/log/onlyoffice/documentserver-example/out.log /var/log/onlyoffice/documentserver-example/err.log

这条命令应该是看所有log的, 执行这条命令,可以看到所有日志,其中有条日志是我想要看到的:

==> /var/log/onlyoffice/documentserver/nginx.error.log <==

2025/12/07 04:22:22 [error] 29581#29581: *211 open() “/var/www/onlyoffice/documentserver/web-apps/apps/api/documents/api.js/web-apps/apps/api/documents/api.js” failed (20: Not a directory), client: 172.18.0.1, server: , request: “GET /9.1.0-bc930140d198d21185b7c6cf5139630d/web-apps/apps/api/documents/api.js/web-apps/apps/api/documents/api.js HTTP/1.1”, host: “onlyoffice-hzero:8800”

这一条:就是我刚才更改了hzero-file的application.yml中的 doc-server-url 导致的。这条日志印证了hzero-file确实会加上/web-apps/apps/api/documents/api.js ,所以,doc-server-url确实只需要配置为http://onlyoffice-hzero:8800就可以了。

那我现在要接着找我的配置改回http://onlyoffice-hzero:8800后反馈308错误的日志:

可惜我多次刷新,在hzero-file中的log都能看到308,但是在onlyoffice的错误日志跟踪中看不到相关内容,这种错误不会出现在onlyoffice的错误日志中吗?

/var/log/onlyoffice/documentserver/nginx.error.log

/var/log/onlyoffice/documentserver/docservice/out.log /var/log/onlyoffice/documentserver/docservice/err.log

1. ​确认请求是否真正到达OnlyOffice​

查找有308重定向配置的地方:

$ grep “return 30” /etc/nginx/includes/*

返回: /etc/nginx/includes/ds-docservice.conf:

 return 308 $the_scheme://$the_host$the_prefix/9.1.0-$cache_tag$cache;

打开这个配置文件,查看具体内容:

#welcome page
location = / { return 308 $the_scheme://$the_host$the_prefix/welcome/; }

就是说直接访问跟路径的时候,就会重定向到welcome页面,但是从之前的日志可以看出我们设置的http://onlyoffice-hzero:8800 会被容器端口转发到80端口,而在onlyoffice服务器上

root@47397c159d32:/etc/nginx# more nginx.conf

user www-data;

worker_processes 1;

pid /run/nginx.pid;

error_log /var/log/nginx/error.log;

include /etc/nginx/modules-enabled/*.conf;

也就是说主要配置在:/etc/nginx/conf.d/ ds.conf 中:

/etc/nginx/conf.d/ ds.conf

include /etc/nginx/includes/http-common.conf;

server {

  listen 0.0.0.0:80;

  listen [::]:80 default_server;

  server_tokens off;

  set $secure_link_secret 8qldl8B12tCtjYXWA2gS;

  include /etc/nginx/includes/ds-*.conf;

}

也就是说主要配置在:/etc/nginx/includes/ds-docservice.conf 中:

而在ds-docservice.conf中,第一句就是 把根目录重定向到 welcom页面

location = / { return 308 $the_scheme://$the_host$the_prefix/welcome/; }

但我们从之前的日志可以看出,hzero-file服务确实是把 根目录拼接上了/web-apps/apps/api/documents/api.js 再请求onlyoffice的,所以不存在直接请求根目录的情况。

还有第二个308的配置:

#script caching protection
location ~ ^(?<cache>\/web-apps\/apps\/(?!api\/documents\/api\.js$).*)$ {
return 308 $the_scheme://$the_host$the_prefix/9.1.0-$cache_tag$cache;
}

这是缓存策略,也是版本兼容策略,当请求方发出一个固定的路径请求后,onlyoffice可以根据实际版本重定向到不同版本的实际脚本路径。

308 跳转到带版本号的 URL 后,OnlyOffice 配置了专门的 location 处理版本号路径:

location ~ ^/([\d]+\.[\d]+\.[\d]+[\.|-][\w]+)/(?<path>.*)$ {

  proxy_pass http://docservice/$path$is_args$args;

  # 其他 proxy 配置(超时、版本等)

}

作用:剥离版本号前缀(如 9.1.0-abc123/),将剩余路径(web-apps/apps/main.js)代理到 OnlyOffice 后端服务(docservice),确保资源能正确访问。

4. OnlyOffice 业务目的(核心价值)

(1)静态资源长期缓存

/web-apps/apps/ 下的 JS/CSS 等资源变动极少,通过 308 永久重定向到带版本号 + 缓存标签的 URL,让浏览器 / CDN 长期缓存(后续配置中设置 max-age=31536000),大幅减少重复下载。

(2)版本隔离

OnlyOffice 升级版本(如 9.1.0 → 9.2.0)时,修改 308 中的版本号(9.2.0),旧缓存的 URL(9.1.0-xxx)自动失效,浏览器会请求新的版本 URL,避免缓存污染导致的功能异常。

(3)核心文件缓存隔离

通过负向断言排除 api.js,因为该文件包含文档服务器的接口地址、版本逻辑等动态内容,若缓存会导致客户端调用旧接口,因此专门为 api.js 配置了「禁用缓存」规则:

nginx

location ~ ^(\/[\d]+\.[\d]+\.[\d]+[\.|-][\w]+)?\/(web-apps\/apps\/api\/documents\/api\.js)$ {

  expires off;  # 禁用过期缓存

  add_header Cache-Control “no-store, no-cache, must-revalidate”;  # 强制不缓存

  # 其他配置(gzip、alias 等)

}

308 配置的关键注意事项(OnlyOffice 专属)

1. 变量必须提前定义

$the_scheme/$the_host/$the_prefix/$cache_tag 是 OnlyOffice 在主配置中定义的自定义变量,若缺失会导致 308 跳转 URL 异常(如 :///9.1.0-/web-apps/apps/main.js),Nginx 启动报错。

2. 308 缓存与版本升级

308 是永久重定向,浏览器缓存后不会自动失效,因此 OnlyOffice 升级时必须修改版本号(如 9.1.0→9.2.0)或 $cache_tag,让新 URL 触发新请求;

测试 / 开发阶段可临时改用 307(临时重定向),避免缓存干扰。

先改成307试试(conf文件中,只需要把308改成307,别的不用改)

sed -i ‘s/return 308/return 307/g’ /etc/nginx/includes/ds-docservice.conf

nginx -s reload

再次访问hzero-file文件服务的word文档在线编辑,这次没有返回308,返回了405

405是方法不允许,元宝说可能是服务端点配置不正确,建议改成http://onlyoffice-hzero:8800/ConvertService.ashx

再次测试,hzero-file文件服务没有返回错误,但是前端界面显示 error , 并且onlyoffice日志出现错误:
[2025-12-07T09:17:43.588] [WARN] [localhost] [null] [userId] nodeJS – convertRequest unexpected outputtype =

说明不是这么回事。

元宝搜索到 CSDN有篇文章说:有碰到308的问题是因为

onlyoffice容器里的nginx无法正确识别$the_host.

编辑/etc/nginx/includes/ds-docservice.conf

全局替换$the_host成$http_host

重启nginx

nginx -s reload

但实际测试下来也没用,这是个过时的说法。

继续分析,

根路径测试:

curl -I -X GET http://onlyoffice-hzero:8800

HTTP/1.1 307 Temporary Redirect
Server: nginx
Date: Sun, 07 Dec 2025 09:38:34 GMT
Content-Type: text/html
Content-Length: 164
Connection: keep-alive
Location: http://onlyoffice-hzero:8800/welcome/

curl -I -X POST http://onlyoffice-hzero:8800

HTTP/1.1 307 Temporary Redirect
Server: nginx
Date: Sun, 07 Dec 2025 09:40:45 GMT
Content-Type: text/html
Content-Length: 164
Connection: keep-alive
Location: http://onlyoffice-hzero:8800/welcome/

 测试静态资源 307

curl -I -X GET http://onlyoffice-hzero:8800/web-apps/apps/main.js

HTTP/1.1 307 Temporary Redirect
Server: nginx
Date: Sun, 07 Dec 2025 09:43:09 GMT
Content-Type: text/html
Content-Length: 164
Connection: keep-alive
Location: http://onlyoffice-hzero:8800/9.1.0-8b6a79642574012ffddb2cd8aeecfa96/web-apps/apps/main.js

所以,测试下来服务端没啥问题,就是调用端的问题,hzero-file服务的 application.yml中更改编辑器类型配置,再重启:

      # 编辑器类型 onlyOffice/hoffice

      edit-type: ${ONLY_OFFICE_EDIT_TYPE:onlyOffice}

这次有显示了,这是说文档安全令牌的格式不正确:

Hzero-file 服务的日志中没有错误,onlyoffice 容器服务有错误信息:

[2025-12-07T10:11:01.796] [WARN] [localhost] [17651021616605e223b9] [userId] nodeJS – checkJwt error: name = JsonWebTokenError message = jwt malformed token = epFl7vl24D

由于我已经在容器的docker-compose.yml中设置了- JWT_ENABLED=false,所以理论上应该不要求token了,但测试发现,如果在调用的时候传了token,onlyoffice还是会检查token的有效性,刚开始报格式错误,改成标准的jwt格式后又报错验证错误,docker-compose.yml和hzero-file的application.yml两边保持一致都不行,不管是两边都填密钥还是两边都填同一密钥计算出来的长长的TOKEN都通不过验证。

所以后来就想,已经设置jwt验证为false,为啥还要提供token啊,就把hzero-file的application.yml中的 onlyoffice配置部分的token注释掉,这样前端检查的网络中看url 这个api的响应中就没有token了,onlyoffice就不不报错了。

总结:

  1. onlyoffice 最新版的容器 9.1.0版本可用。trail环境用的8.x的版本也可用,看起来不同版本的onlyoffice兼容性都不错。
  2. 非全容器环境,Hzero相关服务都直接运行在linux,非docker网络内的话, onlyoffice 容器的compose-yml中要把minio文件服务的域名和网关服务的域名解析加上。(如果是全容器环境则不需要)

    extra_hosts:

      – “oss.hzero.com.cn:172.18.14.48”

      – “hzero-gateway:172.18.14.48”

  • 为方便demo环境配置,去掉jwt验证,这需要在onlyoffice 容器的compose-yml中加上配置:

    environment:

      – JWT_ENABLED=false

  • demo非全容器环境,hzero-gateway网关地址在onlyoffice看来属于本地host机地址,其默认安全策略禁止访问,导致回调地址不可用,文件不能保存,所以要去掉这个策略,方法是修改default.json,把”allowPrivateIPAddress”: true,为持久有效,拷贝到容器外,修改后进行挂载

    volumes:

      – ${DOCKER_VOLUME_DIRECTORY:-./volumes}/onlyoffice/DocumentServer/default.json:/etc/onlyoffice/documentserver/default.json

备注:在全容器环境,这个配置也需要更改。

  • onlyoffice容器中的local.json 每次启动会被服务器自动修改,因此不要去修改这个文件,也不要去做持久性挂载,网上和AI里面说的很多修改这个文件的方法并不可取。要禁用JWT验证要通过docker-compose.yml配置去设置,而不是修改这个文件。
  • Hzero-file 的application.yml文件中的配置,编辑器类型edit-type一定要配置onlyOffice, 选配平台选配下来的配置文件默认是hoffice, 这个配置不对就导致一系列308,405…等等错误,怎么改都搞不定。后来跟产研聊,hoffice是啥选项? 他们说这是6年前onlyoffice还不成熟,有很多bug, 他们基于开源的onlyoffice,修改了很多bug, 形成了hoffice版本, 但后来onlyoffice本身不断迭代进步,比他们自己的hoffice版本好,他们就放弃了hoffice的继续迭代,直接用onlyoffice了,所以hoffice这个配置选项,早就没用了,只是为了兼容5年前还在用hoffice的用户。

token注释掉,留着就会导致onlyoffice去验证,跟我设置去掉验证冲突。当然我看到公司开发环境和试用环境是留着的,他们可能启用了jwt验证。其他跟开放平台文档的配置保持一致是可以的。

    only-office:

      # 编辑器类型 onlyOffice/hoffice

      edit-type: ${ONLY_OFFICE_EDIT_TYPE:onlyOffice}

      # onlyOffice文件key过期时间

      file-key-expire: ${ONLY_OFFICE_FILE_KEY_EXPIRE:30}

      #token: ${DOC_SERVER_TOKEN:LSe9EvjMC5z8QvF0S3p1P7rAI236tWpd}

      doc-server-url: ${DOC_SERVER_URL:http://onlyoffice-hzero:8800}

      call-back-url: ${DOC_SERVER_CALL_BACK:http://hzero-gateway:8080/hfle/v1/only-office/save/file}

      converter-url: ${DOC_SERVER_CONVERTER_URL:http://onlyoffice-hzero:8800/ConvertService.ashx}

备注:后来在搞容器环境测试的时候,把onlyoffice-hzero改成onlyoffice.hzero.com.cn了:

doc-server-url: ${DOC_SERVER_URL:http://onlyoffice.hzero.com.cn}

converter-url: ${DOC_SERVER_CONVERTER_URL:http://onlyoffice.hzero.com.cn/ConvertService.ashx}

所以要做些改动:
a) 在 /etc/hosts中加上 172.18.14.48 onlyoffice.hzero.com.cn

b) nginx做反向代理:

server {

    listen 80;

    server_name onlyoffice.hzero.com.cn;  # 匹配统一域名

    # 反向代理到Docker网络内的onlyoffice容器8800端口(直接用别名)

    location / {

        proxy_pass http://onlyoffice.hzero.com.cn:8800;  # 直接指向onlyoffice容器服务端口

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_connect_timeout 300s;

        proxy_send_timeout 300s;

        proxy_read_timeout 300s;

    }

}

  • 记得在hzero-file的POM文件中加上onlyoffice的依赖,这在开放平台文档中有提到。

        <dependency>

            <groupId>org.hzero.starter</groupId>

            <artifactId>hzero-starter-fileview-onlyoffice</artifactId>

        </dependency>

总之,搞明白了就很好用,也很好配置。

HZERO PaaS平台-Docker版demo笔记(二)Docker版测试 问题5-9

问题五、知识问答涉及的跨域访问问题,HKMS服务访问问题和大模型APIkey问题。

测试知识问答,浏览器控制台看到的错误信息是:

Access to XMLHttpRequest at ‘http://aigc.hzero.com.cn/v1/open/image-emb/common’ from origin ‘http://dev.hzero.com.cn’ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.

分析:这是跨域访问被阻止了,按照元宝建议,nginx反向代理添加内容:

        # 添加CORS响应头

        add_header ‘Access-Control-Allow-Origin’ ‘http://dev.hzero.com.cn’ always;

        add_header ‘Access-Control-Allow-Methods’ ‘GET, POST, OPTIONS, PUT, DELETE’ always;

        add_header ‘Access-Control-Allow-Headers’ ‘DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization’ always;

        add_header ‘Access-Control-Expose-Headers’ ‘Content-Length,Content-Range’ always;

        add_header ‘Access-Control-Allow-Credentials’ ‘true’ always;

重启动nginx

知识库问答执行错误:

控制台错误显示交叉验证策略阻止了访问。

分析:

Aigc.hzero.com.cn是个反向代理地址,浏览器发现有跨域访问,会给目标跨域地址发个预检请求(options类型), 反向代理默认会把所有请求发给被代理的服务,也就是后端的hzero-aip-app:8088, hzero-aip-app会怎么处理呢?看hzero-aip-app的application.yml,其中关于跨域访问的配置是:

    # 跨域配置

    cors:

      allowed-origins:

      – ${HZERO_AIP_CORS_ALLOWED_ORIGINS:*}

      allowed-headers:

      – ${HZERO_AIP_CORS_ALLOWED_HEADERS:*}

      allowed-methods:

      – ${HZERO_AIP_CORS_ALLOWED_METHODS:*}

也就是说允许任何来源任何方法(按理应该包含options预检方法),所以正常应该是可以的。然后有重新翻了下开放平台上AIGC的部署文档,发现在反向代理的配置的地方跟原来的版本有变化,按照新的变化,更新了nginx反向代理的配置:

  server {

        listen       80;

        server_name  aigc.hzero.com.cn;

        location / {

          proxy_pass http://hzero-aip-app:8088;

          proxy_set_header Host $host:$server_port;

          proxy_set_header X-Real-IP $remote_addr;

          proxy_set_header Host $host;

          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

          proxy_buffering off;

        }

  }

重启nginx,再测试:

这次没有报跨域访问的错误,只是说链接KMS出了问题,不过这并不稳定,全部容器重启后再次访问,还是出现跨域访问被block的问题,提示很明确:No ‘Access-Control-Allow-Origin’ header is present on the requested resource. 看了哪些网络请求,确实也没提供 Access-Control-Allow-Origin

解决方案:还是在nginx中配置aigc.hzero.com.cn反向代理的地方修改,按照豆包建议做各种nginx的配置修改都没用,最后还是恢复文档中简单配置就又好用了。而且在正常好用的情况下,也没在请求标头中看到Access-Control-Allow-Origin,单独打开没有缓存的chrome测试也是好的。那看来所谓的不稳定表现是原来Edge浏览器缓存原因? nginx配置上不复杂,就按文档就行?后面在多测测吧。

连接KMS的问题:

链接KMS出了什么问题呢?我们查hzero-aip-app服务的日志:

2025-11-29T22:33:19.068+08:00 ERROR 1 — [hzero-aip-app] [r-http-epoll-16] o.h.a.k.domain.search.SearcherWithFlux : HKMS 调用异常:

org.springframework.web.reactive.function.client.WebClientRequestException: finishConnect(..) failed: Connection refused: hzero-hkms/172.18.0.27:18080

从日志看,hzero-aip-app链接HKMS时,链接被拒绝了。那我们先测试这两个容器之间的连通性:

Hzero-aip-app 容器测试访问hzero-hkms:

# echo ‘public class Test { public static void main(String[] args) { try (java.net.Socket s = new java.net.Socket()) { s.connect(new java.net.InetSocketAddress(“hzero-hkms”, 18080), 3000); System.out.println(“✅ 连通成功!”); } catch (Exception e) { System.out.println(“❌ 连通失败: ” + e.getMessage()); } } }’ > Test.java && javac Test.java && java Test && rm -f Test.java Test.class

Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

❌ 连通失败: Connection refused

测试下来就是联通失败,看hzero-hkms容器的ip地址,确实是172.18.0.27,而在hzero-aip-app的application.yml中关于HKMS服务的配置是:
      llama:

        gateway-path: ${HZERO_KNOWLEDGE_LLAMA_GATEWAY_PATH:http://hzero-hkms:18080}

这么说,aip-aip-app服务,根据配置中的hzero-hkms这个容器服务名正确的解析了其IP地址。也就是网络可达,但链接被拒绝了。猜测是 HKMS的服务访问策略里面做了什么设置,拒绝了某些来源的链接。通常这种设置在哪里呢?我们在浏览器直接访问hkms服务 http://locaohost:18080 是有响应的。

那么拒绝访问的设置是在hkms服务的web配置中?

我先在容器外,linux 主机中测试下链接HKMS服务,是否能成功:

# echo ‘public class Test { public static void main(String[] args) { try (java.net.Socket s = new java.net.Socket()) { s.connect(new java.net.InetSocketAddress(“localhost”, 18080), 3000); System.out.println(“✅ 连通成功!”); } catch (Exception e) { System.out.println(“❌ 连通失败: ” + e.getMessage()); } } }’ > Test.java && javac Test.java && java Test && rm -f Test.java Test.class
✅ 连通成功!

突然发现自己好傻,18080端口是映射到容器外的端口,在容器里面当然访问不了。

解决方案:

更改 hzero-aip-app的application.yml 更改hkms服务的端口,从 18080 改成80

      llama:

        gateway-path: ${HZERO_KNOWLEDGE_LLAMA_GATEWAY_PATH:http://hzero-hkms:80}

对hzero-hype服务调用的配置端口也要改成80;

同样的问题在hzero-aip-server中也存在,hzero-hkms服务的端口要改成80.

修改完成后,重新构建jar, docker镜像,重启动hzero-aip-app服务 和hzero-aip-server服务。

再次测试知识库问答:

这次没有之前连不上HKMS的错误了,提示了一个新的错误,好型跟大模型调用有关:

查hzero-aip-app服务日志

Caused by: org.springframework.web.client.ResourceAccessException: I/O error on POST request for “https://ark.cn-beijing.volces.com/api/v3/chat/completions”: ark.cn-beijing.volces.com

是调用大模型API遇到了IO意外,没有更详细的信息,不过类似的问题在文档向量化处理时提供了更详细的信息,其实就是无法解析大模型API中的域名:

难道是我们把hzero-aip-app放到容器内去运行了,容器内只能解析docker网络内的容器服务名,确实无法解析大模型API的域名?

在模型账号对接的测试的地方也是遇到同样的问题了:出现了DNS 错误。

想着问下豆包如何解决容器内服务访问外网问题,但是豆包断网了。嗯,想起来了,已经是凌晨12点了,家里的wifi设置了自动断网,

临时链接下手机热点,继续问豆包,但是,突然想起这可能是我断网导致的吧,于是再测试模型账号对接测试:发现正常了。确实是断网的原因。

再做文档向量同步也成功了:

知识问答,报了另外一个错误,说是API KEY 错误,大概是重排模型的APIkey 还没填进去

输入正确的api Key之后再测,知识库问答就OK了:

所以核心问题是容器服务hzero-hkms 的端口问题,我们正常再hzero-aip-app服务和hzero-aip-server服务的application.yml中配置的是容器映射到外面的端口,但是在docker compose 网络内部,不能用映射到外面的端口18080,必须是容器内的端口80。

不过,仔细一想,我们在hzero-aip-app和hzero-aip-server的yml配置文件中对hkms访问的端口改成容器的端口也不行,因为我们还要兼容hzero-aip-app和hzero-aip-server两个服务本身没有在docker 容器内运行的情况。所以最合理的做法是保持hzero-aip-app和hzero-aip-server 的yml配置中的18080端口,但是把HKMS的nginx 的web服务端口从80改成18080,这样hkms容器内外端口就保持一致,可以兼容hzero-aip-app和hzero-aip-server服务在docker compose网络内访问和网络外访问的情况。

执行:

Hzero-aip-app 和hzero-aip-server 对hkms的访问端口配置还是恢复到18080, 更改hkms容器Nginx的web服务端口为18080; 更改hkms 容器的docker-compose.yml中的端口映射为18080:18080;

hype服务也要类似做更改,hype容器之前配置的时候,没有把容器内的web服务配置文件挂载出来,所以在hype的docker-compose.yml中要做下挂载

先在volumes中新建hype目录

$ cd /d01/hzero-dockers/volumes

$ mkdir hype

$ sudo chown -R 33:33 ../volumes/hype

$ sudo chmod -R 755 ../volumes/hype

启动hype 容器

$ cd /d01/hzero-dockers/hzero-hype-docker

$ docker compose up -d

#把原来的web服务启动文件拷贝出来

$ docker cp hzero-hype:/root/execute/bin/start.sh /d01/hzero-dockers/volumes/hype/

#关闭容器

更改 /d01/hzero-dockers/volumes/hype/start.sh, 把端口从80改成10080

#docker-compose.yml中挂载

    volumes:

      – ${DOCKER_VOLUME_DIRECTORY:-../volumes}/hype/start.sh:/root/execute/bin/start.sh

#再启动容器,OK了:

不过有个问题始终存在,那就是每次容器服务全部重启之后再去测试《我的HZERO运营知识库》知识库问答的时候,当我们开始输入问题的时候,系统就会去找相似问题提供选择,这时就会调用aigc.hzero.com.cn 网关中的API了,这个时候涉及跨域,因为我们的原始域是dev.hzero.com.cn , 浏览器发送请求给aigc.hzero.com.cn的时候会告诉服务端这是跨域,等服务端返回消息,要看返回消息中是否包含 响应头(服务器配置):Access-Control-Allow-Origin,并且Access-Control-Allow-Origin 明确是包含了发送的原始域,或者*(所有域);如果返回的消息中没包含,那么浏览器就拒绝把响应消息返回给浏览器前端用户,直接阻塞掉了。

目前测试中发现,当nginx 和 hzero-aip-app 都放在docker容器中运行的时候,nginx的配置中反向代理的域名aigc.hzero.com.cn 指向容器服务名hzero-aip-app:8088 的时候,服务返回的响应中没有Access-Control-Allow-Origin,从而导致被浏览器的Cors(跨域资源共享)策略阻塞。这个时候,如果我们在nginx.conf中配置加上 Access-Control-Allow-Origin: ‘dev.hzero.com.cn’ 也会促发错误,错误信息是Access-Control-Allow-Origin只允许有一条,但实际有两条Access-Control-Allow-Origin: ‘dev.hzero.com.cn’  和 Access-Control-Allow-Origin: ‘*’ , 我们在hzero-aip-app的服务yml配置中明确是:

    # 跨域配置

    cors:

      allowed-origins:

      – ${HZERO_AIP_CORS_ALLOWED_ORIGINS:*}

      allowed-headers:

      – ${HZERO_AIP_CORS_ALLOWED_HEADERS:*}

      allowed-methods:

      – ${HZERO_AIP_CORS_ALLOWED_METHODS:*}

所以,正常hzero-aip-app服务返回的响应中肯定是包含Access-Control-Allow-Origin: ‘*’ 的,加上nginx中配置增加的Access-Control-Allow-Origin: ‘dev.hzero.com.cn’就会出现浏览器提示的错误。 不过诡异的是: 既然浏览器能获得后端服务返回的Access-Control-Allow-Origin: ‘*’ ,那为什么在我的nginx配置中没有增加Access-Control-Allow-Origin: ‘dev.hzero.com.cn’的时候他就获取不到呢? 好了,因为我们在nginx配置中国增加了Access-Control-Allow-Origin而出现重复的Access-Control-Allow-Origin错误之后,我们在nginx配置中把这一条删除掉了,浏览器就不报错了,然后就能正常访问了。这个时候我们可以明确看到,响应头中包含了我们在nginx配置中曾经添加的 Access-Control-Allow-Origin: ‘dev.hzero.com.cn’

那为什么我们明确的已经在nginx的配置文件中删除了这条配置了,他还能在响应头中出现呢?是因为缓存吗? 是哪里的缓存呢?

  1. 删除浏览器数据,刷新,重新登录,响应头中依然包含。工作正常,看起来不是客户端本地缓存。
  2. 重启nginx服务,刷新,响应头中依然包含。工作正常,看起来不是web服务端缓存。
  3. 重启hzero-aip-app服务,响应头中依然包含。工作正常,看起来不是后端服务端缓存。
  4. 重启hzero-gateway服务,响应头中依然包含。工作正常,看起来不是后端服务端缓存。
  5. 究竟是哪里缓存的呢?

#Nginx容器内执行:
# curl -H ‘Origin: dev.hzero.com.cn’ \

-H ‘Authorization: Bearer 7a67e4b8-998d-4e74-a9b8-0f2da0f4da9e’ \

http://hzero-aip-app:8088/v1/open/knowledge/search-question?tenantId=0 \

-i> > >

HTTP/1.1 200 OK

Vary: Origin

Vary: Access-Control-Request-Method

Vary: Access-Control-Request-Headers

Access-Control-Allow-Origin: dev.hzero.com.cn

Access-Control-Expose-Headers: date, content-encoding, server, etag, vary, Cache-Control, Last-Modified, content-type, transfer-encoding, connection, x-application-context, content-disposition

Access-Control-Allow-Credentials: true

Content-Type: application/json

Content-Length: 95

Cache-Control: no-cache, no-store, max-age=0, must-revalidate

Pragma: no-cache

Expires: 0

X-Content-Type-Options: nosniff

X-Frame-Options: DENY

X-XSS-Protection: 0

Referrer-Policy: no-referrer

以上是不通过代理,直接访问http://hzero-aip-app:8088,在给了Origin: dev.hzero.com.cn后,返回包含了Access-Control-Allow-Origin: dev.hzero.com.cn,说明这个确实是后端服务hzero-aip-app返回的,不是nginx返回的。

说明:Access-Control-Allow-Origin: dev.hzero.com.cn 既不是 nginx 配置残留,也不是缓存,而是 后端 hzero-aip-app 的 Spring Boot CORS 框架「动态生成」的!

为什么后端配置 allowed-origins: *,却返回了具体的 dev.hzero.com.cn?

这是 Spring Boot CORS 框架的「隐式适配逻辑」,专门针对「带凭证的跨域请求」:

你的后端配置了 Access-Control-Allow-Credentials: true(响应头中已显示);

根据 CORS 标准:带凭证(Cookie/Token)的跨域请求,Access-Control-Allow-Origin 不能是 *(浏览器会拒绝);

因此 Spring Boot CORS 框架会「智能适配」:当配置 allowed-origins: * 且 allow-credentials: true 时,框架不会返回字面的 *,而是 动态返回请求头中的 Origin 值(即 dev.hzero.com.cn),既满足标准,又实现了「允许所有源 + 带凭证」的需求。

这就是一直困惑的核心原因 —— 后端配置的 * 是「逻辑上允许所有源」,但实际返回的是「请求的具体源」,而非字面的 *。

但是,但是。。。为啥第二天重启平台服务之后,他又会报CORS错误了?

  • 切换到浏览器无痕模式再试,响应头中依然包含。工作正常,看起来也不是缓存问题。
  • 关闭系统代理开机自启,重启服务器,重启整个平台服务,用浏览器无痕模式,再试:

问题就重现了:

第一次调用,响应标头是空的:

第二次调用,响应表头,有内容,并且有明确的错误提示:

我们把注意力集中在502 Bad Gateway上:

这个时候先看nginx中的log:
#1
172.18.0.1 – – [01/Dec/2025:06:49:45 +0000] “OPTIONS /v1/open/knowledge/search-question?tenantId=0 HTTP/1.1” 502 559 “http://dev.hzero.com.cn/” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 Edg/142.0.0.0” “-“

#2

2025/12/01 06:49:45 [error] 32#32: *7 connect() failed (113: No route to host) while connecting to upstream, client: 172.18.0.1, server: aigc.hzero.com.cn, request: “OPTIONS /v1/open/knowledge/search-question?tenantId=0 HTTP/1.1”, upstream: “http://172.18.14.48:8088/v1/open/knowledge/search-question?tenantId=0”, host: “aigc.hzero.com.cn”, referrer: “http://dev.hzero.com.cn/”

#3

172.18.0.1 – – [01/Dec/2025:06:56:17 +0000] “GET / HTTP/1.1” 200 4959 “-” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134” “-“

172.18.0.1 – – [01/Dec/2025:06:56:18 +0000] “GET /adfs/probe HTTP/1.1” 200 4959 “-” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134” “-“

在nginx的日志中,
#1我们看到一条来自客户端 172.18.0.1的options预检请求:

这个172.18.0.1 是我们运行的docker compose网络的网关,也就是运行该docker网络的linux虚拟机的IP地址。

$ docker network inspect hzero-demo | grep -E “Subnet|Gateway”
“Subnet”: “172.18.0.0/16”,
“Gateway”: “172.18.0.1”

   #2这里的upstream指的是上游服务器,说是针对来自172.18.0.1的options预检请求,去链接上游服务器172.18.14.48:8088的时候报错了。这当然会报错,因为不在一个网段内,nginx是运行在容器网络里面的,其自己的IP地址可以看到是:

$ docker inspect –format ‘{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}’ nginx-hzero
172.18.0.2

所以会报bad gateway;

这也就解释了:为什么nginx运行在linux 本机而不是容器内时,不会出问题了。

而 upstream: “http://172.18.14.48:8088/v1/open/knowledge/search-question?tenantId=0″表明nginx把反向代理的配置 hzero-aip-app这个docker容器的服务名错误的

我们来捋一捋:

把这个问豆包,豆包说上游服务器是指具体业务服务,那应该不是172.18.14.48,应该是hzero-aip-app服务乃容器对应的IP才对。

按理说容器内的nginx应该去解析容器服务名hzero-aip-app在容器网络中IP地址,为什么会去解析到容器外的linux主机IP地址?那豆包说了:Nginx 默认不会动态解析服务名(hzero-aip-app),而是在启动时缓存一次 DNS 结果。而 Docker 的服务名解析依赖内置 DNS 服务器(127.0.0.11),若 Nginx 未指定该 DNS,可能会走系统默认 DNS,导致解析错误。

在容器内执行解析命令(用nslookup或ping,若没有nslookup可先装:apt update && apt install dnsutils):

核心修复:给 Nginx 配置「Docker 内置 DNS 解析器」

Nginx 默认不会动态解析服务名(hzero-aip-app),而是在启动时缓存一次 DNS 结果。而 Docker 的服务名解析依赖内置 DNS 服务器(127.0.0.11),若 Nginx 未指定该 DNS,可能会走系统默认 DNS,导致解析错误。

在server块或http块中添加resolver配置,强制 Nginx 使用 Docker 内置 DNS,并设置短缓存(避免解析过时)

    # 核心:添加Docker内置DNS解析器(必须加!)

    resolver 127.0.0.11 valid=60s;  # 127.0.0.11是Docker默认DNS,valid=60s定期刷新解析

resolver_timeout 5s;  # DNS解析超时时间

重启nginx 后问题解决。

回顾:我们之前曾经在windows的hosts文件中添加过对hzero-aip-app的解析,如果碰到异常场景就可能出现这种问题:

异常场景 :Nginx 未配置 resolver(依赖容器默认 DNS)

此时容器内的 Nginx 会使用容器 /etc/resolv.conf 中的 DNS 顺序(优先 127.0.0.11,后备宿主机 DNS):

正常情况下,还是会通过 127.0.0.11 解析到正确的容器 IP,Windows hosts 配置依然无效;

极端情况(比如 Docker 内置 DNS 故障,概率极低):若 127.0.0.11 无法响应,Nginx 会 fallback 到宿主机 DNS;

此时宿主机 DNS 解析 hzero-aip-app 时,会先查询 Windows hosts 文件 —— 如果 hosts 中配置了该域名的映射(如 1.2.3.4),就会返回这个错误 IP,导致 Nginx 代理失败。

但这不是 “冲突”,而是 “配置不规范导致的解析异常”:根源是 Nginx 未显式配置 resolver,而非 hosts 文件和 Docker DNS 的冲突。

问题六、无痕模式下,本地存在代理(VPN)的情况下无法访问:

现象,打开浏览器的无痕模式,访问dev.hzero.com.cn,结果出现:

点继续浏览后,就被阻塞了,死活无法进入下一步,打开检查发现:返回网关错误,去访问什么一个本地的7890端口去了。

元宝分析

根本原因分析:​​

代理端口冲突​(核心原因)

  1. 无痕模式未正确加载代理扩展或配置,导致请求被发送到 127.0.0.1:7890(本地代理端口)
    1. 该端口无活跃代理服务监听,造成网关错误(502)

解决方案:关闭本地系统代理软件。

再次访问,可以继续了。。

问题七、垃圾文件太多的问题

现象:在hzero_hfile.hfle_file表中发现大量的来自接口平台的定时任务的健康检查日志文件,每分钟产生2个文件,所以文件和文件表中的记录就非常多。

看了下定时任务的配置情况:

解决方案:

  1. 在 平台/调度服务/调度管理/调度任务 菜单进入,搜索“接口健康检查”先停掉接口平台健康检查的定期任务。
  2. 执行接口平台日志清理任务:

虽然显示完成了,但去hfle_file表看,并没有清除表中记录:

3、清除调度日志:

但实际只清除了hsdr_job_log表

并没有连带清除 hfle_file表,hfle_file表里面数据没变化.

去平台/开发管理/数据清理/数据清理配置处,执行了平台的数据清理日志和调度日志清理,也没有删除hfle_file表中的日志文件记录:

其他地方找不到系统界面上还有能清除的地方了,那么接下来只能手工清理了:

4、清除文件:在平台/文件管理/文件汇总查询的地方:

查询条件:HITF.HELTH_CHECK, 批量:100条,彻底删除,删除前,先看下minio桶里面的文件:

我看看执行后,是不是minio桶的文件也一并清除了:

实验结果,确实是minio桶的文件也一并被清除了。

不过每次100条,有4万多条要删除,这样删太慢了,接下来,直接删表删文件

select count(1) from hzero_file.hfle_file a where a.directory =’hsdr01/’ and a.file_name like ‘HITF.HEALTH_CHECK%’

–38890 条;

select count(1) from hzero_file.hfle_file a where a.directory =’hsdr01/’ 

–38891 条;

也就是说,目前调度任务日志都是接口平台的健康检查日志,所以一会儿去minio桶里头删除文件的时候,可以把hsdr01/0/MINO目录下的文件全部删除:

执行:

  1. 数据库记录删除:delete from hzero_file.hfle_file a where a.directory =’hsdr01/’ 
  2. MINO桶文件删除:进入hz-hsdr/hsdr01/0/MINIO目录,全选文件,然后点删除。

删除完成发现:hsdr01目录及其所有子目录都被删除掉了

这下OK了,只有100多个真正有用的文件记录了。

后续处理:

在 平台/调度服务/请求定义

找到接口平台健康检查,日志策略改成:仅记录异常。

但实际上这样还不够,直接禁用掉才行

这里禁用也不够,需要在调度服务/调度管理/调度任务 把接口平台的健康检查任务的自动初始化关掉:编辑,把“自动初始化”去掉,否则每次调度服务重启,会自动把这个终止的任务拉起来,而且还会把日志策略初始化成“全量记录”。

注意只有在启用状态才能编辑,非启用状态只能看详情,需要重启调度服务,才能回到启用状态,然后进行编辑。

备注(2025/12/09): 最近rebuild更新了hzero-file服务的jar包,发现清除调度日志的时候已经可以把相关联文件一起删除掉了。

问题八、文件在线编辑不能保存的问题

打开文件编辑之后,修改后点【保存并关闭】按钮后,界面没有提示信息,但后台hzero-file服务有错误日志,保存未成功。

后台日志关键错误信息是:

2025-12-08T10:31:17.514+08:00 ERROR 1 — [hzero-file] [ XNIO-1 task-2] .h.s.f.s.i.OnlyOfficeFeedBackServiceImpl : only office update text failed, callback : OnlyOfficeCallbackDTO{url=’http://onlyoffice-hzero:8800/cache/files/data/17651609109511b5aeb2_351/output.docx/output.docx?md5=1NJT1GsXAaXy9lv1ilKyVw&expires=1765161978&shardkey=17651609109511b5aeb2&filename=output.docx’, key=’17651609109511b5aeb2′, changesurl=’http://onlyoffice-hzero:8800/cache/files/data/17651609109511b5aeb2_351/changes.zip/changes.zip?md5=bK5BsAXe1FWgHbQ6muCZhw&expires=1765161978&shardkey=17651609109511b5aeb2&filename=changes.zip’, users=[2], status=2, notmodified=false} and key : 17651609109511b5aeb2

分析:该日志显示onlyoffice 通过回调API让hzero-file服务去系在onlyoffice缓存中更新后的文件时出错了。

onlyoffice容器日志也有对应的详细错误信息:

日志发给元宝分析,支持下载失败几种可能性,逐一分析:

1、网络连接问题:hzero-file的url api可以获得onlyoffice提供的编辑页面,说明网络连接没问题。

2、安全令牌(JWT)错误:我已经禁用了JWT验证,不是这个原因。

3、回调接口和逻辑是否有问题:hzero-file服务的jar包 和 onlyoffice的版本,docker-compose.yml中的配置跟非全容器环境是一样的,在非全容器环境是可以正常保存的,所以这种原因也排除掉。

4、文件路径或权限问题:OnlyOffice 服务端生成的用于更新的文件临时路径不正确,或 hzero-file 服务没有权限访问该路径,这个要仔细查一下:

我能想到的就是,挂载出来的文件目录权限是否足够,还有就是default.json中除了允许privateIP ,是否还要运行metaIP?

有个差别是我看了当初构建全容器环境的onlyoffice的挂载目录的时候是手工新建的挂载目录结构,但非全容器环境的话目录结构是容器启动时自动生成的,嗯,先尝试把原来目录结构删除掉,重启容器让目录结构也自动生成:

$ cd /d01/hzero-dockers/onlyoffice-docker

$ docker compose down

$ rm -rf /d01/hzero-dockers/volumes/onlyoffice/DocumentServer

#先注释掉docker-compose.yml中的default.json的挂载

$ docker compose up -d

#查看:相关挂载目录已经自动生成

#把default.json拷贝出来

$ docker cp onlyoffice-hzero:/etc/onlyoffice/documentserver/default.json ../volumes/onlyoffice/DocumentServer/

#更改default.json中的设置:”allowPrivateIPAddress”: false

#去掉docker-compose.yml中的default.json的挂载的注释

#重启onlyoffice容器

再次测试文件在线编辑功能,结果问题依旧,看起来不是这个原因。想到安全策略应该是优先被排查的原因,尝试把default.json中的 allowMetaIPAddress 设置为 true ,重启容器再试,结果问题依旧。看来也不是这个配置问题。

把hzero-file服务日志中的错误的文件下来连接地址,在hzero-file容器中直接访问:

# curl -v http://onlyoffice-hzero:8800/cache/files/data/176516391613405bf89d_852/output.docx/output.docx?md5=f9DLPCl-LnrOZBDQ3XcySA&expires=1765165594&shardkey=176516391613405bf89d&filename=output.docx

# *   Trying 172.18.0.9:8800…

* connect to 172.18.0.9 port 8800 failed: Connection refused

* Failed to connect to onlyoffice-hzero port 8800 after 0 ms: Connection refused

* Closing connection 0

#发现居然被拒绝了,想到之前在搜default.json中的private字符串时还有个参数:blockPrivateIP 默认是true, 尝试改成: “blockPrivateIP”: false, 重启onlyoffice容器, 再测试:问题依旧。

突然发现自己傻了,8800是onlyoffice容器外访问的端口,容器网络内应该是80端口,所以对于docker网络内的hzero-file服务也要也要跟容器外实现统一8800端口访问的话,需要更改onlyoffice的nginx端口,从80改成8800端口。

那为什么在hzero-file的application.yml中配置的是8800端口,前端可以成功打开编辑文件呢?也就是成功访问了onlyoffice-hzero:8800呢? 答:那个场景中,hzero-file的API接口 url 只是把onlyoffice-hzero:8800当做拼接字符串的一部分,拼接完成后返回给前端浏览器,真正访问这个地址的是前端浏览器,这是在容器外访问的。跟这里场景不一样,这里回调的时候是hzero-file容器真的要去访问这个地址的。

尝试像以前一样,把容器内的服务的web端口 从默认80改成跟对外映射一样的8800:

备注:这种更改对于简单的Nginx服务很容易,但对于onlyoffice这样的应用未必有用,如果官方未提供更改方法,其配置和规则设置比较多的话,就不一定能改成功了,只能试一试

=======试验开始===============

$ cd /d01/hzero-dockers/onlyoffice-docker

$ docker cp onlyoffice-hzero:/etc/onlyoffice/documentserver/nginx/ds.conf ../volumes/onlyoffice/DocumentServer/

#更改端口为8800

  listen 0.0.0.0:8800;

  listen [::]:8800 default_server;

保存,挂载

– ${DOCKER_VOLUME_DIRECTORY:-../volumes}/onlyoffice/DocumentServer/ds.conf:/etc/onlyoffice/documentserver/nginx/ds.conf

端口映射也改成:

    ports:

      – “8800:8800”

重启onlyoffice容器,再测试: 这次报了个不能下载的错误:

Hzero-file后台服务日志没有错误,onlyoffice 容器日志没有对应的错误

请求 URL 是http://onlyoffice-hzero:8800/…,而onlyoffice-hzero这个域名被解析成了172.18.14.48(这是 OnlyOffice 服务对应的容器的实际 IP),8800是该服务监听的端口。所以 “远程地址 172.18.14.48:8800” 就是你这次请求要连接的目标服务端(OnlyOffice 服务)的 IP 和端口

这没有错,对于浏览器来说,他是在容器网络外的。

对于更改onlyoffice Nginx端口这个事,豆包的分析是:

把 OnlyOffice 的 Web 端口从 80 改成 8800本身不会直接导致 403 错误,但如果端口修改时未同步更新所有相关配置,会间接引发 403(核心是「签名验证 / URL 匹配失败」),具体原因如下:

1. 最可能的原因:签名生成时的端口不匹配

OnlyOffice 缓存文件的md5签名是基于 ** 完整请求 URL(含端口)** 生成的(比如生成签名时会包含http://onlyoffice-hzero:80/…)。

若你仅修改了访问端口为 8800,但:

OnlyOffice 服务端验证签名时,会用实际请求的 URL(http://onlyoffice-hzero:8800/…)重新计算签名。

此时「生成签名的 URL(带 80)」和「实际请求的 URL(带 8800)」不一致,导致md5验证失败,直接返回 403。

这个要访问的edit.bin可以在缓存文件中看到:

那这种情况就要清缓存

# rm -rf /var/lib/onlyoffice/*

# rm -rf /var/cache/nginx/*

继续测试:

这个错误应该是onlyoffice报的错,在hzero-file服务日志和onlyoffice的容器日志中都没有错误信息。

这样,把onlyoffice容器重置一下,再试验:

先把default.json 和 ds.conf 拷贝到 d01\hzero-dockers\volumes\onlyoffice

更改docker-compose.yml的挂载位置:

    volumes:

      – ${DOCKER_VOLUME_DIRECTORY:-../volumes}/onlyoffice/default.json:/etc/onlyoffice/documentserver/default.json

      – ${DOCKER_VOLUME_DIRECTORY:-../volumes}/onlyoffice/ds.conf:/etc/onlyoffice/documentserver/nginx/ds.conf

然后删除 d01\hzero-dockers\volumes\onlyoffice\Documentserver目录

然后重启onlyoffice容器

再次测试依然是 “打开文件时发生错误”, 看起来清缓存解决不了这个问题。

那按照元宝的说法,可能是我这种更改nginx端口的方法不对。

多次实验发现,ds.conf 这个文件不能挂载,挂载会导致混乱,而且在onlyoffice容器启动的时候,提示简历这位文件的软连接失败。

去掉这个挂载以后就可以回到成功打开文件编辑,只是保存失败的问题。

===========试验结束==================

上面的试验表明想通过更改nginx配置的方式来更改onlyoffice容器的web端口从原来的80改为8800,也不可行:onlyoffice的内部各种规则配置有点复杂,不是简单改一个Nginx配置的地方就能无故障使用。

那只能用其他方法绕了,绕的前提是不用为容器环境和非容器环境分别打包jar, 那么可以通过docker-compose.yml配置环境变量的方法,在纯容器环境的docker-compose.yml中,针对回调地址通过extra host 在hzero-file服务的容器内强行把onlyoffice-hzero解析到host机,从host机的8800端口访问,测试也不行,找不到路由。

忽然灵机一动,是不是可以通过反向代理搞定?

我们来捋一捋:

目的:容器内外通过统一域名端口访问onlyoffice的80端口

此图发给豆包,豆包基本明白我的意思,描述基本正确,漏了几点:

你漏了几点:

1、部署了3个容器,除了你说的两个,还有一个nginx容器

2、在nginx容器里面做了反向代理,把onlyoffice.hzero.com.cn 反向代理到dokcer网络内的onlyoffice容器的80端口

我要实现的目的是:在容器网络外的浏览器 和通过docker 网络内的hzero-file容器内都可以通过统一的域名onlyoffice-hzero.com.cn:80来访问 docker 网络内的onlyoffice的80端口。

你觉得我能实现目的吗?

豆包说能:

访问端访问地址实际路由链路
容器内 hzero-fileonlyoffice.hzero.com.cn:80hzero-file → hzero-demo 网络 → Docker DNS 解析别名 → onlyoffice 容器 80(无 nginx 中转)
容器外浏览器onlyoffice.hzero.com.cn:80浏览器 → Linux 宿主机 80 → nginx 容器 80 → 反向代理 → onlyoffice 容器 80

修改点:

  1. hzero-file 的application.yml配置中
  2. doc-server-url 设置成onlyoffice.hzero.com.cn(80端口默认可以省略掉)
  3. onlyoffice容器增加别名:onlyoffice.hzero.com.cn

    networks:

      hzero-demo:

        aliases:

          – onlyoffice.hzero.com.cn  # 配置你要的域名别名(核心)

  • Windows Host中增加解析:172.18.14.48 onlyoffice.hzero.com.cn(如果不是本地demo环境,是企业内网,在内部DNS中添加此解析)
  • nginx容器增加反向代理配置:

server {

    listen 80;

    server_name onlyoffice.hzero.com.cn;  # 匹配统一域名

    # 反向代理到Docker网络内的onlyoffice容器80端口(直接用别名)

    location / {

        proxy_pass http://onlyoffice.hzero.com.cn:80;  # 直接指向onlyoffice容器别名

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_connect_timeout 300s;

        proxy_send_timeout 300s;

        proxy_read_timeout 300s;

    }

}

改完后再次运行测试:

查看nginx容器日志:

2025/12/09 05:10:26 [error] 37#37: *15 connect() failed (113: No route to host) while connecting to upstream, client: 172.18.0.1, server: onlyoffice.hzero.com.cn, request: “GET /web-apps/apps/api/documents/api.js HTTP/1.1”, upstream: “http://172.18.14.48:80/web-apps/apps/api/documents/api.js”, host: “onlyoffice.hzero.com.cn”, referrer: “http://dev.hzero.com.cn/”

看起来容器内的nginx把onlyoffice.hzero.com.cn的IP地址解析错误了,应该解析到docker网络内的IP地址而不是host主机地址。为避免混淆,直接更改nginx的方向代理配置:直接用onlyoffice-hzero的容器服务名,不用别名

server {

    listen 80;

    server_name onlyoffice.hzero.com.cn;  # 匹配统一域名

    # 反向代理到Docker网络内的onlyoffice容器80端口(直接用别名)

    location / {

        proxy_pass http://onlyoffice-hzero:80;  # 直接指向onlyoffice容器服务名

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_connect_timeout 300s;

        proxy_send_timeout 300s;

        proxy_read_timeout 300s;

    }

}

这次可以正常打开了:

修改后保存,看hzero-file的后台服务日志,已经成功,在更新表了:

下载打开该文件可以看到,更新已经生效:

问题九、如何让配置管理更清晰?

关于文件服务,我决定做些优化,让配置管理更清晰:

一、Minio文件服务:

  1. 在平台/文件管理/文件存储配置/MINIO 处,EndPoint还是改成:oss.hzero.com.cn:9000
  2. 容器服务minio-hzero添加别名:oss.hzero.com.cn
  3. Windows hosts 文件添域名解析:172.18.14.48  oss.hzero.com.cn              #minio 文件服务域名(客户端直接预览PDF需要),去掉对minio-hzero名称的解析。
  4. 修数据:

文档地址

UPDATE hzero_aip.hdoc_document_version SET document_url = REPLACE(document_url, ‘minio-hzero:9000′,’oss.hzero.com.cn:9000’ );

UPDATE hzero_aip.hdoc_document_version SET source_key = REPLACE(source_key, ‘minio-hzero:9000′,’oss.hzero.com.cn:9000’ )

文件地址:

update hzero_file.hfle_file set file_url=REPLACE(file_url, ‘minio-hzero:9000′,’oss.hzero.com.cn:9000’ )

  • kkfielview文件预览服务:
  • 容器服务kkfileview-hzero添加别名:kkv.hzero.com.cn

   之前添加的extra_hosts可以去掉了。

  • Windows hosts 文件添域名解析:172.18.14.48  kkv.hzero.com.cn              # 文件预览服务域名。
  • 更改hzero-file文件服务的application.yml :    

kk-file-view-url: http://kkv.hzero.com.cn:8012/onlinePreview   # kkFileView的文件预览地址

重新构建hzero-file jar包和docker镜像
重启hzero-file服务。

这修改之后,客户端window hosts文件就保留6条解析,别的不用了:
172.18.14.48  dev.hzero.com.cn         #hzero-demo环境 Nginx服务器地址

172.18.14.48  gateway.hzero.com.cn     #网关的地址

172.18.14.48  aigc.hzero.com.cn        # ai-app服务的反向代理

172.18.14.48  kkv.hzero.com.cn        # kkfileview文件预览服务域名

172.18.14.48  oss.hzero.com.cn        # minio文件服务域名(客户端直接预览PDF需要)

172.18.14.48  onlyoffice.hzero.com.cn   # minio 文档在线编辑服务

HZERO PaaS平台-Docker版demo笔记(二)Docker版测试 问题1-4

#启动AI平台的所有容器:

$ bash start-all-dockers-h0base.sh*

$ bash start-ai-part-dockers.sh*

AI平台包括了中间件容器8个,H0基础开发平台服务15个,流程平台服务1个,AI平台服务4个.  其中需要在注册中心出现的java服务是17个(注册中心自己除外)。

全部容器启动完成时间大约10分钟

问题一、启动后去有三个服务成功在注册中心出现:

http://localhost:8000注册中心看服务启动情况,发下三个服务没出现:

1、hzero-schedule

看 hzero-gateway的容器日志

有条错误信息是:Caused by: java.net.UnknownHostException: db.hzero.com.cn: Name or service not known

按理不应该再有访问 db.hzero.com.cn 这个地址的,应该是mysql-hzero才对。

估计是容器中的jar包是老的,没有更新过的。

解决方案:

重新构建jar包,重新构建docker镜像。

#源环境(ubuntu-22.04-hzero)构建jar包:

$ cd /d02/hzero/project/ps-scheduler/

$ bash build.sh

#拷贝Jar包到目标环境

#在windows powershell 中执行

$ cp \\wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-scheduler\target\ps-scheduler.jar \\wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-scheduler-docker\

#目标环境(ubuntu-22.04)构建docker镜像

$ cd /d01/hzero-dockers/hzero-scheduler-docker

$ docker compose down

$ docker build -t hzero-scheduler-jk-demo:1.12 .

$ docker compose up -d

结果:问题解决,再注册中心可见hzero-scheduler.

2、hzero-massage

看hzero-massage的容器日志:

有条错误信息:Caused by: java.net.UnknownHostException: db.hzero.com.cn: Name or service not known

按理不应该再有访问 redis.hzero.com.cn 这个地址的,应该是redis-hzero才对。

估计是容器中的jar包是老的,没有更新过的。

解决方案:

重新构建jar包,重新构建docker镜像。

#源环境:

$ cd /d02/hzero/project/ps-message/

$ bash build.sh

#Windows PowShell:

cp \\wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-message\target\ps-message.jar \\wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-message-docker\

#目标环境:

$ cd /d01/hzero-dockers/hzero-message-docker

$ docker compose down

$ docker build -t hzero-message-jk-demo:1.12 .

$ docker compose up -d

结果:问题解决,再注册中心可见hzero-massage.

3、hzero-gateway

看 hzero-gateway的容器日志

有条错误信息是:Caused by: io.lettuce.core.RedisConnectionException: Unable to connect to redis.hzero.com.cn/<unresolved>:6379

分析:

按理不应该再有访问 redis.hzero.com.cn 这个地址的,应该是redis-hzero才对。

估计是容器中的jar包是老的,没有更新过的。

解决方案:

重新构建jar包,重新构建docker镜像。

结果:问题解决,再注册中心可见hzero-gateway.

解决完上述问题后,在注册中心出现的服务是17个;

好,接下来,我们进入系统,测试,首先要进入系统把AIGC平台中neo4j图数据库地址,、默认向量库elasticsearch的地址、文件管理minio的地址换掉。

这里默认图数据库neo4j的地址换成容器服务名

这里默认向量库elasticsearch的地址换成容器服务名

注意minio配置这个地方:

Endpoint:应用与 MinIO 在同一 Docker 网络时,用容器服务名;否则用宿主机 IP + 端口。

代理地址:必须用外部可访问的地址(宿主机 IP / 域名 / 代理地址),不能用容器服务名。

问题二、登录问题:

首次进入dev.hzero.com.cn 会重定向到登录页面,登录页面地址错误:

分析:

这是我们在之前为容器中运行的oauth服务的application.yml中配置的地址, 看起来这个配置应该用外面的网关域名,不能用容器网络内的容器服务名,因为这个其实相当于定义一个变量返回,而不是真的要oauth服务去调用这个网关。

动作:
hzero-oauth服务的application.yml中

    # oauth 服务基础地址

base-url: ${HZERO_OAUTH_BASE_URL:http://hzero-gateway:8080/oauth}

更改为:

base-url: ${HZERO_OAUTH_BASE_URL:http://gateway.hzero.com.cn:8080/oauth}

重新构建, 重起服务。

结果:可以正常进入登录页面了。问题解决。

问题三、文档预览问题

背景:文件服务minio和 文件预览服务kkfielview原来直接安装在linux Host机上,后来都迁移到docker compose容器内运行了。

迁移后测试:PDF文件可以正常预览:

word和PPT文件预览会报错:

分析:前端检查:

前端会直接去用file服务的application.yml中配置的文件预览URL , 由于都改到容器内运行,所以之前把这个预览地址的URL也改成kkfileview的容器服务名开头了,但这个服务名在容器网络外是无法解析的。

解决方案:在文件服务的application.yml配置中把kk-file-view-url的域名从容器服务名改成容器外能访问的域名:kkv.hzero.com.cn

修改前:kk-file-view-url: http://kkfileview-hzero:8012/onlinePreview   # kkFileView的文件预览地址

修改后:kk-file-view-url: http://dev.hzero.com.cn:8012/onlinePreview   # kkFileView的文件预览地址。

然后重新构建jar,Docke镜像,重启容器。再测,这次kkfileview的URL没问题了,但内容显示404,看浏览器检查网络没有错误信息:

看kkfileview容器日志:

文件下载失败,url:

http://oss.hzero.com.cn:9000/hz-haip/haip01/0/MINIO/b53c59a8e17b4a828b201a649d488f45%40%E8%BD%AF%E4%BB%B6%E6%8E%88%E6%9D%83%E8%AF%81%E6%98%8E.docx

这个文件URL是文档表中存储的文件地址,oss.hzero.com.cn是之前minio服务直接装在host机上时配置的访问域名。所以之前存储的文档地址都是这个域名开开头的,但现在minio改成容器内服务了,以后所有的文档都会以minio的容器服务名开头了,但历史数据还是之前的域名,现在因为kkfileview文件预览服务也在容器内运行,所以无法解析oss.hzero.com.cn这个域名;

解决方案:

更改数据库表中文档url的域名地址为minio的容器服务名:

UPDATE hzero_aip.hdoc_document_version

SET document_url = REPLACE(document_url, ‘oss.hzero.com.cn’, ‘minio-hzero’)

WHERE document_id = 4;

再次测试,可以正常预览了:

kkfileview容器日志也显示正常访问:

2025-11-28 06:06:36.449 INFO 1 — [tp1224347463-48] c.k.w.c.OnlinePreviewController : 预览文件url:

http://minio-hzero:9000/hz-haip/haip01/0/MINIO/b53c59a8e17b4a828b201a649d488f45@软件授权证明.docx,previewType:OFFICE

不过这带来另一个问题就是PDF文件因为不经过kkfileview,直接显示,而且是直接用数据库中存储的URL显示,也没有把文件服务的容器服务名替换成代理地址的域名,所以就反而显示不出来了,解决方案感觉应该前端处理时,如果不调用预览服务进行显示,那么是否也应该把从后端获得的文件URL地址中的域名部分替换成文件服务的代理地址再进行显示? 这样就不会错了。

我在nginx配置反向代理:

# oss.hzero.com.cn  minio服务的反向代理

server {

    listen 80;

    server_name oss.hzero.com.cn;

    location / {

        # 改为后端服务实际IP:端口

        proxy_pass http://minio-hzero:9000;  # 示例:minio-hzero的9000端口

        proxy_set_header Upgrade $http_upgrade;

        proxy_set_header Connection “upgrade”;

        proxy_set_header Host $host;  # 保留一个Host配置

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_buffering off;  # 按需开启/关闭(实时交互场景建议关闭)

    }    

重启nginx容器服务

Windows Hosts中配置oss.hzero.com.cn的DNS解析;

我们来看,如果前端执行了代理地址替换:

替换后的地址访问就是OK的:

备注:这个反向代理仅用于临时测试,测试完成后删除掉。

这个问题,产研说会在下个PI中解决掉,就是走代理,只是这个代理是在文件服务中写的,也是解决浏览器不能访问服务器内网Endpoint地址的情况。以前是要求Endpoint内外网能能访问到,解决这个问题之后可以允许Endpoint只能内网访问。

临时解决方案:

1、修数据:文档地址

UPDATE hzero_aip.hdoc_document_version

SET document_url = REPLACE(document_url, ‘oss.hzero.com.cn:9000’, ‘minio-hzero:9000’)

;

UPDATE hzero_aip.hdoc_document_version

SET source_key = REPLACE(source_key, ‘oss.hzero.com.cn:9000’, ‘minio-hzero:9000’)

;

  • windows的hosts中添加解析

172.18.14.48  minio-hzero

个人Demo使用问题暂时解决。

不过这并不稳定,第二天重启服务之后,发现docx 文档预览就不行了:

经过测试从文件服务API :signedURL 返回的负载,响应,预览内容都是正确的,把这返回直接在浏览器访问是可以下载文件的。

但是到了调用kkfileview 去预览的时候出错了:

把这个kkfileView的响应中的URL是:

http://minio-hzero:9000/hz-haip/haip01/0/MINIO/ca310b2e73b94fd1a47a29c6e13bcb5a%40%E4%B8%8A%E6%B5%B7%E7%9B%8A%E5%90%89-%E4%BD%8E%E4%BB%A3%E7%A0%81%E5%B9%B3%E5%8F%B0%E5%BA%94%E7%94%A8%E6%88%90%E5%8A%9F%E6%A1%88%E4%BE%8B.docx?response-content-disposition=attachment;filename*=UTF-8%27%27%E4%B8%8A%E6%B5%B7%E7%9B%8A%E5%90%89-%E4%BD%8E%E4%BB%A3%E7%A0%81%E5%B9%B3%E5%8F%B0%E5%BA%94%E7%94%A8%E6%88%90%E5%8A%9F%E6%A1%88%E4%BE%8B.docx&response-cache-control=must-revalidate,%20post-check=0,%20pre-check=0&response-expires=1764593862292&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=hzero.admin/20251201/us-east-1/s3/aws4_request&X-Amz-Date=20251201T125741Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=e016d6aa9b52dbeac9a7b98f6680fed6e0a467db4d0c233e673b435ca8883b5f

直接访问这个URL返回:

<Error>

<Code>InvalidRequest</Code>

<Message>The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.</Message>

<Resource>/hz-haip/haip01/0/MINIO/ca310b2e73b94fd1a47a29c6e13bcb5a@上海益吉-低代码平台应用成功案例.docx</Resource>

<RequestId>187D19B0939102B8</RequestId>

<HostId>dd9025bab4ad464b049177c95eb6ebf374d3b3fd1af9251148b658df7ac2e3e8</HostId>

</Error>

这就很奇怪,kkfileview 提交给minio的请求为啥要加 .docx?后面那段内容呢?这段内容不加一点问题都没有,加了反而有问题。

解决方案(按优先级排序,从简单到复杂)

核心思路:让 kkfileview 使用的 URL「参数与签名时完全一致」,避免新增参数导致签名失效。

方案 1:禁止 kkfileview 修改原始 URL(最快生效)

kkfileview 新增参数是可配置的,通过关闭「URL 重写」或「参数追加」功能,让它直接转发文件服务返回的 signedURL,不做任何修改。

操作步骤(kkfileview 配置):

找到 kkfileview 的配置文件(通常是 application.properties 或 application.yml);

添加 / 修改以下配置,禁用参数追加和 URL 重写:

properties

# 禁用自动添加 response-content-disposition 参数(关键)

keking.file.preview.add.response.content.disposition=false

# 禁用 URL 重写(避免修改原始 URL)

keking.file.preview.url.rewrite.enabled=false

# 禁用缓存控制参数追加

keking.file.preview.add.response.cache.control=false

执行:把容器kkfileview-hzero

的配置文件:/opt/kkFileView-4.1.0/config/application.properties 挂载出来

$ cd /d01/hzero-dockers/volumes

$ mkdir kkfileview

拷贝命令:

$ docker cp kkfileview-hzero:/opt/kkFileView-4.1.0/config/application.properties /d01/hzero-dockers/volumes/kkfileview/

更改文件权限:

sudo chown -R root:root /d01/hzero-dockers/volumes/kkfileview

sudo chmod -R 755 /d01/hzero-dockers/volumes/kkfileview  

Docker-compose.yml中添加:

    volumes:

      – ${DOCKER_VOLUME_DIRECTORY:-../volumes}/kkfileview/application.properties:/opt/kkFileView-4.1.0/config/application.properties

添加配置后,重启容器,

重启 kkfileview 服务,测试预览是否正常:

结果还是一样,文件名后加签的内容依然存在,看起来不是kkfileview加签的,应该是aip-app服务的开发者加签的,找下产品组…

产品组反馈,是他们加签的,就是应对文件是要授权(登录)才能访问的情况,这个地址是文件加签后的地址,可以直接通过加签后的地址去访问文件。

但是加签的内容在这个场景中被minio认为格式有问题,存在无效的分割符。奇怪的是如果不是在容器环境,是不会报错的,文件名也是经过加签的。

测试:

#第一步:配置 mc 别名(关联 MinIO 实例,关键!)

sh-5.1$ mc alias set my-minio http://minio-hzero:9000 hzero.admin hzero.hand.2020.

Added `my-minio` successfully.

#第二步:验证文件是否存在(避免路径 / 文件名错误)

sh-5.1$ mc ls ‘my-minio/hz-haip/haip01/0/MINIO/ca310b2e73b94fd1a47a29c6e13bcb5a@上海益吉-低代码平台应用成功案例.docx’

[2025-11-30 07:52:51 UTC] 1.3MiB STANDARD ca310b2e73b94fd1a47a29c6e13bcb5a@上海益吉-低代码平台应用成功案例.docx

#第三步:生成加签下载 URL(有效期 1 小时)

sh-5.1$ mc share download ‘my-minio/hz-haip/haip01/0/MINIO/ca310b2e73b94fd1a47a29c6e13bcb5a@上海益吉-低代码平台应用成功案例.docx’ –expire 1h

URL: http://minio-hzero:9000/hz-haip/haip01/0/MINIO/ca310b2e73b94fd1a47a29c6e13bcb5a@上海益吉-低代码平台应用成功案例.docx

Expire: 1 hours 0 minutes 0 seconds

Share: http://minio-hzero:9000/hz-haip/haip01/0/MINIO/ca310b2e73b94fd1a47a29c6e13bcb5a%40%E4%B8%8A%E6%B5%B7%E7%9B%8A%E5%90%89-%E4%BD%8E%E4%BB%A3%E7%A0%81%E5%B9%B3%E5%8F%B0%E5%BA%94%E7%94%A8%E6%88%90%E5%8A%9F%E6%A1%88%E4%BE%8B.docx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=hzero.admin%2F20251202%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251202T054304Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=f2ef45fef57367c86003e28c5185c80fc122d35bbf0d57b3763c91e9c347e08f

#第四步:测试加签 URL 是否有效(kkfileview容器内 curl 测试)

# curl -v -o /tmp/test-mc-sign.docx “http://minio-hzero:9000/hz-haip/haip01/0/MINIO/ca310b2e73b94fd1a47a29c6e13bcb5a%40%E4%B8%8A%E6%B5%B7%E7%9B%8A%E5%90%89-%E4%BD%8E%E4%BB%A3%E7%A0%81%E5%B9%B3%E5%8F%B0%E5%BA%94%E7%94%A8%E6%88%90%E5%8A%9F%E6%A1%88%E4%BE%8B.docx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=hzero.admin%2F20251202%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251202T054304Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=f2ef45fef57367c86003e28c5185c80fc122d35bbf0d57b3763c91e9c347e08f”

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 –:–:– –:–:– –:–:–     0*   Trying 172.18.0.7:9000…

* TCP_NODELAY set

* Connected to minio-hzero (172.18.0.7) port 9000 (#0)

> GET /hz-haip/haip01/0/MINIO/ca310b2e73b94fd1a47a29c6e13bcb5a%40%E4%B8%8A%E6%B5%B7%E7%9B%8A%E5%90%89-%E4%BD%8E%E4%BB%A3%E7%A0%81%E5%B9%B3%E5%8F%B0%E5%BA%94%E7%94%A8%E6%88%90%E5%8A%9F%E6%A1%88%E4%BE%8B.docx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=hzero.admin%2F20251202%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251202T054304Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=f2ef45fef57367c86003e28c5185c80fc122d35bbf0d57b3763c91e9c347e08f HTTP/1.1

> Host: minio-hzero:9000

> User-Agent: curl/7.68.0

> Accept: */*

>

* Mark bundle as not supporting multiuse

< HTTP/1.1 200 OK

< Accept-Ranges: bytes

< Content-Length: 1409842

< Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document

< ETag: “612676ff41515da42d52f09b2bcfcbeb”

< Last-Modified: Sun, 30 Nov 2025 07:52:51 GMT

< Server: MinIO

< Strict-Transport-Security: max-age=31536000; includeSubDomains

< Vary: Origin

< Vary: Accept-Encoding

< X-Amz-Id-2: dd9025bab4ad464b049177c95eb6ebf374d3b3fd1af9251148b658df7ac2e3e8

< X-Amz-Request-Id: 187D4FBB94215DED

< X-Content-Type-Options: nosniff

< X-Ratelimit-Limit: 8421

< X-Ratelimit-Remaining: 8421

< X-Xss-Protection: 1; mode=block

< Date: Tue, 02 Dec 2025 05:44:56 GMT

<

{ [3468 bytes data]

100 1376k  100 1376k    0     0   168M      0 –:–:– –:–:– –:–:–  168M

* Connection #0 to host minio-hzero left intact

#

豆包分析:

https://www.doubao.com/thread/w75a47efaadfddcb0

豆包结论:所有环境(MinIO 容器、kkfileview 容器、网络、权限)都正常!问题 100% 出在 AIP-App 生成的加签 URL 上!

但实际上我直接在非容器环境运行是没有问题的,所以按理说也不应该是生成的加签URL的问题。是不是我哪里配置还是有问题?

跟产品组沟通,让在kkfileview容器中直接wget 平台生成的加签的URL:

# wget “http://minio-hzero:9000/hz-haip/haip01/0/MINIO/ca310b2e73b94fd1a47a29c6e13bcb5a%40%E4%B8%8A%E6%B5%B7%E7%9B%8A%E5%90%89-%E4%BD%8E%E4%BB%A3%E7%A0%81%E5%B9%B3%E5%8F%B0%E5%BA%94%E7%94%A8%E6%88%90%E5%8A%9F%E6%A1%88%E4%BE%8B.docx?response-content-disposition=attachment;filename*=UTF-8”%E4%B8%8A%E6%B5%B7%E7%9B%8A%E5%90%89-%E4%BD%8E%E4%BB%A3%E7%A0%81%E5%B9%B3%E5%8F%B0%E5%BA%94%E7%94%A8%E6%88%90%E5%8A%9F%E6%A1%88%E4%BE%8B.docx&response-cache-control=must-revalidate,%20post-check=0,%20pre-check=0&response-expires=1764657679219&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=hzero.admin/20251202/us-east-1/s3/aws4_request&X-Amz-Date=20251202T064118Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=c8c2c8dd43a7971e46a4743b138717e9fbc03421b5ad0e49c48dfdb998b5692c”

The name is too long, 549 chars total.

Trying to shorten…

New name is ca310b2e73b94fd1a47a29c6e13bcb5a@上海益吉-低代码平台应用成功案例.docx?response-content-disposition=attachment;filename*=UTF-8”上海益吉-低代码平台应用成功案例.docx&response-cache-control=must-revalidate, po.

–2025-12-02 15:05:37–  http://minio-hzero:9000/hz-haip/haip01/0/MINIO/ca310b2e73b94fd1a47a29c6e13bcb5a%40%E4%B8%8A%E6%B5%B7%E7%9B%8A%E5%90%89-%E4%BD%8E%E4%BB%A3%E7%A0%81%E5%B9%B3%E5%8F%B0%E5%BA%94%E7%94%A8%E6%88%90%E5%8A%9F%E6%A1%88%E4%BE%8B.docx?response-content-disposition=attachment;filename*=UTF-8”%E4%B8%8A%E6%B5%B7%E7%9B%8A%E5%90%89-%E4%BD%8E%E4%BB%A3%E7%A0%81%E5%B9%B3%E5%8F%B0%E5%BA%94%E7%94%A8%E6%88%90%E5%8A%9F%E6%A1%88%E4%BE%8B.docx&response-cache-control=must-revalidate,%20post-check=0,%20pre-check=0&response-expires=1764657679219&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=hzero.admin/20251202/us-east-1/s3/aws4_request&X-Amz-Date=20251202T064118Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=c8c2c8dd43a7971e46a4743b138717e9fbc03421b5ad0e49c48dfdb998b5692c

正在解析主机 minio-hzero (minio-hzero)… 172.18.0.7

正在连接 minio-hzero (minio-hzero)|172.18.0.7|:9000… 已连接。

已发出 HTTP 请求,正在等待回应… 400 Bad Request

2025-12-02 15:05:37 错误 400:Bad Request。

一样的,也是返回400 错误。

然后让试试kkfileview本地上传这个docx文件试试,看看是否能正常预览,本地上传后预览报错:

查日志:

解决方案:

把 /etc/hosts 文件挂载出去

添加dev.hzero.com.cn 的本地解析:

拷贝命令:

$ docker cp kkfileview-hzero:/etc/hosts /d01/hzero-dockers/volumes/kkfileview/

更改文件权限:

sudo chown -R root:root /d01/hzero-dockers/volumes/kkfileview

sudo chmod -R 755 /d01/hzero-dockers/volumes/kkfileview  

Docker-compose.yml中添加:

    volumes:

      – ${DOCKER_VOLUME_DIRECTORY:-../volumes}/kkfileview/hosts:/etc/hosts

添加配置后,重启容器,再测试,本地上传文件预览就OK了:

上面这个办法太复杂,有更简单的,不用这么麻烦,不用挂载host文件,直接在容器服务的docker-compose.yml中 添加extra_hosts解析即可。

    extra_hosts:

     – “dev.hzero.com.cn:127.0.0.1”  # 自定义域名 → 局域网服务IP

所以文件格式没问题,是可以被预览的,问题还是回到encode的地方,我们把平台生成的URL的后半部分在encode 一次,可以正常访问。

所以最终结论就是:程序处理里面需要把后半部分再encode一次。

那为啥之前非容器环境预览没问题呢?我特意查了非容器环境kkfileview的日志:发现其URL的下半部分是被encode过的。

所以看起来也不是环境在容器外还是容器内的问题,就是URL的下半部分需要encode的问题。ps-file\kkv\kkFileView-4.4.0 我容器外的版本高,4.4的,容器是4.1的,难道高版本的kkv 会自己去encode 一下吗?

问了豆包,豆包说:

你的猜想完全正确!核心差异就是 kkfileview 版本不同导致的「URL 自动编码行为」差异:

为什么 4.4 版本会加这个优化?

kkfileview 官方在后续版本(比如 4.2+)中,应该是收到了大量 “URL 含特殊字符导致下载失败” 的反馈,所以在 4.4 版本中新增了「URL 自动编码兜底」逻辑 —— 本质是帮用户处理 “上游应用(如 AIP-App)编码不完整” 的问题,提升兼容性。

而 4.1 版本是较旧的版本,还没有这个兜底逻辑,完全 “依赖上游应用传递标准 URL”,上游漏编码就必然报错。

那我们拉取4.4的镜像试试:

# 官方下载 kkFileView-4.4.0-docker_x64.tar

$ docker load -i kkFileView-4.4.0-docker_x64.tar

更改docker-compose.yml之后重启kkfileview

services:

  kkfileview-hzero:

    image: keking/kkfileview_x64:4.4.0

    container_name: kkfileview-hzero

重启kkV之后再试:好了,问题解决。

所以,这个问题跟kkfileview的版本有关,需要使用4.2以上的版本,跟/opt/kkFileView-4.1.0/config/application.properties 中的配置也没有关系,可以把这个文件的挂载去掉了。

问题四、多模态向量测试找不到文件的问题

背景:进行多模态向量模型测试,上传图片文件测试,报错下载失败。

分析:

看起来是文件地址中包含了oss.hzero.com.cn不能解析,看文件服务日志:

Caused by: io.minio.errors.ErrorResponseException: Object name contains unsupported characters.

这个报错不正确,因为我在老环境里面测试过这个文件是没问题的,所以文件名没问题,看表里面的数据,文件名存储是拼接的是我在minio配置的代理地址。你如果用代理地址的话,在docker网络外访问是可以的,但在docker网络内部访问就不行了。文件服务在Docker容器内运行,所以文件服务就会报错。

看了下存到数据库的地址,发现其实在文件服务配置代理地址的情况下,拼接文件URL地址存入数据库的时候,会用代理地址开头,感觉新的PI中应该把逻辑修改为:不管文件服务是否配置代理地址,存入数据库的文件地址都要用endpoint开头。目前的逻辑,代理地址留空的话,会取endpoint地址开头,否则会去代理地址开头。所以,不要去配置代理地址,会导致问题。代理地址留空就好。

执行:修数据 hzero_file.hfle_file表:

先执行:

update hzero_file.hfle_file set file_url=REPLACE(file_url, ‘oss.hzero.com.cn:9000’, ‘minio-hzero:9000’)

再执行:

update hzero_file.hfle_file set file_url=REPLACE(file_url, ‘oss.hzero.com.cn’, ‘minio-hzero:9000’)

Updated Rows 40814

再次测试:还是有错误,file服务的后台日志显示错误信息是::Caused by: io.minio.errors.ErrorResponseException: Object name contains unsupported characters.

查后台数据库表:

把file_url取出来直接在浏览器访问,是可以成功访问的:

所以这个错误就莫名其妙,是否全部用容器服务名解析就有问题呢?也不是,我在模型配置导入文件就成功的,区别在于这里导入文件,可能没有调用文件服务的URI=/v1/0/files/download/inner

但是这个地方导出下载也成功的,所以也不是下载有问题啊!

当天工作结束,停服务,关机。

第二天开机,启动服务,再测,错误一样,界面上显示的错误消息是:

url[http://gateway.hzero.com.cn:8080/hfle/v1/0/files/redirect-url?bucketName=haip&access_token=afa27805-11b0-40fd-9b13-c5d2107e48ed&url=http%3A%2F%2Fminio-hzero%3A9000%2Fhz-haip%2Fhaip01%2F0%2FMINIO%2Faf9388a45f1d4194bc1ecba6576aba17%40%E6%9F%90%E5%AE%A2%E6%88%B7%E5%90%84%E4%B8%9A%E5%8A%A1%E9%83%A8%E9%97%A8AI%E9%9C%80%E6%B1%82%E4%B8%80%E8%A7%88.png]下载失败

这个 URL后面内容转成可读的就是:

http://minio-hzero:9000/hz-haip/haip01/0/MINIO/af9388a45f1d4194bc1ecba6576aba17@某客户各业务部门 AI 需求一览.png

直接访问这个地址会提示key错误:

看文件服务日志:

io.choerodon.core.exception.CommonException: hfle.error.download.file

Caused by: io.minio.errors.ErrorResponseException: Object name contains unsupported characters.

At org.hzero.starter.file.service.MinioFileServiceImpl.download(MinioFileServiceImpl.java:323)

到数据库中查这个文件记录:

SELECT file_url FROM hzero_file.hfle_file WHERE file_url LIKE ‘%某客户各业务部门%’ AND creation_date >= CURDATE();

返回:

http://minio-hzero:9000/hz-haip/haip01/0/MINIO/af9388a45f1d4194bc1ecba6576aba17@某客户各业务部门AI需求一览.png  , AI两边多了两个空格。

另外我们用一个纯英文文件名测试,现象也是一样的:用响应中的地址可以直接访问,就是说文件URL没有问题,可文件服务就报错:

Hzero-aip-app中的错误日志是:

Caused by: io.choerodon.core.exception.CommonException: haip.error.model.download.url

hzero-file 容器测试访问minio-hzero:

# echo ‘public class Test { public static void main(String[] args) { try (java.net.Socket s = new java.net.Socket()) { s.connect(new java.net.InetSocketAddress(“minio-hzero”, 9000), 3000); System.out.println(“✅ 连通成功!”); } catch (Exception e) { System.out.println(“❌ 连通失败: ” + e.getMessage()); } } }’ > Test.java && javac Test.java && java Test && rm -f Test.java Test.class

Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

✅ 连通成功!

联想到今天做文件预览的时候,minio日志报错:

API: SYSTEM.authN

Time: 10:11:23 UTC 11/30/2025

DeploymentID: 45cf993b-5631-4c8d-860e-5bb2f89dec36

Error: invalid semicolon separator in query (*errors.errorString)

5: internal/logger/logger.go:271:logger.LogIf()

4: cmd/logging.go:50:cmd.authNLogIf()

3: cmd/auth-handler.go:129:cmd.getRequestAuthType()

2: cmd/auth-handler.go:621:cmd.setAuthMiddleware.func1()

1: net/http/server.go:2294:http.HandlerFunc.ServeHTTP()

猜想是不是我现在用的minio镜像是mimio:latest 最新版的,查豆包说最新版的minio对请求字符串有严格的检查,可能是不太兼容了,那么要回到老版本,尝试了一个24年的镜像,但启动不起来,原因是minio的元数据在使用最新版本之后,已经升级了,旧版本的minio无法读取新版的元数据。

我原系统功能是好的,看了下原系统上的minio, 版本是RELEASE.2025-06-13T11-33-47Z

这是25年的,也许能兼容latest的元数据格式,尝试:

$ docker pull minio/minio:RELEASE.2025-06-13T11-33-47Z

Status: Downloaded newer image for minio/minio:RELEASE.2025-06-13T11-33-47Z
docker.io/minio/minio:RELEASE.2025-06-13T11-33-47Z

修改minio的docker-compose.yml文件,用这个版本试试。

试验结果还是有问题,看起来跟minio版本没关系。

还是回到文件服务关键错误日志:

Caused by: io.minio.errors.ErrorResponseException: Object name contains unsupported characters.

这个错误看起来跟文件预览的错误类似,是否也是有部分URL少encode了一次?

另一个文件测试,后台文件服务中的错误日志是:
#io.choerodon.core.exception.CommonException: hfle.error.download.file

#Caused by: io.minio.errors.ErrorResponseException: The specified key does not exist.

网页上请求头地址是:http://aigc.hzero.com.cn/v1/open/image-emb/common

请求的负载是:
{“accountCode”:”HAIP.IMAGE_EMB_DOUBAO_COPY”,”inputs”:[{“type”:”image_url”,”imageUrl”:{“url”:”http://gateway.hzero.com.cn:8080/hfle/v1/0/files/redirect-url?bucketName=haip&access_token=00cad27f-13ea-40cc-85f7-ce046da09eb9&url=http%3A%2F%2Fminio-hzero%3A9000%2Fhz-haip%2Fhaip01%2F0%2FMINIO%2F6a5d7178989441899a4bb11525e8a2f1%40PaaS%20%E5%B9%B3%E5%8F%B0%E9%85%8D%E5%9B%BE%20(19).png”}}]}

这个imageUrl在浏览器里面是可以直接访问的。而且这个URL地址明显是已经 encode过的,所以这问题跟文件预览不一样,不是encode的问题。

实际运行的时候是不是在hzero-aip-app那个容器中运行? 如果是,那么确实有问题,容器中没有gateway.hzero.com.cn的域名解析。

解决方案:在hzero-gateway  容器的docker-compose.yml中添加别名:gateway.hzero.com.cn,这样让hzero-aip-app服务在容器网络内的服务也能通过gateway.hzero.com.cn访问到hzero-gateway

## 要求Docker/Docker CE >= 19.x

services:

  hzero-gateway:

    image: hzero-gateway-jk-demo:1.12

    container_name: hzero-gateway

    networks:

      hzero-demo:

        aliases:  # 在此为网关服务设置网络别名

          – gateway.hzero.com.cn  # 添加这一行

更改后重启gateway, 再测试,OK了:

HZERO PaaS平台-Docker版demo笔记(一)Docker版制作

=======================================

1、制作HZERO PaaS 平台 1.12版本的Demo环境的Mysql镜像日志

备注:本文是个人自建Demo系统学习研究过程中的日志,仅供培训学习参考
环境:WSL:Ubuntu-22.04-hzero 系统
说明:该环境独立安装了docker 和docker compose, 没有跟windows dockerDesktop 做集成。
由于制作Docker镜像的过程中需要通过Docker Hub库拉镜像,这个环境无法直接访问Docker Hub库(要梯子,但wsl 子系统无法直接用Windows Host机的代理),所以这个镜像制作多了些麻烦。
后续的其他Docker镜像制作, 放到Ubuntu-22.04 里面制作,Ubuntu-22.04 跟Docker Desktop做了集成,因为DockerDesktop是Windows的应用,可以用梯子,所以就很方便了。
一、启动 MySQL
$ systemctl start mysql

二、导出所有数据库
$ cd /
$ mkdir d03
$ cd /d03
$ mysqldump -u root -p –all-databases > init.sql

$ mkdir mysql-custom && cd mysql-custom
$ cp /d03/init.sql .

三、制作Dockerfile
$ vi my_custom.cnf
写入如下内容:

my_custom.cnf

[mysqld]
max_connections=2000
max_allowed_packet=32M
lower_case_table_names=1
character_set_server=utf8mb4
collation_server=utf8mb4_bin


$ vi Dockerfile

写入如下内容:

基于官方 MySQL 8 镜像

FROM mysql:8.0

设置 MySQL root 密码(可选,也可启动时通过环境变量指定)

ENV MYSQL_ALLOW_EMPTY_PASSWORD=yes

将导出的 SQL 文件复制到 MySQL 自动执行目录

容器启动时,会自动执行 /docker-entrypoint-initdb.d 下的 .sql 文件

COPY init.sql /docker-entrypoint-initdb.d/

复制自定义配置文件到 MySQL 配置目录

COPY my_custom.cnf /etc/mysql/conf.d/

四、构建mysql镜像
$ docker build -t mysql-hzero-jk-demo:1.12 .

报错:拉不到mysql 8.0的镜像,增加国内镜像地址:
$ vi /etc/docker/daemon.json
写入内容:
{
“registry-mirrors”: [
“https://qfebddkjdu.mirror.aliyuncs.com”,
“https://registry.docker-cn.com”,
“https://docker.mirrors.ustc.edu.cn”,
“http://hub-mirror.c.163.com”
]
}
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
$ sudo docker info 看到镜像已经加进去了
$ docker pull mysql:8.0 还是不行
$ curl -I https://registry.docker-cn.com 无法访问,其他几个镜像也是无法访问,阿里云的只允许通过阿里云ECS服务器访问。
这些镜像都不靠谱;
去掉这些不靠谱的镜像
$ rm -f /etc/docker/daemon.json
直接从华为云拉mysql:8.0镜像:
$ docker pull swr.cn-east-2.myhuaweicloud.com/library/mysql:8.0
成功拉取
再次构建:
$ docker build -t mysql-hzero-jk-demo:1.12 .
还是报错:ERROR: failed to build: failed to solve: mysql:8.0: failed to resolve source metadata for docker.io/library/mysql:8.0: failed to do request: Head “https://registry-1.docker.io/v2/library/mysql/manifests/8.0”: read tcp 172.18.14.48:40900->98.90.233.146:443: read: connection reset by peer
怎么没有从本地库获取mysql:8.0呢?
解决方案有两种:
一种是更改 Dockfile,把来源更改掉:
FROM swr.cn-east-2.myhuaweicloud.com/library/mysql:8.0
另一种是把刚才从华为云拉下来的镜像打标签:
docker tag swr.cn-east-2.myhuaweicloud.com/library/mysql:8.0 mysql:8.0
推荐使用方法二,因为这样不需要修改Dockerfile,而且以后如果Dockerfile中其他镜像也有类似问题,可以同样处理。
打完标签后再次构建:
$ docker build -t mysql-hzero-jk-demo:1.12 .
这次成功了,验证:
$ docker images | grep mysql
mysql-hzero-jk-demo 1.12 38408f313597 2 minutes ago 824MB
mysql 8.0 2dd01afbe8df 7 years ago 485MB
swr.cn-east-2.myhuaweicloud.com/library/mysql 8.0 2dd01afbe8df 7 years ago 485MB
测试:停掉mysql
$ systemctl stop mysql
启动mysql 的docker 容器
$ docker run -d –name mysql-hzero-demo -p 3306:3306 mysql-hzero-jk-demo:1.12
启动没成功,
mysql-hzero-demo
4d5fa07458006f585c791adf763bfac46de28ef4b995e935f28c36cc4e9af420
$ docker ps -a 显示启动一会儿就退出了,看日志:
$ docker logs 4d5fa07458006f585c791adf763bfac46de28ef4b995e935f28c36cc4e9af420
错误发生在:
/usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/init.sql
ERROR 3723 (HY000) at line 516: The table ‘replication_asynchronous_connection_failover’ may not be created in the reserved tablespace ‘mysql’.
元宝分析可能是版本兼容问题,原来数据库版本是8.4.5,拉取的镜像8.0太低了。
解决方案:拉取8.4.5的镜像,试了阿里云、腾讯云、华为云的镜像站点,要么拒绝访问,要么需要用户名密码,用注册的云账户密码也不行。
问豆包有无网页版的下载,提供了Oracle的网站下载页,这个下载页会自动调用docker desktop来拉取,注册docker desktop的用户,打开clash party,在docker desktop的docker Hub里面找 mysql, 发现没有直接8.4.5的镜像,最近的只有8.4 和8.4.7
在dockerdesktop的docker hub里面搜mysql, 拉了8.4.7 版本;
在docker Desktop 的设置/Resources/WSL intergration 中把ubuntu-22.04的集成开关打开,这样在ubuntu-22.04中可以操作docker desktop
打开Ubnuntu-22.04
$ docker images | grep mysql
mysql 8.4.7 b306273d4d36 4 weeks ago 1.08GB
$ cd /d01/dockerimagesbak

格式:docker save -o 导出文件名 镜像名:标签

$ docker save -o mysql-8.4.7.tar mysql:8.4.7
拷贝 这个mysql-8.4.7.tar 到ubuntu-22.04-hzero/d03/mysql-custom 目录下
进入ubuntu-22.04-hzero/d03/mysql-custom,导入镜像

格式:docker load -i 镜像文件.tar

$ docker load -i mysql-8.4.7.tar
导入成功:Loaded image: mysql:8.4.7
验证:
$ docker images | grep mysql
mysql-hzero-jk-demo 1.12 35d024e4c936 13 hours ago 824MB
mysql 8.4.7 67471052edd5 4 weeks ago 788MB
mysql 8.0 2dd01afbe8df 7 years ago 485MB
mysql 8.4.5 2dd01afbe8df 7 years ago 485MB
swr.cn-east-2.myhuaweicloud.com/library/mysql 8.0 2dd01afbe8df 7 years ago 485MB
更改Dockfile ,

$ vi Dockerfile

基于官方 MySQL 8 镜像

FROM mysql:8.4.7

保存退出
再次构建:
$ docker build -t mysql-hzero-jk-demo:1.12 .
构建成功
$ docker images | grep mysql
mysql-hzero-jk-demo 1.12 8c6c4b989154 20 seconds ago 1.13GB
停掉Mysql服务
$ systemctl stop mysql
删除旧容器:
$ docker rm -f mysql-hzero-demo
启动mysql 的docker 容器
$ docker run -d –name mysql-hzero-demo -p 3306:3306 mysql-hzero-jk-demo:1.12
be9ae14a5562c8b28ca6ebeb6cbd25d470d4980045c1c47e8b15a3896d5353d7
root@desktop-jacksen:/d03/mysql-custom#
查看日志:
$ docker logs be9ae14a5562c8b28ca6ebeb6cbd25d470d4980045c1c47e8b15a3896d5353d7
出现错误:
2025-11-19 03:13:26+00:00 [Note] [Entrypoint]: /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/init.sql
ERROR 1153 (08S01) at line 3076: Got a packet bigger than ‘max_allowed_packet’ bytes
错误日志给元宝分析后建议修改my_custom.cnf,重建镜像:

[mysqld]
max_connections=2000
max_allowed_packet=512M
lower_case_table_names=1
character_set_server=utf8mb4
collation_server=utf8mb4_bin


再次构建:
$ docker build -t mysql-hzero-jk-demo:1.12 .
删除旧容器:
$ docker rm -f mysql-hzero-demo

启动mysql 的docker 容器

docker run -d –name mysql-hzero-demo -p 3306:3306 mysql-hzero-jk-demo:1.12
3e49dc0282495402dab8fa41f49be132c9d135483a5867aa58aa1b2f2ed7c4bb
root@desktop-jacksen:/d03/mysql-custom#docker logs 3e49dc0282495402dab8fa41f49be132c9d135483a5867aa58aa1b2f2ed7c4bb
这次没有error了
root@desktop-jacksen:/d03/mysql-custom# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3e49dc028249 mysql-hzero-jk-demo:1.12 “docker-entrypoint.s…” About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp, 33060/tcp mysql-hzero-demo

验证:检查 max_allowed_packet 设置

$ docker exec mysql-hzero-demo mysql -u root -e “SHOW GLOBAL VARIABLES LIKE ‘max_allowed_packet’;”
Variable_name Value
max_allowed_packet 536870912
root@desktop-jacksen:/d03/mysql-custom#

进入容器内部测试连接

$ docker exec -it mysql-hzero-demo mysql -u root -e “SELECT 1;”
+—+
| 1 |
+—+
| 1 |
+—+
root@desktop-jacksen:/d03/mysql-custom#

查看所有数据库

$ docker exec -it mysql-hzero-demo mysql -u root -e “SHOW DATABASES;”
$ docker exec -it mysql-hzero-demo mysql -u root -e “SHOW DATABASES;”
+———————+
| Database |
+———————+
| hzero_admin |
| hzero_aip |
| hzero_alert |
| hzero_file |
| hzero_frontal |
| hzero_import |
| hzero_interface |
| hzero_lowcode |
| hzero_lowcodedata |
| hzero_message |
| hzero_modeler |
| hzero_orchestration |
| hzero_platform |
| hzero_report |
| hzero_scheduler |
| hzero_workflow |
| information_schema |
| mysql |
| performance_schema |
| sys |
+———————+

查看数据库大小和数量

$ docker exec -it mysql-hzero-demo mysql -u root -e “
SELECT
table_schema AS ‘数据库’,
COUNT(*) AS ‘表数量’,
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS ‘总大小(MB)’
FROM information_schema.tables
GROUP BY table_schema
ORDER BY SUM(data_length + index_length) DESC;”
+———————+———–+—————+
| 数据库 | 表数量 | 总大小(MB) |
+———————+———–+—————+
| hzero_platform | 344 | 11.42 |
| hzero_modeler | 345 | 10.56 |
| hzero_lowcode | 227 | 9.66 |
| hzero_aip | 250 | 7.88 |
| hzero_interface | 169 | 5.33 |
| mysql | 38 | 5.27 |
| hzero_workflow | 145 | 5.14 |
| hzero_admin | 69 | 2.09 |
| hzero_lowcodedata | 26 | 1.67 |
| hzero_orchestration | 47 | 1.58 |
| hzero_message | 50 | 1.50 |
| hzero_report | 40 | 1.23 |
| hzero_scheduler | 29 | 1.06 |
| hzero_frontal | 30 | 1.00 |
| hzero_alert | 19 | 0.58 |
| hzero_file | 10 | 0.36 |
| hzero_import | 12 | 0.31 |
| sys | 101 | 0.02 |
| performance_schema | 113 | 0.00 |
| information_schema | 78 | 0.00 |
+———————+———–+—————+

验证关键配置参数

$ docker exec -it mysql-hzero-demo mysql -u root -e “
SHOW VARIABLES WHERE
Variable_name IN (‘max_connections’, ‘max_allowed_packet’, ‘lower_case_table_names’,
‘character_set_server’, ‘collation_server’);”
+————————+————-+
| Variable_name | Value |
+————————+————-+
| character_set_server | utf8mb4 |
| collation_server | utf8mb4_bin |
| lower_case_table_names | 1 |
| max_allowed_packet | 536870912 |
| max_connections | 2000 |
+————————+————-+

测试端口

$ nc -z 127.0.0.1 3306 && echo “端口可访问” || echo “端口不可访问”
端口可访问

从宿主机连接测试(确保端口映射正确)

$ mysql -h 127.0.0.1 -P 3306 -u root -e “SELECT 1;” 2>/dev/null && echo “连接成功” || echo “连接失败”
连接失败

查看log

$ docker logs mysql-hzero-demo
2025-11-19T03:39:47.424515Z 16 [Warning] [MY-013360] [Server] Plugin sha256_password reported: ”sha256_password’ is deprecated and will be removed in a future release. Please use caching_sha2_password instead’

外部DBeaver 链接测试:正常

非root用户本地链接测试:正常

$ mysql -h 127.0.0.1 -P 3306 -u hzero -phzero -e “SELECT 1;”
mysql: [Warning] Using a password on the command line interface can be insecure.
+—+
| 1 |
+—+
| 1 |
+—+
#

检查用户权限

$ docker exec -it mysql-hzero-demo mysql -u root -e “
SELECT user, host, authentication_string, plugin FROM mysql.user;”
+——————+———–+————————————————————————+———————–+
| user | host | authentication_string | plugin |
+——————+———–+————————————————————————+———————–+
| hzero | % | $A$005$->l~V[~X[fU)>ja/x.oWsjWwIgUVt5/2iE55KHa.l5royRU1ukIw0EMn0 | caching_sha2_password |
| root | localhost | | caching_sha2_password |
+——————+———–+————————————————————————+———————–+

现在情况已经很清楚了。MySQL 容器运行正常,​非 root 用户(hzero)可以正常连接,这证明 MySQL 服务本身是健康且可访问的。

root只能从容器内访问,这没问题,正常我们用不到root用户。

到这里 制作HZERO PaaS 平台 1.12版本的Demo环境的Mysql镜像 完成了;

但这个镜像的里面MySQL的数据无法持久化,要数据持久化,正确的做法是:


目标环境:
环境:WSL:Ubuntu-22.04系统
1、先建立容器外的mysql数据持久化目录,并修正目录权限(重要)
$ cd /d01/hzero-dockers/volumes
$ mkdir mysql
$ sudo chown -R 999:999 /d01/hzero-dockers/volumes/mysql
2、如果容器还没起,先起容器
$ cd /d01/hzero-dockers/mysql-docker
$ docker compose up -d
等2分钟,完成初始化 ,可以在docker日志中看到:
2025-11-24 02:46:05+00:00 [Note] [Entrypoint]: MySQL init process done. Ready for start up.
2025-11-24T02:46:05.189268Z 0 [System] [MY-015015] [Server] MySQL Server – start.
2025-11-24T02:46:06.688842Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections.
3、# 将容器内的数据拷贝出来
$ docker cp mysql-hzero:/var/lib/mysql /d01/hzero-dockers/volumes/mysql
Successfully copied 1.58GB to /d01/hzero-dockers/volumes/mysql
4、# 关闭mysql容器,重建镜像
$ docker compose down
4.1
$ vi my_custom.cnf

写入如下内容:

my_custom.cnf

[mysqld]
max_connections=2000
max_allowed_packet=512M
lower_case_table_names=1
character_set_server=utf8mb4
collation_server=utf8mb4_bin


4.2
$ vi Dockerfile

#写入如下内容:

基于官方 MySQL 8 镜像

FROM mysql:8.4.7

设置 MySQL root 密码(可选,也可启动时通过环境变量指定)

ENV MYSQL_ALLOW_EMPTY_PASSWORD=yes

复制自定义配置文件到 MySQL 配置目录

COPY my_custom.cnf /etc/mysql/conf.d/

4.3、再次构建:
$ docker build -t mysql-hzero-jk-demo:8.4.7 .
构建成功

5、编辑 docker-compose.yml, 挂载数据目录

要求Docker/Docker CE >= 19.x

services:
mysql-hzero:
image: mysql-hzero-jk-demo:8.4.7
container_name: mysql-hzero
user: “999:999” # 添加这一行,指定 mysql 用户
ports:
– “3306:3306”
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 1000m # 容器最大内存
volumes:
– ${DOCKER_VOLUME_DIRECTORY:-../volumes}/mysql:/var/lib/mysql
networks:
default:
name: hzero-demo

external: true

6、再次启动容器
$ cd /d01/hzero-dockers/mysql-docker
$ docker compose up -d
查看日志:
$ docker logs mysql-hzero
2025-11-24T03:23:45.211550Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: ‘8.4.7’ socket: ‘/var/run/mysqld/mysqld.sock’ port: 3306 MySQL Community Server – GPL.
成功启动,DBeaver 访问数据库,数据正常。
备注:这数据库镜像一般使用其原来版本作为标签(如果原来用的标签是1.12,要改成8.47)

将旧镜像名改为新镜像名

$ docker tag mysql-hzero-jk-demo:1.12 mysql-hzero-jk-demo:8.4.7
$ docker rmi mysql-hzero-jk-demo:1.12

改了镜像名之后,docker-compose.yml中的镜像名也要通步更改。

==================================================

2、制作HZERO PaaS 平台 1.12版本的Demo环境的HZERO 微服务-注册服务中心 hzero-register镜像

环境:WSL:Ubuntu-22.04系统
$ cd /d01
$ mkdir hzero-register-docker
$ cd /d01/hzero-register-docker
$ vi Dockerfile

输入内容:

FROM registry.cn-shanghai.aliyuncs.com/c7n/javabase:17
COPY ps-register.jar /ps-register.jar
ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

ENTRYPOINT exec java -XX:+UnlockExperimentalVMOptions $JAVA_OPTS $SKYWALKING_OPTS -jar /ps-register.jar

保存退出:
重新打包ps-register.jar
为适应Docker,bootstrap.yml 和 appication.yml要改造
来源系统先备份:
在Ubuntu-22.04-hzero系统中,进入
$ cd /d02/hzero/project/ps-register/src/main/resources
$ cp application.yml application.wsl.ok.yml
$ cp bootstrap.yml bootstrap.wsl.ok.yml
更改 bootstrap.yml
去掉:
preferred-networks[0]: ${PREFERRED_IP}
增加
ignored-interfaces:
– lo
– docker0
– veth.*
更改 application.yml
defaultZone: ${EUREKA_DEFAULT_ZONE:http://dev.hzero.com.cn:8000/eureka}
改成:
defaultZone: ${EUREKA_DEFAULT_ZONE:http://localhost:8000/eureka}
来源系统备份jar
$ cd /d02/hzero/project/ps-register/target
$ cp ps-register.jar ps-register.wsl.ok.jar
来源系统构建 jar
$ cd /d02/hzero/project/ps-register

$ vi build.sh

!/bin/bash

SERVICE_NAME=${PWD##*/}
JAR=$SERVICE_NAME.jar

构建项目

echo “>>> mvn clean package -Dmaven.javadoc.skip=true”
mvn clean package -Dmaven.javadoc.skip=true -Dmaven.test.skip=true || { echo “>>> 构建失败”; exit 1; }
echo “>>> cd target”
cd target || { echo “>>> 找不到target目录”; exit 1; }

重命名JAR文件

if [ -f “app.jar” ]; then
mv app.jar $JAR
echo “>>> 重命名 app.jar 为 $JAR”
else
echo “>>> 警告:app.jar 文件不存在,可能使用其他名称”
JAR=$(ls *.jar 2>/dev/null | head -n1)
if [ -z “$JAR” ]; then
echo “>>> 错误:找不到JAR文件!”
exit 1
fi
echo “>>> 使用找到的JAR文件:$JAR”

fi

$ bash build.sh
构建完成,拷贝ps-register.jar 到Ubuntu-22.04/d01/hzero-dockers/hzero-register-docker
进入Ubuntu-22.04/d01/hzero-dockers/hzero-register-docker
$ cd /d01/hzero-dockers/hzero-register-docker

构建镜像

$ docker build -t hzero-register-jk-demo:1.12 .
构建成功

编辑docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
hzero-register:
image: hzero-register-jk-demo:1.12
container_name: hzero-register
ports:
– “8000:8000”
– “8001:8001”
environment:
– JAVA_OPTS=” -Xms300m -Xmx300m -Dspring.profiles.active=dev”
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 600m # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)
networks:
default:
name: hzero-demo

external: true

启动容器
$ docker compose up -d
[+] Running 2/2
✔ Network hzero-demo Created 0.1s
✔ Container hzero-register Started 0.7s
检查:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
容器启动没成功
$ docker logs hzero-register
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN
Error: Could not find or load main class “
Caused by: java.lang.ClassNotFoundException: “
豆包分析:
你遇到的核心问题是启动命令中的引号导致 JVM 解析错误,” -Xms300m -Xmx300m -Dspring.profiles.active=dev” 里的双引号被当成了类名的一部分,所以报Could not find or load main class “。
直接解决方案
修改docker-compose.yml中的环境变量配置,去掉 JAVA_OPTS 值的双引号:
$ docker compose down && docker compose up -d

检查容器状态

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b25d8a3a5f4e hzero-register-jk-demo:1.12 “/bin/sh -c ‘exec ja…” 11 seconds ago Up 9 seconds 0.0.0.0:8000-8001->8000-8001/tcp, [::]:8000-8001->8000-8001/tcp hzero-register

查看日志确认启动成功

$ docker logs hzero-register
日志看起来成功了
访问测试:
http://localhost:8000 访问正常;
到这里 制作HZERO PaaS 平台 1.12版本的Demo环境的register 注册中心服务docker镜像 完成了;

==================================================

4、制作HZERO PaaS 平台 1.12版本的Demo环境的HZERO 微服务-平台治理 hzero-admin 镜像

一、来源环境:
环境:WSL:Ubuntu-22.04-hzero系统
1、来源环境先备份
$ cd /d02/hzero/project/ps-admin/src/main/resources
$ cp application.yml application.wsl.ok.yml
$ cp bootstrap.yml bootstrap.wsl.ok.yml
$ cd /d02/hzero/project/ps-admin/target
$ cp ps-admin.jar ps-admin.wsl.ok.jar
2、更改yml配置文件
application.yml中 mysql数据库的主机域名改成Docker compose容器名 :mysql-hzero
url: ${SPRING_DATASOURCE_URL:jdbc:mysql://mysql-hzero:3306/hzero_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true}
application.yml中 redis数据库的主机域名 改成Docker composer容器名 :redis-hzero
redis:
host: ${SPRING_DATA_REDIS_HOST:redis-hzero}
datasource:
hzero:
host: ${SPRING_DATA_REDIS_HOST:redis-hzero}
bootstrap.yml 中 注册中心的主机域名地址改成docker compose容器名 :hzero-register
# 注册中心地址
defaultZone: ${EUREKA_DEFAULT_ZONE:http://hzero-register:8000/eureka}
bootstrap.yml中 配置中心的主机域名地址改成localhost
# 配置中心地址
uri: ${SPRING_CLOUD_CONFIG_URI:http://localhost:8060/hadm/config}
去掉:
preferred-networks[0]: ${PREFERRED_IP}
增加
ignored-interfaces:
– lo
– docker0
– veth.*
3、复制Jar包构建脚本:
$ cp /d02/hzero/project/ps-register/build.sh /d02/hzero/project/ps-admin/
4、构建适合Docker的Jar包
$ cd /d02/hzero/project/ps-admin/
$ bash build.sh
二、目标环境:
环境:WSL:Ubuntu-22.04系统
5、建立hzero-admin-docker目录
$ cd /d01/hzero-dockers
$ mkdir hzero-admin-docker
6、拷贝Jar包到目标环境
在windows powershell 中执行
$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-admin\target\ps-admin.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-admin-docker\
7、编辑Dockerfile
$ cd /d01/hzero-dockers/hzero-admin-docker

$ vi Dockerfile

FROM registry.cn-shanghai.aliyuncs.com/c7n/javabase:17
COPY ps-admin.jar /ps-admin.jar
ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

ENTRYPOINT exec java -XX:+UnlockExperimentalVMOptions $JAVA_OPTS $REFLEC_OPTS $AGENT $SKYWALKING_OPTS -jar /ps-admin.jar

8、编辑docker-compose.yml

vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
hzero-admin:
image: hzero-admin-jk-demo:1.12
container_name: hzero-admin
ports:
– “8060:8060”
– “8061:8061”
environment:
– JAVA_OPTS= -Xms300m -Xmx300m -Dspring.profiles.active=dev
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 600m # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)
networks:
default:
name: hzero-demo

external: true

8、构建Docker镜像
$ cd /d01/hzero-dockers/hzero-admin-docker
$ docker build -t hzero-admin-jk-demo:1.12 .
构建成功:
docker images | grep admin
hzero-admin-jk-demo 1.12 b392466e7162 13 seconds ago 1.09GB
9、测试Docker镜像
测试之前先确保 redis-docker 和 mysql-docker,hzero-register 容器已经启动:
$ docker ps

如果没启动可以执行

cd /d01/hzero-dockers/mysql-docker
docker compose up -d
cd /d01/hzero-dockers/redis-docker
docker compose up -d
cd /d01/hzero-dockers/hzero-register-docker

docker compose up -d

启动hzero-admin容器
$ cd /d01/hzero-dockers/hzero-admin-docker
$ docker compose up -d
测试容器中能否连通redis-hzero容器中的redis数据库:
$ docker exec -it hzero-admin /bin/bash
jshell << EOF import java.net.Socket; try { Socket socket = new Socket(“redis-hzero”, 6379); System.out.println(“Connected successfully!”); socket.close(); } catch (Exception e) { System.out.println(“Connection failed: ” + e.getMessage()); } EOF 结果: jshell> Connected successfully!
测试容器中能否链通mysql-hzero容器中的mysql数据库:

进入你的Java容器

$ docker exec -it hzero-platform /bin/bash

在你的Java容器中执行

jshell << EOF try { new java.net.Socket(“mysql-hzero”, 3306).close(); System.out.println(“端口3306可达”); } catch (Exception e) { System.out.println(“端口不可达: ” + e.getMessage()); } EOF 结果: jshell> 端口3306可达
测试web服务:(可以访问)
http://localhost:8061/
true error.error There is a mistake in the program. Please contact the administrator warn No static resource .

==================================================

4、制作HZERO PaaS 平台 1.12版本的Demo环境的HZERO 微服务-平台基础管理 hzero-platform 镜像

一、来源环境:
环境:WSL:Ubuntu-22.04-hzero系统
1、来源环境先备份
$ cd /d02/hzero/project/ps-platform/src/main/resources
$ cp application.yml application.wsl.ok.yml
$ cp bootstrap.yml bootstrap.wsl.ok.yml
$ cd /d02/hzero/project/ps-platform/target
$ cp ps-platform.jar ps-platform.wsl.ok.jar
2、更改yml配置文件
application.yml中 数据库的主机域名改成Docker compose容器名 :mysql-hzero
url: ${SPRING_DATASOURCE_URL:jdbc:mysql://mysql-hzero:3306/hzero_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true}
application.yml中 数据库的主机域名 改成Docker composer容器名 :redis-hzero
redis:
host: ${SPRING_DATA_REDIS_HOST:redis-hzero}
bootstrap.yml 中 注册中心的主机域名地址改成docker compose容器名 :hzero-register
# 注册中心地址
defaultZone: ${EUREKA_DEFAULT_ZONE:http://hzero-register:8000/eureka}
bootstrap.yml中 配置中心的主机域名地址改成docker compose容器名:hzero-admin
# 配置中心地址
uri: ${SPRING_CLOUD_CONFIG_URI:http://hzero-admin:8060/hadm/config}
去掉:
preferred-networks[0]: ${PREFERRED_IP}
增加
ignored-interfaces:
– lo
– docker0
– veth.*
3、复制Jar包构建脚本:
$ cp /d02/hzero/project/ps-register/build.sh /d02/hzero/project/ps-platform/
4、构建适合Docker的Jar包
$ cd /d02/hzero/project/ps-platform/
$ bash build.sh
二、目标环境:
环境:WSL:Ubuntu-22.04系统
5、建立hzero-platform-docker目录
$ cd /d01/hzero-dockers
$ mkdir hzero-platform-docker
6、拷贝Jar包到目标环境
在windows powershell 中执行
$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-platform\target\ps-platform.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-platform-docker\
7、编辑Dockerfile

$ vi Dockerfile

FROM registry.cn-shanghai.aliyuncs.com/c7n/javabase:17
COPY ps-platform.jar /ps-platform.jar
ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

ENTRYPOINT exec java -XX:+UnlockExperimentalVMOptions $JAVA_OPTS $REFLEC_OPTS $AGENT $SKYWALKING_OPTS -jar /ps-platform.jar

8、编辑docker-compose.yml

$ vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
hzero-platform:
image: hzero-platform-jk-demo:1.12
container_name: hzero-platform
ports:
– “8100:8100”
– “8101:8101”
environment:
– JAVA_OPTS= -Xms500m -Xmx500m -Dspring.profiles.active=dev
– REFLEC_OPTS=–add-opens java.base/java.lang=ALL-UNNAMED –add-opens java.base/java.util=ALL-UNNAMED –add-opens java.base/java.util.concurrent=ALL-UNNAMED –add-opens java.base/jdk.internal.loader=ALL-UNNAMED –add-opens java.base/java.net=ALL-UNNAMED –add-opens java.base/java.nio=ALL-UNNAMED –add-opens java.base/java.lang.reflect=ALL-UNNAMED
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 1000m # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)
networks:
default:
name: hzero-demo

external: true

8、构建Docker镜像
$ cd /d01/hzero-dockers/hzero-platform-docker
$ docker build -t hzero-platform-jk-demo:1.12 .
构建成功:
root@desktop-jacksen:/d01/hzero-dockers/hzero-platform-docker# docker images | grep platform
hzero-platform-jk-demo 1.12 ea4f8909ae5e 58 seconds ago 1.31GB
9、测试Docker镜像
测试之前先确保 redis-docker 和 mysql-docker,hzero-register , hzero-admin容器已经启动:
$ cd /d01/hzero-dockers/hzero-platform-docker
$ docker compose up -d
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
375a4973b082 hzero-platform-jk-demo:1.12 “/bin/sh -c ‘exec ja…” 6 minutes ago Up 6 minutes 0.0.0.0:8100-8101->8100-8101/tcp, [::]:8100-8101->8100-8101/tcp hzero-platform
72cf93b6a594 hzero-admin-jk-demo:1.12 “/bin/sh -c ‘exec ja…” 50 minutes ago Up 50 minutes 0.0.0.0:8060-8061->8060-8061/tcp, [::]:8060-8061->8060-8061/tcp hzero-admin
094e45f23cb4 redis:6-alpine “docker-entrypoint.s…” About an hour ago Up About an hour 0.0.0.0:6379->6379/tcp, [::]:6379->6379/tcp redis-hzero
30200cc3a81c mysql-hzero-jk-demo:1.12 “docker-entrypoint.s…” About an hour ago Up About an hour 0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp mysql-hzero
b25d8a3a5f4e hzero-register-jk-demo:1.12 “/bin/sh -c ‘exec ja…” 2 days ago Up About an hour 0.0.0.0:8000-8001->8000-8001/tcp, [::]:8000-8001->8000-8001/tcp hzero-register
看日志:docker logs hzero-platform
看起来是正常启动了,访问数据库也都正常
测试web服务:(可以正常访问)
http://localhost:8100
true error.error An error occurred in the program. Please contact the administrator warn No static resource .

==================================================

5、制作HZERO PaaS 平台 1.12版本的Demo环境的HZERO 微服务-License授权管理 hzero-license 镜像

一、来源环境:
环境:WSL:Ubuntu-22.04-hzero系统
1、来源环境先备份
$ cd /d02/hzero/project/ps-license/src/main/resources
$ cp application.yml application.wsl.ok.yml
$ cp bootstrap.yml bootstrap.wsl.ok.yml
$ cd /d02/hzero/project/ps-license/target
$ cp ps-license.jar ps-license.wsl.ok.jar
2、更改yml配置文件
application.yml中 redis数据库的主机域名 改成Docker composer容器名 :redis-hzero
  redis:
  host: ${SPRING_DATA_REDIS_HOST:redis-hzero}
bootstrap.yml 中 注册中心的主机域名地址改成docker compose容器名 :hzero-register
  # 注册中心地址
  defaultZone: ${EUREKA_DEFAULT_ZONE:http://hzero-register:8000/eureka}
bootstrap.yml中 配置中心的主机域名地址改成docker compose容器名:hzero-admin
  # 配置中心地址
  uri: ${SPRING_CLOUD_CONFIG_URI:http://hzero-admin:8060/hadm/config}
inetutils 网卡设置段:去掉:preferred-networks[0]: ${PREFERRED_IP}
增加
ignored-interfaces:
– lo
– docker0
– veth.*

3、复制Jar包构建脚本:
$ cp /d02/hzero/project/ps-register/build.sh /d02/hzero/project/ps-license/
4、构建适合Docker的Jar包
$ cd /d02/hzero/project/ps-license/
$ bash build.sh
二、目标环境:
环境:WSL:Ubuntu-22.04系统
5、建立hzero-platform-docker目录
$ cd /d01/hzero-dockers
$ mkdir hzero-license-docker
6、拷贝Jar包到目标环境
  在windows powershell 中执行
$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-license\target\ps-license.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-license-docker\
$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-license\licenseAgent\license-agent112a.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-license-docker\
7、编辑Dockerfile
$ cd /d01/hzero-dockers/hzero-license-docker

$ vi Dockerfile

FROM registry.cn-shanghai.aliyuncs.com/c7n/javabase:17
COPY ps-license.jar /ps-license.jar
COPY license-agent112a.jar /license-agent112a.jar
ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

ENTRYPOINT exec java -XX:+UnlockExperimentalVMOptions $JAVA_OPTS $REFLEC_OPTS $AGENT $SKYWALKING_OPTS -jar /ps-license.jar

8、编辑docker-compose.yml

vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
hzero-license:
image: hzero-license-jk-demo:1.12
container_name: hzero-license
ports:
– “8105:8105”
– “8106:8106”
environment:
– JAVA_OPTS=-Xms200m -Xmx200m -Dspring.profiles.active=dev
– AGENT=-javaagent:/license-agent112a.jar
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 400m # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)
networks:
default:
name: hzero-demo

external: true

8、构建Docker镜像
$ cd /d01/hzero-dockers/hzero-license-docker
$ docker build -t hzero-license-jk-demo:1.12 .
构建成功:
docker images | grep license
hzero-license-jk-demo 1.12 a1e6db72ccea 30 seconds ago 1.02GB
如果需要重建,重建后清空悬空镜像:
$ docker image prune
9、测试Docker镜像
测试之前先确保 redis-docker 和 hzero-register 容器已经启动:
$ cd /d01/hzero-dockers/hzero-license-docker
$ docker compose up -d
看日志:
$ docker logs hzero-license
成功启动
测试网络访问:
http://localhost:8105
可以正常访问,镜像构建成功。

==================================================

6、制作HZERO PaaS 平台 1.12版本的Demo环境的HZERO 微服务-身份认证管理 ps-iam-saas 镜像

一、来源环境:
环境:WSL:Ubuntu-22.04-hzero系统
1、来源环境先备份
$ cd /d02/hzero/project/ps-iam-saas/src/main/resources
$ cp application.yml application.wsl.ok.yml
$ cp bootstrap.yml bootstrap.wsl.ok.yml
$ cd /d02/hzero/project/ps-iam-saas/target
$ cp ps-iam-saas.jar ps-iam-saas.wsl.ok.jar
2、更改yml配置文件
application.yml中 数据库的主机域名改成Docker compose容器名 :mysql-hzero
 url: ${SPRING_DATASOURCE_URL:jdbc:mysql://mysql-hzero:3306/hzero_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true}
application.yml中 数据库的主机域名 改成Docker composer容器名 :redis-hzero
  redis:
  host: ${SPRING_DATA_REDIS_HOST:redis-hzero}
bootstrap.yml 中 注册中心的主机域名地址改成docker compose容器名 :hzero-register
  # 注册中心地址
  defaultZone: ${EUREKA_DEFAULT_ZONE:http://hzero-register:8000/eureka}
bootstrap.yml中 配置中心的主机域名地址改成docker compose容器名:hzero-admin
  # 配置中心地址
  uri: ${SPRING_CLOUD_CONFIG_URI:http://hzero-admin:8060/hadm/config}
去掉:
preferred-networks[0]: ${PREFERRED_IP}
增加
ignored-interfaces:
– lo
– docker0
– veth.*
3、复制Jar包构建脚本:
$ cp /d02/hzero/project/ps-register/build.sh /d02/hzero/project/ps-iam-saas/
4、构建适合Docker的Jar包
$ cd /d02/hzero/project/ps-iam-saas/
$ bash build.sh
二、目标环境:
环境:WSL:Ubuntu-22.04系统
5、建立hzero-iam-saas-docker目录
$ cd /d01/hzero-dockers
$ mkdir hzero-iam-saas-docker
6、拷贝Jar包到目标环境
  在windows powershell 中执行
$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-iam-saas\target\ps-iam-saas.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-iam-saas-docker\
$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-license\licenseAgent\license-agent112a.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-iam-saas-docker\
7、编辑Dockerfile
$ cd /d01/hzero-dockers/hzero-iam-saas-docker

$ vi Dockerfile

FROM registry.cn-shanghai.aliyuncs.com/c7n/javabase:17
COPY ps-iam-saas.jar /ps-iam-saas.jar
COPY license-agent112a.jar /license-agent112a.jar
ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

ENTRYPOINT exec java -XX:+UnlockExperimentalVMOptions $JAVA_OPTS $REFLEC_OPTS $AGENT $SKYWALKING_OPTS -jar /ps-iam-saas.jar

8、编辑docker-compose.yml

$ vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
hzero-platform:
image: hzero-iam-saas-jk-demo:1.12
container_name: hzero-iam-saas
ports:
– “8030:8030”
– “8031:8031”
environment:
– JAVA_OPTS=-Xms400m -Xmx400m -Dspring.profiles.active=dev
– AGENT=-javaagent:/license-agent112a.jar
– REFLEC_OPTS=–add-opens java.base/java.lang=ALL-UNNAMED –add-opens java.base/java.util=ALL-UNNAMED –add-opens java.base/java.util.concurrent=ALL-UNNAMED –add-opens java.base/jdk.internal.loader=ALL-UNNAMED –add-opens java.base/java.net=ALL-UNNAMED –add-opens java.base/java.nio=ALL-UNNAMED –add-opens java.base/java.lang.reflect=ALL-UNNAMED
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 800m # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)
networks:
default:
name: hzero-demo

external: true

8、构建Docker镜像
$ cd /d01/hzero-dockers/hzero-iam-saas-docker
$ docker build -t hzero-iam-saas-jk-demo:1.12 .
构建成功:
$ docker images | grep iam-saas
9、测试Docker镜像
测试之前先确保 redis-docker 和 mysql-docker,hzero-register , hzero-admin容器已经启动:
$ cd /d01/hzero-dockers/hzero-iam-saas-docker
$ docker compose up -d
看日志:docker logs hzero-iam-saas
看起来是正常启动了,访问数据库也都正常
测试web服务:(可以正常访问)
http://localhost:8030

关闭docker容器:

cd /d01/hzero-dockers/hzero-admin-docker/
docker compose down
cd /d01/hzero-dockers/hzero-iam-saas-docker/
docker compose down
cd /d01/hzero-dockers/hzero-license-docker/
docker compose down
cd /d01/hzero-dockers/hzero-platform-docker/
docker compose down
cd /d01/hzero-dockers/hzero-register-docker/
docker compose down
cd /d01/hzero-dockers/mysql-docker/
docker compose down
cd /d01/hzero-dockers/redis-docker/

docker compose down

==================================================

7、制作HZERO PaaS 平台 1.12版本的Demo环境的HZERO 微服务-OAUTH认证 ps-oauth 镜像

一、来源环境:
环境:WSL:Ubuntu-22.04-hzero系统
1、来源环境先备份
$ cd /d02/hzero/project/ps-oauth/src/main/resources
$ cp application.yml application.wsl.ok.yml
$ cp bootstrap.yml bootstrap.wsl.ok.yml
$ cd /d02/hzero/project/ps-oauth/target
$ cp ps-oauth.jar ps-oauth.wsl.ok.jar
2、更改yml配置文件
application.yml中 mysql数据库的主机域名改成Docker compose容器名 :mysql-hzero
 url: ${SPRING_DATASOURCE_URL:jdbc:mysql://mysql-hzero:3306/hzero_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true}
application.yml中 redis数据库的主机域名 改成Docker composer容器名 :redis-hzero
  redis:
  host: ${SPRING_DATA_REDIS_HOST:redis-hzero}
application.yml中 数据库的主机域名 改成Docker composer容器名 :redis-hzero
application.yml中 网关主机域名 改成Docker composer容器名 :hzero-gateway
# oauth 服务基础地址
base-url: ${HZERO_OAUTH_BASE_URL:http://hzero-gateway:8080/oauth}
bootstrap.yml 中 注册中心的主机域名地址改成docker compose容器名 :hzero-register
  # 注册中心地址
  defaultZone: ${EUREKA_DEFAULT_ZONE:http://hzero-register:8000/eureka}
bootstrap.yml中 配置中心的主机域名地址改成docker compose容器名:hzero-admin
  # 配置中心地址
  uri: ${SPRING_CLOUD_CONFIG_URI:http://hzero-admin:8060/hadm/config}
去掉:
preferred-networks[0]: ${PREFERRED_IP}
增加
ignored-interfaces:
– lo
– docker0
– veth.*
3、复制Jar包构建脚本:
$ cp /d02/hzero/project/ps-register/build.sh /d02/hzero/project/ps-oauth/
4、构建适合Docker的Jar包
$ cd /d02/hzero/project/ps-oauth/
$ bash build.sh
二、目标环境:
环境:WSL:Ubuntu-22.04系统
5、建立hzero-oauth-docker目录
$ cd /d01/hzero-dockers
$ mkdir hzero-oauth-docker
6、拷贝Jar包到目标环境
  在windows powershell 中执行
$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-oauth\target\ps-oauth.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-oauth-docker\
7、编辑Dockerfile
$ cd /d01/hzero-dockers/hzero-oauth-docker

$ vi Dockerfile

FROM registry.cn-shanghai.aliyuncs.com/c7n/javabase:17
COPY ps-oauth.jar /ps-oauth.jar
ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

ENTRYPOINT exec java -XX:+UnlockExperimentalVMOptions $JAVA_OPTS $REFLEC_OPTS $AGENT $SKYWALKING_OPTS -jar /ps-oauth.jar

8、编辑docker-compose.yml

$ vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
hzero-oauth:
image: hzero-oauth-jk-demo:1.12
container_name: hzero-oauth
ports:
– “8020:8020”
– “8021:8021”
environment:
– JAVA_OPTS=-Xms200m -Xmx200m -Dspring.profiles.active=dev
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 500m # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)
networks:
default:
name: hzero-demo

external: true

9、构建Docker镜像
$ cd /d01/hzero-dockers/hzero-oauth-docker
$ docker build -t hzero-oauth-jk-demo:1.12 .
构建成功:
$ docker images | grep oauth
hzero-oauth-jk-demo 1.12 f8d746ca59db 20 seconds ago 1.04GB
10、测试Docker镜像

测试之前先确保 redis-docker 和 mysql-docker,hzero-register , hzero-admin容器已经启动:

cd /d01/hzero-dockers/redis-docker/
docker compose up -d
cd /d01/hzero-dockers/mysql-docker/
docker compose up -d

延时120秒

sleep 120
$ cd /d01/hzero-dockers/hzero-register-docker/
docker compose up -d
cd /d01/hzero-dockers/hzero-admin-docker/
docker compose up -d
cd /d01/hzero-dockers/hzero-oauth-docker

docker compose up -d

看日志:
$ docker logs hzero-oauth
看起来是正常启动了,访问数据库也都正常

==================================================

8、制作HZERO PaaS 平台 1.12版本的Demo环境的HZERO 微服务-网关服务 ps-gateway 镜像

一、来源环境:
环境:WSL:Ubuntu-22.04-hzero系统
1、来源环境先备份
$ cd /d02/hzero/project/ps-gateway/src/main/resources
$ cp application.yml application.wsl.ok.yml
$ cp bootstrap.yml bootstrap.wsl.ok.yml
$ cd /d02/hzero/project/ps-gateway/target
cp ps-gateway.jar ps-gateway.wsl.ok.jar
2、更改yml配置文件
application.yml中 mysql数据库的主机域名改成Docker compose容器名 :mysql-hzero
 url: ${SPRING_DATASOURCE_URL:jdbc:mysql://mysql-hzero:3306/hzero_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true}
application.yml中 redis数据库的主机域名 改成Docker composer容器名 :redis-hzero
  redis:
  host: ${SPRING_DATA_REDIS_HOST:redis-hzero}
application.yml中 数据库的主机域名 改成Docker composer容器名 :redis-hzero
application.yml中 网关主机域名 改成Docker composer容器名 :hzero-gateway
# oauth 服务基础地址
base-url: ${HZERO_OAUTH_BASE_URL:http://hzero-gateway:8080/oauth}
bootstrap.yml 中 注册中心的主机域名地址改成docker compose容器名 :hzero-register
  # 注册中心地址
  defaultZone: ${EUREKA_DEFAULT_ZONE:http://hzero-register:8000/eureka}
bootstrap.yml中 配置中心的主机域名地址改成docker compose容器名:hzero-admin
  # 配置中心地址
  uri: ${SPRING_CLOUD_CONFIG_URI:http://hzero-admin:8060/hadm/config}
去掉:
preferred-networks[0]: ${PREFERRED_IP}
增加
ignored-interfaces:
– lo
– docker0
– veth.*
3、复制Jar包构建脚本:
$ cp /d02/hzero/project/ps-register/build.sh /d02/hzero/project/ps-gateway/
4、构建适合Docker的Jar包
$ cd /d02/hzero/project/ps-gateway/
$ bash build.sh
二、目标环境:
环境:WSL:Ubuntu-22.04系统
5、建立hzero-oauth-docker目录
$ cd /d01/hzero-dockers
$ mkdir hzero-gateway-docker
6、拷贝Jar包到目标环境
  在windows powershell 中执行
$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-gateway\target\ps-gateway.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-gateway-docker\
7、编辑Dockerfile
$ cd /d01/hzero-dockers/hzero-gateway-docker

$ vi Dockerfile

FROM registry.cn-shanghai.aliyuncs.com/c7n/javabase:17
COPY ps-gateway.jar /ps-gateway.jar
ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

ENTRYPOINT exec java -XX:+UnlockExperimentalVMOptions $JAVA_OPTS $REFLEC_OPTS $AGENT $SKYWALKING_OPTS -jar /ps-gateway.jar

8、编辑docker-compose.yml

$ vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
hzero-gateway:
image: hzero-gateway-jk-demo:1.12
container_name: hzero-gateway
ports:
– “8080:8080”
– “8081:8081”
environment:
– JAVA_OPTS=-Xms200m -Xmx200m -Dspring.profiles.active=dev
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 500m # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)
networks:
default:
name: hzero-demo

external: true

9、构建Docker镜像
$ cd /d01/hzero-dockers/hzero-gateway-docker
$ docker build -t hzero-gateway-jk-demo:1.12 .
构建成功:
$ docker images | grep gateway
10、测试Docker镜像
测试之前先确保 redis-docker 和 mysql-docker,hzero-register , hzero-admin容器已经启动:
$ cd /d01/hzero-dockers/hzero-gateway-docker
$ docker compose up -d
看日志:docker logs hzero-gateway
看起来是正常启动了,访问数据库也都正常
测试web服务:(不可正常访问)
http://localhost:8080
返回:
{“failed”:true,”code”:”error.permission.routeNotFound”,”message”:”This request mismatch any routes, uri: %2F”,”type”:”PERMISSION_SERVICE_ROUTE”,”detailsMessage”:”The route you visited does not exist or the related service is not installed”}
表示已经在服务了,成功。

==================================================

9、启动docker compose 容器 mongo-hzero

二、目标环境:
环境:WSL:Ubuntu-22.04系统
1、建立mongo-docker目录
$ cd /d01/hzero-dockers
$ mkdir mongo-docker
$ cd /d01/hzero-dockers/volumes
$ mkdir mongo
$ cd /d01/hzero-dockers/mongo-docker
$ sudo chown -R 1000:1000 ../volumes/mongo
$ sudo chmod -R 755 ../volumes/mongo

$ vi mongo-init.js

db.createUser({
user: “hzero”,
pwd: “hzero”,
roles: [
{ role: “readWrite”, db: “test” }
]

});

2、编辑docker-compose.yml

$ vi docker-compose.yml

services:
mongo-hzero:
image: registry.hand-china.com/hzero-public/mongo:5.0.25
container_name: mongo-hzero
user: “1000:1000” # 添加这一行,指定 mongo 用户
ports:
– “27017:27017”
environment:
– MONGO_INITDB_ROOT_USERNAME=hzero
– MONGO_INITDB_ROOT_PASSWORD=hzero
– MONGO_INITDB_DATABASE=test
volumes:
– ${DOCKER_VOLUME_DIRECTORY:-../volumes}/mongo:/data/db
– ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro
networks:
default:
name: hzero-demo

external: true

3、测试Docker 容器
$ cd /d01/hzero-dockers/mongo-docker
$ docker compose up -d
看日志:docker logs mongo-hzero
启动成功

==================================================

10、启动docker compose 容器 elasticsearch-hzero

二、目标环境:
环境:WSL:Ubuntu-22.04系统
1、建立elasticsearch-docker目录
$ cd /d01/hzero-dockers
$ mkdir elasticsearch-docker
$ mkdir volumes
$ cd /d01/hzero-dockers/elasticsearch-docker

windows powershell 中 执行:原有demo数据迁移(包括AI平台的向量数据和关键字索引):

$ cp -r \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero-aipaas\hzero-aigc-docker-compose\elastic\volumes\elastic \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\volumes\

设置 Elasticsearch 数据目录的所有者为 UID=1000 的用户

$ cd /d01/hzero-dockers/elasticsearch-docker
$ sudo chown -R 1000:1000 ../volumes/elastic
$ sudo chmod -R 755 ../volumes/elastic
2、编辑docker-compose.yml

$ vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
elasticsearch-hzero:
image: registry.hand-china.com/hzero-public/elasticsearch:8.12.2
container_name: elasticsearch-hzero
user: “1000:1000” # 添加这一行,指定 Elasticsearch 用户
ports:
– “9200:9200”
– “9300:9300”
environment:
– ELASTIC_PASSWORD=elastic
– discovery.type=single-node
– xpack.security.enrollment.enabled=true
– xpack.security.enabled=true
– ES_JAVA_OPTS=-Xms1g -Xmx1g # 设置 JVM 堆内存为 500M
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 2g # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)
volumes:
– ${DOCKER_VOLUME_DIRECTORY:-../volumes}/elastic/data:/usr/share/elasticsearch/data
– ${DOCKER_VOLUME_DIRECTORY:-../volumes}/elastic/plugins:/usr/share/elasticsearch/plugins
networks:
default:
name: hzero-demo

external: true

3、测试Docker 容器
$ cd /d01/hzero-dockers/elasticsearch-docker
$ docker compose up -d
看日志:docker logs elasticsearch-docker
启动成功

==================================================

11、启动docker compose 容器 minio-hzero

二、目标环境:
环境:WSL:Ubuntu-22.04系统
1、建立minio-docker目录
$ cd /d01/hzero-dockers
$ mkdir minio-docker
$ cd volumes
$ mkdir minio
$ cd /d01/hzero-dockers/minio-docker

windows powershell 中执行:原有Demo数据迁移(包括AI平台中的文档)

$ cp -r \wsl.localhost\Ubuntu-22.04-hzero\data\minio \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\volumes\

设置 minio 数据目录的所有者为 UID=1000 的用户

$ cd /d01/hzero-dockers/minio-docker
$ sudo chown -R 1000:1000 ../volumes/minio
$ sudo chmod -R 755 ../volumes/minio
2、编辑docker-compose.yml

$ vi docker-compose.yml

services:
minio-hzero:
image: minio/minio:latest
container_name: minio-hzero
user: “1000:1000” # 添加这一行,指定minio 用户
ports:
– “9000:9000” # MinIO API 端口
– “9001:9001” # MinIO 控制台端口
environment:
– MINIO_ROOT_USER=hzero.admin
– MINIO_ROOT_PASSWORD=hzero.hand.2020.
– MINIO_ACCESS_KEY=hzero.admin # 兼容旧版配置
– MINIO_SECRET_KEY=hzero.hand.2020. # 兼容旧版配置
volumes:
– ${DOCKER_VOLUME_DIRECTORY:-../volumes}/minio:/data # 挂载原有数据目录
command: server /data –address “:9000” –console-address “:9001”
restart: always
networks:
default:
name: hzero-demo

external: true

3、测试Docker 容器
$ cd /d01/hzero-dockers/minio-docker
$ docker compose up -d
看日志:docker logs minio-hzero
启动成功

==================================================

12、制作HZERO PaaS 平台 1.12版本的Demo环境的HZERO 微服务-接口平台 ps-interface 镜像

一、来源环境:
环境:WSL:Ubuntu-22.04-hzero系统
1、来源环境先备份
$ cd /d02/hzero-ipaas/project/ps-jipaas-interface/src/main/resources
$ cp application.yml application.wsl.ok.yml
$ cp bootstrap.yml bootstrap.wsl.ok.yml
$ cd /d02/hzero-ipaas/project/ps-jipaas-interface/target
$ cp ps-jipaas-interface.jar ps-jipaas-interface.wsl.ok.jar
2、更改yml配置文件
application.yml中 数据库的主机域名改成Docker compose容器名 :mysql-hzero
 url: ${SPRING_DATASOURCE_URL:jdbc:mysql://mysql-hzero:3306/hzero_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true}
application.yml中 redis数据库的主机域名 改成Docker composer容器名 :redis-hzero
  redis:
  host: ${SPRING_DATA_REDIS_HOST:redis-hzero}
application.yml中 mongo数据库主机域名改成Docker composer容器名 :mongo-hzero
mongodb:
uri: ${SPRING_MONGODB_URI:mongodb://hzero:hzero@mongo-hzero:27017/test}
elasticsearch:
application.yml中 elasticsearch数据库主机域名
# 地址,支持多地址,逗号分隔
host: ${ELASTICSEARCH_HOST:elasticsearch-hzero}

bootstrap.yml 中 注册中心的主机域名地址改成docker compose容器名 :hzero-register
  # 注册中心地址
  defaultZone: ${EUREKA_DEFAULT_ZONE:http://hzero-register:8000/eureka}
bootstrap.yml中 配置中心的主机域名地址改成docker compose容器名:hzero-admin
  # 配置中心地址
  uri: ${SPRING_CLOUD_CONFIG_URI:http://hzero-admin:8060/hadm/config}
去掉:
preferred-networks[0]: ${PREFERRED_IP}
增加
ignored-interfaces:
– lo
– docker0
– veth.*
3、复制Jar包构建脚本:
$ cp /d02/hzero/project/ps-register/build.sh /d02/hzero-ipaas/project/ps-jipaas-interface/
4、构建适合Docker的Jar包
$ cd /d02/hzero-ipaas/project/ps-jipaas-interface/
$ bash build.sh
二、目标环境:
环境:WSL:Ubuntu-22.04系统
5、建立hzero-interface-docker目录
$ cd /d01/hzero-dockers
$ mkdir hzero-interface-docker
6、拷贝Jar包到目标环境
  在windows powershell 中执行
$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero-ipaas\project\ps-jipaas-interface\target\ps-jipaas-interface.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-interface-docker\
$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-license\licenseAgent\license-agent110.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-interface-docker\
7、编辑Dockerfile
$ cd /d01/hzero-dockers/hzero-interface-docker

$ vi Dockerfile

FROM registry.cn-shanghai.aliyuncs.com/c7n/javabase:17
COPY ps-jipaas-interface.jar /ps-jipaas-interface.jar
COPY license-agent110.jar /license-agent110.jar
ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

ENTRYPOINT exec java -XX:+UnlockExperimentalVMOptions $JAVA_OPTS $REFLEC_OPTS $AGENT $SKYWALKING_OPTS -jar /ps-jipaas-interface.jar

8、编辑docker-compose.yml

$ vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
hzero-interface:
image: hzero-jipaas-interface-jk-demo:1.12
container_name: hzero-interface
ports:
– “8150:8150”
– “8151:8151”
environment:
– JAVA_OPTS=-Xms800m -Xmx800m -Dspring.profiles.active=dev
– AGENT=-javaagent:/license-agent110.jar
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 1500m # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)
networks:
default:
name: hzero-demo

external: true

9、构建Docker镜像
$ cd /d01/hzero-dockers/hzero-interface-docker
$ docker build -t hzero-jipaas-interface-jk-demo:1.12 .
构建成功:
$ docker images | grep interface
10、测试Docker镜像
测试之前先确保 redis-docker 和 mysql-docker,hzero-register , hzero-admin,mongo-hzero, elasticsearch-hzero 容器已经启动:
$ cd /d01/hzero-dockers/hzero-interface-docker
$ docker compose up -d
看日志:docker logs hzero-interface

有错误:

For ‘hzero-license’ URL not provided. Will try picking an instance via load-balancing.
For ‘hzero-iam’ URL not provided. Will try picking an instance via load-balancing.
Caused by: java.sql.SQLSyntaxErrorException: Table ‘hzero_interface.iam_role’ doesn’t exist
服务启动没成功,在注册中心未能注册成功。
分析:

iam_role 这张表是在hzero_platform数据库中的,为啥会去hzero_interface数据库中找?奇怪!

可能是license、iam、platform三个服务没有提前启动的原因?
解决方案:

把hzero-license服务 hzero-iam服务 和 hzero-platform 也启动后再启

先停interface服务

$ cd /d01/hzero-dockers/hzero-interface-docker
$ docker compose down

起hzero-license、 hzero-iam、hzero-platform服务

$ cd /d01/hzero-dockers/hzero-license-docker
$ docker compose up -d
$ cd /d01/hzero-dockers/hzero-iam-saas-docker
$ docker compose up -d
$ cd /d01/hzero-dockers/hzero-platform-docker
$ docker compose up -d

再重启interface服务

$ cd /d01/hzero-dockers/hzero-interface-docker
$ docker compose up -d
这次看起来是正常启动了,在注册中心http://localhost:8000中可以看到了,看起来他能找到hzero-iam路由的话,就不会去访问hzero_interface.iam_role,反之就会去访问hzero_interface.iam_role,是实际上hzero_interface数据库中没有iam_role表就出错了。
测试web服务:(可以正常访问)
http://localhost:8150,可以正常转到license服务的Web界面。

==================================================

13、启动docker compose 容器 kkfileview-hzero

二、目标环境:
环境:WSL:Ubuntu-22.04系统
1、建立elasticsearch-docker目录
$ cd /d01/hzero-dockers
$ mkdir kkfileview-docker
2、编辑docker-compose.yml
$ cd /d01/hzero-dockers/kkfileview-docker

$ vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
kkfileview-hzero:
image: keking/kkfileview
container_name: kkfileview-hzero
ports:
– “8012:8012”
networks:
default:
name: hzero-demo

external: true

3、测试Docker 容器
$ cd /d01/hzero-dockers/kkfileview-docker
$ docker compose up -d
看日志:docker logs kkfileview-docker
启动成功
http://localhost:8012 上传一个中文PPT测试预览,正常。

==================================================

14、制作HZERO PaaS 平台 1.12版本的Demo环境的HZERO 微服务-定时任务服务 ps-scheduler 镜像

一、来源环境:
环境:WSL:Ubuntu-22.04-hzero系统
1、来源环境先备份
$ cd /d02/hzero/project/ps-scheduler/src/main/resources
$ cp application.yml application.wsl.ok.yml
$ cp bootstrap.yml bootstrap.wsl.ok.yml
$ cd /d02/hzero/project/ps-scheduler/target
$ cp ps-scheduler.jar ps-scheduler.wsl.ok.jar
2、更改yml配置文件
application.yml中 mysql数据库的主机域名改成Docker compose容器名 :mysql-hzero
 url: ${SPRING_DATASOURCE_URL:jdbc:mysql://mysql-hzero:3306/hzero_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true}

application.yml中 redis数据库的主机域名 改成Docker composer容器名 :redis-hzero

  redis:
  host: ${SPRING_DATA_REDIS_HOST:redis-hzero}

application.yml中 数据库的主机域名 改成Docker composer容器名 :redis-hzero

application.yml中 网关主机域名 改成Docker composer容器名 :hzero-gateway

# oauth 服务基础地址
base-url: ${HZERO_OAUTH_BASE_URL:http://hzero-gateway:8080/oauth}

bootstrap.yml 中 注册中心的主机域名地址改成docker compose容器名 :hzero-register

  # 注册中心地址
  defaultZone: ${EUREKA_DEFAULT_ZONE:http://hzero-register:8000/eureka}

bootstrap.yml中 配置中心的主机域名地址改成docker compose容器名:hzero-admin

  # 配置中心地址
  uri: ${SPRING_CLOUD_CONFIG_URI:http://hzero-admin:8060/hadm/config}
去掉:
preferred-networks[0]: ${PREFERRED_IP}
增加
ignored-interfaces:
– lo
– docker0
– veth.*
3、复制Jar包构建脚本:4、构建适合Docker的Jar包
$ cp /d02/hzero/project/ps-register/build.sh /d02/hzero/project/ps-scheduler/
$ cd /d02/hzero/project/ps-scheduler/
$ bash build.sh
二、目标环境:
环境:WSL:Ubuntu-22.04系统
5、建立hzero-scheduler-docker目录
$ cd /d01/hzero-dockers
$ mkdir hzero-scheduler-docker
6、拷贝Jar包到目标环境

在windows powershell 中执行

$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-scheduler\target\ps-scheduler.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-scheduler-docker\
7、编辑Dockerfile
$ cd /d01/hzero-dockers/hzero-scheduler-docker

$ vi Dockerfile

FROM registry.cn-shanghai.aliyuncs.com/c7n/javabase:17
COPY ps-scheduler.jar /ps-scheduler.jar
ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

ENTRYPOINT exec java -XX:+UnlockExperimentalVMOptions $JAVA_OPTS $REFLEC_OPTS $AGENT $SKYWALKING_OPTS -jar /ps-scheduler.jar

8、编辑docker-compose.yml

vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
hzero-scheduler:
image: hzero-scheduler-jk-demo:1.12
container_name: hzero-scheduler
ports:
– “8130:8130”
– “8131:8131”
environment:
– JAVA_OPTS=-Xms200m -Xmx200m -Dspring.profiles.active=dev
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 500m # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)
networks:
default:
name: hzero-demo

external: true

9、构建Docker镜像
$ cd /d01/hzero-dockers/hzero-scheduler-docker
$ docker build -t hzero-scheduler-jk-demo:1.12 .
构建成功:
$ docker images | grep scheduler
10、测试Docker镜像(测试之前先确保 redis-docker 和 mysql-docker,hzero-register , hzero-admin容器已经启动):
$ cd /d01/hzero-dockers/hzero-scheduler-docker
$ docker compose up -d
看日志:docker logs hzero-scheduler
看起来是正常启动了
http://localhost:8000注册中心中可见hzero-scheduler服务

==================================================

15、制作HZERO PaaS 平台 1.12版本的Demo环境的HZERO 微服务-文件服务 ps-file 镜像

一、来源环境:
环境:WSL:Ubuntu-22.04-hzero系统
1、来源环境先备份
$ cd /d02/hzero/project/ps-file/src/main/resources
$ cp application.yml application.wsl.ok.yml
$ cp bootstrap.yml bootstrap.wsl.ok.yml
$ cd /d02/hzero/project/ps-file/target
$ cp ps-file.jar ps-file.wsl.ok.jar
2、更改yml配置文件
application.yml中 mysql数据库的主机域名改成Docker compose容器名 :mysql-hzero
 url: ${SPRING_DATASOURCE_URL:jdbc:mysql://mysql-hzero:3306/hzero_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true}

application.yml中 redis数据库的主机域名 改成Docker composer容器名 :redis-hzero

  redis:
  host: ${SPRING_DATA_REDIS_HOST:redis-hzero}

application.yml中 数据库的主机域名 改成Docker composer容器名 :redis-hzero

application.yml中 网关主机域名 改成Docker composer容器名 :hzero-gateway

# oauth 服务基础地址
base-url: ${HZERO_OAUTH_BASE_URL:http://hzero-gateway:8080/oauth}

application.yml中 KKV主机域名 改成Docker composer容器名 :kkfileview-hzero

preview-type: kkFileView
kk-file-view-url: http://kkfileview-hzero:8012/onlinePreview   # kkFileView的文件预览地址

bootstrap.yml 中 注册中心的主机域名地址改成docker compose容器名 :hzero-register
  # 注册中心地址
  defaultZone: ${EUREKA_DEFAULT_ZONE:http://hzero-register:8000/eureka}
bootstrap.yml中 配置中心的主机域名地址改成docker compose容器名:hzero-admin
  # 配置中心地址
  uri: ${SPRING_CLOUD_CONFIG_URI:http://hzero-admin:8060/hadm/config}
去掉:
preferred-networks[0]: ${PREFERRED_IP}
增加
ignored-interfaces:
– lo
– docker0
– veth.*
3、复制Jar包构建脚本:
$ cp /d02/hzero/project/ps-register/build.sh /d02/hzero/project/ps-file/
4、构建适合Docker的Jar包
$ cd /d02/hzero/project/ps-file/
$ bash build.sh
二、目标环境:
环境:WSL:Ubuntu-22.04系统
5、建立hzero-file-docker目录
$ cd /d01/hzero-dockers
$ mkdir hzero-file-docker
6、拷贝Jar包到目标环境

在windows powershell 中执行

$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-file\target\ps-file.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-file-docker\
7、编辑Dockerfile
$ cd /d01/hzero-dockers/hzero-file-docker

$ vi Dockerfile

FROM registry.cn-shanghai.aliyuncs.com/c7n/javabase:17
COPY ps-file.jar /ps-file.jar
ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

ENTRYPOINT exec java -XX:+UnlockExperimentalVMOptions $JAVA_OPTS $REFLEC_OPTS $AGENT $SKYWALKING_OPTS -jar /ps-file.jar

8、编辑docker-compose.yml

$ vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
hzero-file:
image: hzero-file-jk-demo:1.12
container_name: hzero-file
ports:
– “8110:8110”
– “8111:8111”
environment:
– JAVA_OPTS=-Xms220m -Xmx220m -Dspring.profiles.active=dev
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 500m # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)
networks:
default:
name: hzero-demo

external: true

9、构建Docker镜像
$ cd /d01/hzero-dockers/hzero-file-docker
$ docker build -t hzero-file-jk-demo:1.12 .
构建成功:
$ docker images | grep file
10、测试Docker镜像(测试之前先确保 redis-docker 和 mysql-docker,hzero-register , hzero-admin容器已经启动):
$ cd /d01/hzero-dockers/hzero-file-docker
$ docker compose up -d
看日志:docker logs hzero-file
看起来是正常启动了
http://localhost:8000注册中心中可见hzero-file服务

==================================================

16、制作HZERO PaaS 平台 1.12版本的Demo环境的HZERO 微服务-预警服务 ps-alert 镜像

一、来源环境:
环境:WSL:Ubuntu-22.04-hzero系统
1、来源环境先备份
$ cd /d02/hzero/project/ps-alert/src/main/resources
$ cp application.yml application.wsl.ok.yml
$ cp bootstrap.yml bootstrap.wsl.ok.yml
$ cd /d02/hzero/project/ps-alert/target
$ cp ps-alert.jar ps-alert.wsl.ok.jar
2、更改yml配置文件
application.yml中 mysql数据库的主机域名改成Docker compose容器名 :mysql-hzero
 url: ${SPRING_DATASOURCE_URL:jdbc:mysql://mysql-hzero:3306/hzero_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true}

application.yml中 redis数据库的主机域名 改成Docker composer容器名 :redis-hzero

  redis:
  host: ${SPRING_DATA_REDIS_HOST:redis-hzero}

application.yml中 数据库的主机域名 改成Docker composer容器名 :redis-hzero

application.yml中 网关主机域名 改成Docker composer容器名 :hzero-gateway

# oauth 服务基础地址
base-url: ${HZERO_OAUTH_BASE_URL:http://hzero-gateway:8080/oauth}

bootstrap.yml 中 注册中心的主机域名地址改成docker compose容器名 :hzero-register

  # 注册中心地址
  defaultZone: ${EUREKA_DEFAULT_ZONE:http://hzero-register:8000/eureka}

bootstrap.yml中 配置中心的主机域名地址改成docker compose容器名:hzero-admin

  # 配置中心地址
  uri: ${SPRING_CLOUD_CONFIG_URI:http://hzero-admin:8060/hadm/config}
去掉:
preferred-networks[0]: ${PREFERRED_IP}
增加
ignored-interfaces:
– lo
– docker0
– veth.*
3、复制Jar包构建脚本:
$ cp /d02/hzero/project/ps-register/build.sh /d02/hzero/project/ps-alert/
4、构建适合Docker的Jar包
$ cd /d02/hzero/project/ps-alert/
$ bash build.sh
二、目标环境:
环境:WSL:Ubuntu-22.04系统
5、建立hzero-file-docker目录
$ cd /d01/hzero-dockers
$ mkdir hzero-alert-docker
6、拷贝Jar包到目标环境

在windows powershell 中执行

$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-alert\target\ps-alert.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-alert-docker\
7、编辑Dockerfile
$ cd /d01/hzero-dockers/hzero-alert-docker

$ vi Dockerfile

FROM registry.cn-shanghai.aliyuncs.com/c7n/javabase:17
COPY ps-alert.jar /ps-alert.jar
ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

ENTRYPOINT exec java -XX:+UnlockExperimentalVMOptions $JAVA_OPTS $REFLEC_OPTS $AGENT $SKYWALKING_OPTS -jar /ps-alert.jar

8、编辑docker-compose.yml

$ vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
hzero-alert:
image: hzero-alert-jk-demo:1.12
container_name: hzero-alert
ports:
– “8115:8115”
– “8116:8116”
environment:
– JAVA_OPTS=-Xms250m -Xmx250m -Dspring.profiles.active=dev
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 500m # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)
networks:
default:
name: hzero-demo

external: true

9、构建Docker镜像
$ cd /d01/hzero-dockers/hzero-alert-docker
$ docker build -t hzero-alert-jk-demo:1.12 .
构建成功:
$ docker images | grep alert
10、测试Docker镜像(测试之前先确保 redis-docker 和 mysql-docker,hzero-register , hzero-admin容器已经启动):
$ cd /d01/hzero-dockers/hzero-alert-docker
$ docker compose up -d
看日志:docker logs hzero-alert
看起来是正常启动了
http://localhost:8000注册中心中可见hzero-alert服务

==================================================

17、制作HZERO PaaS 平台 1.12版本的Demo环境的HZERO 微服务-导入服务 ps-import 镜像

一、来源环境:
环境:WSL:Ubuntu-22.04-hzero系统
1、来源环境先备份
$ cd /d02/hzero/project/ps-import/src/main/resources
$ cp application.yml application.wsl.ok.yml
$ cp bootstrap.yml bootstrap.wsl.ok.yml
$ cd /d02/hzero/project/ps-import/target
$ cp ps-import.jar ps-import.wsl.ok.jar
2、更改yml配置文件
application.yml中 mysql数据库的主机域名改成Docker compose容器名 :mysql-hzero
 url: ${SPRING_DATASOURCE_URL:jdbc:mysql://mysql-hzero:3306/hzero_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true}

application.yml中 redis数据库的主机域名 改成Docker composer容器名 :redis-hzero

  redis:
  host: ${SPRING_DATA_REDIS_HOST:redis-hzero}

application.yml中 数据库的主机域名 改成Docker composer容器名 :redis-hzero

application.yml中 网关主机域名 改成Docker composer容器名 :hzero-gateway

# oauth 服务基础地址
base-url: ${HZERO_OAUTH_BASE_URL:http://hzero-gateway:8080/oauth}

application.yml中 文件网关域名 改成Docker composer容器名 :hzero-gateway

file:
gateway-path: ${FILE_GATEWAY_URL:http://hzero-gateway:8080/himp}

bootstrap.yml 中 注册中心的主机域名地址改成docker compose容器名 :hzero-register

  # 注册中心地址
  defaultZone: ${EUREKA_DEFAULT_ZONE:http://hzero-register:8000/eureka}

bootstrap.yml中 配置中心的主机域名地址改成docker compose容器名:hzero-admin

  # 配置中心地址
  uri: ${SPRING_CLOUD_CONFIG_URI:http://hzero-admin:8060/hadm/config}
去掉:
preferred-networks[0]: ${PREFERRED_IP}
增加
ignored-interfaces:
– lo
– docker0
– veth.*
3、复制Jar包构建脚本:4、构建适合Docker的Jar包
$ cp /d02/hzero/project/ps-register/build.sh /d02/hzero/project/ps-import/
$ cd /d02/hzero/project/ps-import/
$ bash build.sh
二、目标环境:
环境:WSL:Ubuntu-22.04系统
5、建立hzero-import-docker目录
$ cd /d01/hzero-dockers
$ mkdir hzero-import-docker
6、拷贝Jar包到目标环境

在windows powershell 中执行

$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-import\target\ps-import.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-import-docker\
7、编辑Dockerfile
$ cd /d01/hzero-dockers/hzero-import-docker

$ vi Dockerfile

FROM registry.cn-shanghai.aliyuncs.com/c7n/javabase:17
COPY ps-import.jar /ps-import.jar
ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

ENTRYPOINT exec java -XX:+UnlockExperimentalVMOptions $JAVA_OPTS $REFLEC_OPTS $AGENT $SKYWALKING_OPTS -jar /ps-import.jar

8、编辑docker-compose.yml

$ vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
hzero-import:
image: hzero-import-jk-demo:1.12
container_name: hzero-import
ports:
– “8140:8140”
– “8141:8141”
environment:
– JAVA_OPTS=-Xms220m -Xmx220m -Dspring.profiles.active=dev
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 500m # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)
networks:
default:
name: hzero-demo

external: true

9、构建Docker镜像
$ cd /d01/hzero-dockers/hzero-import-docker
$ docker build -t hzero-import-jk-demo:1.12 .
构建成功:
$ docker images | grep import
10、测试Docker镜像(测试之前先确保 redis-docker 和 mysql-docker,hzero-register , hzero-admin容器已经启动):
$ cd /d01/hzero-dockers/hzero-import-docker
$ docker compose up -d
看日志:docker logs hzero-import
看起来是正常启动了
http://localhost:8000注册中心中可见hzero-import服务

==================================================

18、制作HZERO PaaS 平台 1.12版本的Demo环境的HZERO 微服务-消息服务 ps-message 镜像

一、来源环境:
环境:WSL:Ubuntu-22.04-hzero系统
1、来源环境先备份
$ cd /d02/hzero/project/ps-message/src/main/resources
$ cp application.yml application.wsl.ok.yml
$ cp bootstrap.yml bootstrap.wsl.ok.yml
$ cd /d02/hzero/project/ps-message/target
$ cp ps-message.jar ps-message.wsl.ok.jar
2、更改yml配置文件
application.yml中 mysql数据库的主机域名改成Docker compose容器名 :mysql-hzero
 url: ${SPRING_DATASOURCE_URL:jdbc:mysql://mysql-hzero:3306/hzero_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true}

application.yml中 redis数据库的主机域名 改成Docker composer容器名 :redis-hzero

  redis:
  host: ${SPRING_DATA_REDIS_HOST:redis-hzero}

application.yml中 数据库的主机域名 改成Docker composer容器名 :redis-hzero

application.yml中 网关主机域名 改成Docker composer容器名 :hzero-gateway

# oauth 服务基础地址
base-url: ${HZERO_OAUTH_BASE_URL:http://hzero-gateway:8080/oauth}

bootstrap.yml 中 注册中心的主机域名地址改成docker compose容器名 :hzero-register

  # 注册中心地址
  defaultZone: ${EUREKA_DEFAULT_ZONE:http://hzero-register:8000/eureka}

bootstrap.yml中 配置中心的主机域名地址改成docker compose容器名:hzero-admin

  # 配置中心地址
  uri: ${SPRING_CLOUD_CONFIG_URI:http://hzero-admin:8060/hadm/config}
去掉:
preferred-networks[0]: ${PREFERRED_IP}
增加
ignored-interfaces:
– lo
– docker0
– veth.*
3、复制Jar包构建脚本:4、构建适合Docker的Jar包
$ cp /d02/hzero/project/ps-register/build.sh /d02/hzero/project/ps-message/
$ cd /d02/hzero/project/ps-message/
$ bash build.sh
二、目标环境:
环境:WSL:Ubuntu-22.04系统
5、建立hzero-message-docker目录
$ cd /d01/hzero-dockers
$ mkdir hzero-message-docker
6、拷贝Jar包到目标环境

在windows powershell 中执行

$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-message\target\ps-message.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-message-docker\
7、编辑Dockerfile
$ cd /d01/hzero-dockers/hzero-message-docker

$ vi Dockerfile

FROM registry.cn-shanghai.aliyuncs.com/c7n/javabase:17
COPY ps-message.jar /ps-message.jar
ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

ENTRYPOINT exec java -XX:+UnlockExperimentalVMOptions $JAVA_OPTS $REFLEC_OPTS $AGENT $SKYWALKING_OPTS -jar /ps-message.jar

8、编辑docker-compose.yml

$ vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
hzero-message:
image: hzero-message-jk-demo:1.12
container_name: hzero-message
ports:
– “8120:8120”
– “8121:8121”
environment:
– JAVA_OPTS=-Xms250m -Xmx250m -Dspring.profiles.active=dev
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 500m # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)
networks:
default:
name: hzero-demo

external: true

9、构建Docker镜像
$ cd /d01/hzero-dockers/hzero-message-docker
$ docker build -t hzero-message-jk-demo:1.12 .
构建成功:
$ docker images | grep message
10、测试Docker镜像(测试之前先确保 redis-docker 和 mysql-docker,hzero-register , hzero-admin容器已经启动):
$ cd /d01/hzero-dockers/hzero-message-docker
$ docker compose up -d
看日志:docker logs hzero-message
看起来是正常启动了
http://localhost:8000注册中心中可见hzero-import服务

==================================================

19、制作HZERO PaaS 平台 1.12版本的Demo环境的HZERO 微服务-消息服务 ps-report 镜像

一、来源环境:
环境:WSL:Ubuntu-22.04-hzero系统
1、来源环境先备份
$ cd /d02/hzero/project/ps-report/src/main/resources
$ cp application.yml application.wsl.ok.yml
$ cp bootstrap.yml bootstrap.wsl.ok.yml
$ cd /d02/hzero/project/ps-report/target
$ cp ps-report.jar ps-report.wsl.ok.jar
2、更改yml配置文件
application.yml中 mysql数据库的主机域名改成Docker compose容器名 :mysql-hzero
 url: ${SPRING_DATASOURCE_URL:jdbc:mysql://mysql-hzero:3306/hzero_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true}

application.yml中 redis数据库的主机域名 改成Docker composer容器名 :redis-hzero

  redis:
  host: ${SPRING_DATA_REDIS_HOST:redis-hzero}

application.yml中 数据库的主机域名 改成Docker composer容器名 :redis-hzero

application.yml中 网关主机域名 改成Docker composer容器名 :hzero-gateway

# oauth 服务基础地址
base-url: ${HZERO_OAUTH_BASE_URL:http://hzero-gateway:8080/oauth}

bootstrap.yml 中 注册中心的主机域名地址改成docker compose容器名 :hzero-register

  # 注册中心地址
  defaultZone: ${EUREKA_DEFAULT_ZONE:http://hzero-register:8000/eureka}

bootstrap.yml中 配置中心的主机域名地址改成docker compose容器名:hzero-admin

  # 配置中心地址
  uri: ${SPRING_CLOUD_CONFIG_URI:http://hzero-admin:8060/hadm/config}
去掉:
preferred-networks[0]: ${PREFERRED_IP}
增加
ignored-interfaces:
– lo
– docker0
– veth.*
3、复制Jar包构建脚本:4、构建适合Docker的Jar包
$ cp /d02/hzero/project/ps-register/build.sh /d02/hzero/project/ps-report/
$ cd /d02/hzero/project/ps-report/
$ bash build.sh
二、目标环境:
环境:WSL:Ubuntu-22.04系统
5、建立hzero-report-docker目录
$ cd /d01/hzero-dockers
$ mkdir hzero-report-docker
6、拷贝Jar包到目标环境

在windows powershell 中执行

$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-report\target\ps-report.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-report-docker\
7、编辑Dockerfile
$ cd /d01/hzero-dockers/hzero-report-docker

$ vi Dockerfile

FROM registry.cn-shanghai.aliyuncs.com/c7n/javabase:17
COPY ps-report.jar /ps-report.jar
ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

ENTRYPOINT exec java -XX:+UnlockExperimentalVMOptions $JAVA_OPTS $REFLEC_OPTS $AGENT $SKYWALKING_OPTS -jar /ps-report.jar

8、编辑docker-compose.yml

$ vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
hzero-report:
image: hzero-report-jk-demo:1.12
container_name: hzero-report
ports:
– “8210:8210”
– “8211:8211”
environment:
– JAVA_OPTS=-Xms200m -Xmx800m -Dspring.profiles.active=dev
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 1500m # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)
networks:
default:
name: hzero-demo

external: true

9、构建Docker镜像
$ cd /d01/hzero-dockers/hzero-report-docker
$ docker build -t hzero-report-jk-demo:1.12 .
构建成功:
$ docker images | grep report
10、测试Docker镜像(测试之前先确保 redis-docker 和 mysql-docker,hzero-register , hzero-admin容器已经启动):
$ cd /d01/hzero-dockers/hzero-report-docker
$ docker compose up -d
看日志:docker logs hzero-report
看起来是正常启动了
http://localhost:8000注册中心中可见hzero-report服务

==================================================

20、制作HZERO PaaS 平台 1.12版本的Demo环境的HZERO 微服务-API文档服务 ps-swagger 镜像

一、来源环境:
环境:WSL:Ubuntu-22.04-hzero系统
1、来源环境先备份
$ cd /d02/hzero/project/ps-swagger/src/main/resources
$ cp application.yml application.wsl.ok.yml
$ cp bootstrap.yml bootstrap.wsl.ok.yml
$ cd /d02/hzero/project/ps-swagger/target
$ cp ps-swagger.jar ps-swagger.wsl.ok.jar
2、更改yml配置文件
application.yml中 mysql数据库的主机域名改成Docker compose容器名 :mysql-hzero
 url: ${SPRING_DATASOURCE_URL:jdbc:mysql://mysql-hzero:3306/hzero_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true}

application.yml中 redis数据库的主机域名 改成Docker composer容器名 :redis-hzero

  redis:
  host: ${SPRING_DATA_REDIS_HOST:redis-hzero}

application.yml中 数据库的主机域名 改成Docker composer容器名 :redis-hzero

application.yml中 网关主机域名 改成Docker composer容器名 :hzero-gateway

base-url: ${HZERO_SWAGGER_BASE_URL:http://hzero-gateway:8080}

bootstrap.yml 中 注册中心的主机域名地址改成docker compose容器名 :hzero-register

  # 注册中心地址
  defaultZone: ${EUREKA_DEFAULT_ZONE:http://hzero-register:8000/eureka}

bootstrap.yml中 配置中心的主机域名地址改成docker compose容器名:hzero-admin

  # 配置中心地址
  uri: ${SPRING_CLOUD_CONFIG_URI:http://hzero-admin:8060/hadm/config}
去掉:
preferred-networks[0]: ${PREFERRED_IP}
增加
ignored-interfaces:
– lo
– docker0
– veth.*
3、复制Jar包构建脚本:4、构建适合Docker的Jar包
$ cp /d02/hzero/project/ps-register/build.sh /d02/hzero/project/ps-swagger/
$ cd /d02/hzero/project/ps-swagger/
$ bash build.sh
二、目标环境:
环境:WSL:Ubuntu-22.04系统
5、建立hzero-swagger-docker目录
$ cd /d01/hzero-dockers
$ mkdir hzero-swagger-docker
6、拷贝Jar包到目标环境

在windows powershell 中执行

$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-swagger\target\ps-swagger.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-swagger-docker\
7、编辑Dockerfile
$ cd /d01/hzero-dockers/hzero-swagger-docker

$ vi Dockerfile

FROM registry.cn-shanghai.aliyuncs.com/c7n/javabase:17
COPY ps-swagger.jar /ps-swagger.jar
ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

ENTRYPOINT exec java -XX:+UnlockExperimentalVMOptions $JAVA_OPTS $REFLEC_OPTS $AGENT $SKYWALKING_OPTS -jar /ps-swagger.jar

8、编辑docker-compose.yml

$ vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
hzero-swagger:
image: hzero-swagger-jk-demo:1.12
container_name: hzero-swagger
ports:
– “8050:8050”
– “8051:8051”
environment:
– JAVA_OPTS=-Xms200m -Xmx800m -Dspring.profiles.active=dev
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 1500m # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)
networks:
default:
name: hzero-demo

external: true

9、构建Docker镜像
$ cd /d01/hzero-dockers/hzero-swagger-docker
$ docker build -t hzero-swagger-jk-demo:1.12 .
构建成功:
$ docker images | grep swagger
10、测试Docker镜像(测试之前先确保 redis-docker 和 mysql-docker,hzero-register , hzero-admin容器已经启动):
$ cd /d01/hzero-dockers/hzero-swagger-docker
$ docker compose up -d
看日志:docker logs hzero-swagger
看起来是正常启动了
http://localhost:8000注册中心中可见hzero-swagger服务

==================================================

21、制作HZERO PaaS 平台 1.12版本的Demo环境的HZERO 微服务-低代码模型服务 ps-modeler 镜像

一、来源环境:
环境:WSL:Ubuntu-22.04-hzero系统
1、来源环境先备份
$ cd /d02/hzero-apaas/project/ps-modeler/src/main/resources
$ cp application.yml application.wsl.ok.yml
$ cp bootstrap.yml bootstrap.wsl.ok.yml
$ cd /d02/hzero-apaas/project/ps-modeler/target
$ cp ps-modeler.jar ps-modeler.wsl.ok.jar
2、更改yml配置文件
application.yml中 数据库的主机域名改成Docker compose容器名 :mysql-hzero
 url: ${SPRING_DATASOURCE_URL:jdbc:mysql://mysql-hzero:3306/hzero_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true}
application.yml中 redis数据库的主机域名 改成Docker composer容器名 :redis-hzero
  redis:
  host: ${SPRING_DATA_REDIS_HOST:redis-hzero}
application.yml中 seta注册主机域名改成Docker composer容器名 :hzero-register
service-url: ${EUREKA_DEFAULT_ZONE:http://hzero-register:8000/eureka}
bootstrap.yml 中 注册中心的主机域名地址改成docker compose容器名 :hzero-register
  # 注册中心地址
  defaultZone: ${EUREKA_DEFAULT_ZONE:http://hzero-register:8000/eureka}
bootstrap.yml中 配置中心的主机域名地址改成docker compose容器名:hzero-admin
  # 配置中心地址
  uri: ${SPRING_CLOUD_CONFIG_URI:http://hzero-admin:8060/hadm/config}
去掉:
preferred-networks[0]: ${PREFERRED_IP}
增加
ignored-interfaces:
– lo
– docker0
– veth.*
3、复制Jar包构建脚本:4、构建适合Docker的Jar包
$ cp /d02/hzero/project/ps-register/build.sh /d02/hzero-apaas/project/ps-modeler/
$ cd /d02/hzero-apaas/project/ps-modeler/
$ bash build.sh
二、目标环境:
环境:WSL:Ubuntu-22.04系统
5、建立hzero-modeler-docker目录
$ cd /d01/hzero-dockers
$ mkdir hzero-modeler-docker
6、拷贝Jar包到目标环境

在windows powershell 中执行

$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero-apaas\project\ps-modeler\target\ps-modeler.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-modeler-docker\
$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-license\licenseAgent\license-agent112a.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-modeler-docker\
7、编辑Dockerfile
$ cd /d01/hzero-dockers/hzero-modeler-docker

$ vi Dockerfile

FROM registry.cn-shanghai.aliyuncs.com/c7n/javabase:17
COPY ps-modeler.jar /ps-modeler.jar
COPY license-agent112a.jar /license-agent112a.jar
ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

ENTRYPOINT exec java -XX:+UnlockExperimentalVMOptions $JAVA_OPTS $REFLEC_OPTS $AGENT $SKYWALKING_OPTS -jar /ps-modeler.jar

8、编辑docker-compose.yml

$ vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
hzero-modeler:
image: hzero-modeler-jk-demo:1.12
container_name: hzero-modeler
ports:
– “8085:8085”
– “8086:8086”
environment:
– JAVA_OPTS=-Xms500m -Xmx800m -Dspring.profiles.active=dev
– AGENT=-javaagent:/license-agent112a.jar
– REFLEC_OPTS=–add-opens java.base/java.lang=ALL-UNNAMED –add-opens java.base/java.util=ALL-UNNAMED –add-opens java.base/java.util.concurrent=ALL-UNNAMED –add-opens java.base/jdk.internal.loader=ALL-UNNAMED –add-opens java.base/java.net=ALL-UNNAMED –add-opens java.base/java.nio=ALL-UNNAMED –add-opens java.base/java.lang.reflect=ALL-UNNAMED
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 1500m # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)
networks:
default:
name: hzero-demo

external: true

9、构建Docker镜像
$ cd /d01/hzero-dockers/hzero-modeler-docker
$ docker build -t hzero-modeler-jk-demo:1.12 .
构建成功:
$ docker images | grep modeler
10、测试Docker镜像
测试之前先确保 redis-docker 和 mysql-docker,hzero-register , hzero-admin 容器已经启动:
$ cd /d01/hzero-dockers/hzero-modeler-docker
$ docker compose up -d
看日志:docker logs hzero-modeler
测试web服务:(可以正常访问)
http://localhost:8000,可以看到hzero-modeler已经成功注册。

==================================================

22、制作HZERO PaaS 平台 1.12版本的Demo环境的HZERO 微服务-低代码应用服务 ps-lowcode 镜像

一、来源环境:
环境:WSL:Ubuntu-22.04-hzero系统
1、来源环境先备份
$ cd /d02/hzero-apaas/project/ps-lowcode/src/main/resources
$ cp application.yml application.wsl.ok.yml
$ cp bootstrap.yml bootstrap.wsl.ok.yml
$ cd /d02/hzero-apaas/project/ps-lowcode/target
$ cp ps-lowcode.jar ps-lowcode.wsl.ok.jar
2、更改yml配置文件
application.yml中 数据库的主机域名改成Docker compose容器名 :mysql-hzero
 url: ${SPRING_DATASOURCE_URL:jdbc:mysql://mysql-hzero:3306/hzero_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true}
application.yml中 redis数据库的主机域名 改成Docker composer容器名 :redis-hzero
  redis:
  host: ${SPRING_DATA_REDIS_HOST:redis-hzero}
application.yml中 seta注册主机域名改成Docker composer容器名 :hzero-register
service-url: ${EUREKA_DEFAULT_ZONE:http://hzero-register:8000/eureka}
bootstrap.yml 中 注册中心的主机域名地址改成docker compose容器名 :hzero-register
  # 注册中心地址
  defaultZone: ${EUREKA_DEFAULT_ZONE:http://hzero-register:8000/eureka}
bootstrap.yml中 配置中心的主机域名地址改成docker compose容器名:hzero-admin
  # 配置中心地址
  uri: ${SPRING_CLOUD_CONFIG_URI:http://hzero-admin:8060/hadm/config}
去掉:
preferred-networks[0]: ${PREFERRED_IP}
增加
ignored-interfaces:
– lo
– docker0
– veth.*
3、复制Jar包构建脚本:4、构建适合Docker的Jar包
$ cp /d02/hzero/project/ps-register/build.sh /d02/hzero-apaas/project/ps-lowcode/
$ cd /d02/hzero-apaas/project/ps-lowcode/
$ bash build.sh
二、目标环境:
环境:WSL:Ubuntu-22.04系统
5、建立hzero-lowcode-docker目录
$ cd /d01/hzero-dockers
$ mkdir hzero-lowcode-docker
6、拷贝Jar包到目标环境

在windows powershell 中执行

$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero-apaas\project\ps-lowcode\target\ps-lowcode.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-lowcode-docker\
$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-license\licenseAgent\license-agent112a.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-lowcode-docker\
7、编辑Dockerfile
$ cd /d01/hzero-dockers/hzero-lowcode-docker

$ vi Dockerfile

FROM registry.cn-shanghai.aliyuncs.com/c7n/javabase:17
COPY ps-lowcode.jar /ps-lowcode.jar
COPY license-agent112a.jar /license-agent112a.jar
ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

ENTRYPOINT exec java -XX:+UnlockExperimentalVMOptions $JAVA_OPTS $REFLEC_OPTS $AGENT $SKYWALKING_OPTS -jar /ps-lowcode.jar

8、编辑docker-compose.yml

$ vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
hzero-lowcode:
image: hzero-lowcode-jk-demo:1.12
container_name: hzero-lowcode
ports:
– “8095:8095”
– “8096:8096”
environment:
– JAVA_OPTS=-Xms500m -Xmx800m -Dspring.profiles.active=dev
– AGENT=-javaagent:/license-agent112a.jar
– REFLEC_OPTS=–add-opens java.base/java.lang=ALL-UNNAMED –add-opens java.base/java.util=ALL-UNNAMED –add-opens java.base/java.util.concurrent=ALL-UNNAMED –add-opens java.base/jdk.internal.loader=ALL-UNNAMED –add-opens java.base/java.net=ALL-UNNAMED –add-opens java.base/java.nio=ALL-UNNAMED –add-opens java.base/java.lang.reflect=ALL-UNNAMED
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 1500m # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)
networks:
default:
name: hzero-demo

external: true

9、构建Docker镜像
$ cd /d01/hzero-dockers/hzero-lowcode-docker
$ docker build -t hzero-lowcode-jk-demo:1.12 .
构建成功:
$ docker images | grep lowcode
10、测试Docker镜像
测试之前先确保 redis-docker 和 mysql-docker,hzero-register , hzero-admin 容器已经启动:
$ cd /d01/hzero-dockers/hzero-lowcode-docker
$ docker compose up -d
看日志:docker logs hzero-lowcode
测试web服务:(可以正常访问)
http://localhost:8000,可以看到hzero-lowcode已经成功注册。

==================================================

23、制作HZERO PaaS 平台 1.12版本的Demo环境的HZERO 微服务-低代码空数据服务 ps-lowcodedata 镜像

一、来源环境:
环境:WSL:Ubuntu-22.04-hzero系统
1、来源环境先备份
$ cd /d02/hzero-apaas/project/ps-lowcodedata/src/main/resources
$ cp application.yml application.wsl.ok.yml
$ cp bootstrap.yml bootstrap.wsl.ok.yml
$ cd /d02/hzero-apaas/project/ps-lowcodedata/target
$ cp ps-lowcodedata.jar ps-lowcodedata.wsl.ok.jar
2、更改yml配置文件
application.yml中 数据库的主机域名改成Docker compose容器名 :mysql-hzero
 url: ${SPRING_DATASOURCE_URL:jdbc:mysql://mysql-hzero:3306/hzero_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true}
application.yml中 redis数据库的主机域名 改成Docker composer容器名 :redis-hzero
  redis:
  host: ${SPRING_DATA_REDIS_HOST:redis-hzero}
application.yml中 seta注册主机域名改成Docker composer容器名 :hzero-register
service-url: ${EUREKA_DEFAULT_ZONE:http://hzero-register:8000/eureka}
bootstrap.yml 中 注册中心的主机域名地址改成docker compose容器名 :hzero-register
  # 注册中心地址
  defaultZone: ${EUREKA_DEFAULT_ZONE:http://hzero-register:8000/eureka}
bootstrap.yml中 配置中心的主机域名地址改成docker compose容器名:hzero-admin
  # 配置中心地址
  uri: ${SPRING_CLOUD_CONFIG_URI:http://hzero-admin:8060/hadm/config}
去掉:
preferred-networks[0]: ${PREFERRED_IP}
增加
ignored-interfaces:
– lo
– docker0
– veth.*
3、复制Jar包构建脚本:4、构建适合Docker的Jar包
$ cp /d02/hzero/project/ps-register/build.sh /d02/hzero-apaas/project/ps-lowcodedata/
$ cd /d02/hzero-apaas/project/ps-lowcodedata/
$ bash build.sh
二、目标环境:
环境:WSL:Ubuntu-22.04系统
5、建立hzero-lowcodedata-docker目录
$ cd /d01/hzero-dockers
$ mkdir hzero-lowcodedata-docker
6、拷贝Jar包到目标环境
  在windows powershell 中执行
$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero-apaas\project\ps-lowcodedata\target\ps-lowcodedata.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-lowcodedata-docker\
7、编辑Dockerfile
$ cd /d01/hzero-dockers/hzero-lowcodedata-docker

$ vi Dockerfile

FROM registry.cn-shanghai.aliyuncs.com/c7n/javabase:17
COPY ps-lowcodedata.jar /ps-lowcodedata.jar
ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

ENTRYPOINT exec java -XX:+UnlockExperimentalVMOptions $JAVA_OPTS $REFLEC_OPTS $AGENT $SKYWALKING_OPTS -jar /ps-lowcodedata.jar

8、编辑docker-compose.yml

$ vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
hzero-lowcodedata:
image: hzero-lowcodedata-jk-demo:1.12
container_name: hzero-lowcodedata
ports:
– “8555:8555”
– “8556:8556”
environment:
– JAVA_OPTS=-Xms200m -Xmx300m -Dspring.profiles.active=dev
– REFLEC_OPTS=–add-opens java.base/java.lang=ALL-UNNAMED –add-opens java.base/java.util=ALL-UNNAMED –add-opens java.base/java.util.concurrent=ALL-UNNAMED –add-opens java.base/jdk.internal.loader=ALL-UNNAMED –add-opens java.base/java.net=ALL-UNNAMED –add-opens java.base/java.nio=ALL-UNNAMED –add-opens java.base/java.lang.reflect=ALL-UNNAMED
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 600m # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)
networks:
default:
name: hzero-demo

external: true

9、构建Docker镜像
$ cd /d01/hzero-dockers/hzero-lowcodedata-docker
$ docker build -t hzero-lowcodedata-jk-demo:1.12 .
构建成功:
$ docker images | grep lowcodedata
10、测试Docker镜像
测试之前先确保 redis-docker 和 mysql-docker,hzero-register , hzero-admin 容器已经启动:
$ cd /d01/hzero-dockers/hzero-lowcodedata-docker
$ docker compose up -d
看日志:docker logs hzero-lowcodedata
测试web服务:(可以正常访问)
http://localhost:8000,可以看到hzero-lowcodedata已经成功注册。

==================================================

24、制作HZERO PaaS 平台 1.12版本的Demo环境的HZERO 微服务-集成平台前置机 ps-frontal 镜像

一、来源环境:
环境:WSL:Ubuntu-22.04-hzero系统
1、来源环境先备份
$ cd /d02/hzero-ipaas/project/ps-frontal/src/main/resources
$ cp application.yml application.wsl.ok.yml
$ cp bootstrap.yml bootstrap.wsl.ok.yml
$ cd /d02/hzero-ipaas/project/ps-frontal/target
$ cp ps-frontal.jar ps-frontal.wsl.ok.jar
2、更改yml配置文件
application.yml中 数据库的主机域名改成Docker compose容器名 :mysql-hzero
 url: ${SPRING_DATASOURCE_URL:jdbc:mysql://mysql-hzero:3306/hzero_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true}
application.yml中 redis数据库的主机域名 改成Docker composer容器名 :redis-hzero
  redis:
  host: ${SPRING_DATA_REDIS_HOST:redis-hzero}
bootstrap.yml 中 注册中心的主机域名地址改成docker compose容器名 :hzero-register
  # 注册中心地址
  defaultZone: ${EUREKA_DEFAULT_ZONE:http://hzero-register:8000/eureka}
bootstrap.yml中 配置中心的主机域名地址改成docker compose容器名:hzero-admin
  # 配置中心地址
  uri: ${SPRING_CLOUD_CONFIG_URI:http://hzero-admin:8060/hadm/config}
去掉:
preferred-networks[0]: ${PREFERRED_IP}
增加
ignored-interfaces:
– lo
– docker0
– veth.*
3、复制Jar包构建脚本:4、构建适合Docker的Jar包
$ cp /d02/hzero/project/ps-register/build.sh /d02/hzero-ipaas/project/ps-frontal/
$ cd /d02/hzero-ipaas/project/ps-frontal/
$ bash build.sh
二、目标环境:
环境:WSL:Ubuntu-22.04系统
5、建立hzero-frontal-docker目录
$ cd /d01/hzero-dockers
$ mkdir hzero-frontal-docker
6、拷贝Jar包到目标环境

在windows powershell 中执行

$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero-ipaas\project\ps-frontal\target\ps-frontal.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-frontal-docker\
$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-license\licenseAgent\license-agent110.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-frontal-docker\
7、编辑Dockerfile
$ cd /d01/hzero-dockers/hzero-frontal-docker

$ vi Dockerfile

FROM registry.cn-shanghai.aliyuncs.com/c7n/javabase:17
COPY ps-frontal.jar /ps-frontal.jar
COPY license-agent110.jar /license-agent110.jar
ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

ENTRYPOINT exec java -XX:+UnlockExperimentalVMOptions $JAVA_OPTS $REFLEC_OPTS $AGENT $SKYWALKING_OPTS -jar /ps-frontal.jar

8、编辑docker-compose.yml

$ vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
hzero-frontal:
image: hzero-frontal-jk-demo:1.12
container_name: hzero-frontal
ports:
– “8155:8155”
– “8156:8156”
environment:
– JAVA_OPTS=-Xms200m -Xmx350m -Dspring.profiles.active=dev
– AGENT=-javaagent:/license-agent110.jar
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 700m # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)
networks:
default:
name: hzero-demo

external: true

9、构建Docker镜像
$ cd /d01/hzero-dockers/hzero-frontal-docker
$ docker build -t hzero-frontal-jk-demo:1.12 .
构建成功:
$ docker images | grep frontal
10、测试Docker镜像
测试之前先确保 redis-docker 和 mysql-docker,hzero-register , hzero-admin 容器已经启动:
$ cd /d01/hzero-dockers/hzero-frontal-docker
$ docker compose up -d
看日志:docker logs hzero-frontal
看注册中心:
http://localhost:8000,可以看到frontal服务的已经正常注册。

==================================================

25、制作HZERO PaaS 平台 1.12版本的Demo环境的HZERO 微服务-集成平台编排服务 ps-orchestration-all 镜像

一、来源环境:
环境:WSL:Ubuntu-22.04-hzero系统
1、来源环境先备份
$ cd /d02/hzero-ipaas/project/ps-orchestration-all/src/main/resources
$ cp application.yml application.wsl.ok.yml
$ cp bootstrap.yml bootstrap.wsl.ok.yml
$ cd /d02/hzero-ipaas/project/ps-orchestration-all/target
$ cp ps-orchestration-all.jar ps-orchestration-all.wsl.ok.jar
2、更改yml配置文件
application.yml中 数据库的主机域名改成Docker compose容器名 :mysql-hzero
 url: ${SPRING_DATASOURCE_URL:jdbc:mysql://mysql-hzero:3306/hzero_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true}
application.yml中 redis数据库的主机域名 改成Docker composer容器名 :redis-hzero
  redis:
  host: ${SPRING_DATA_REDIS_HOST:redis-hzero}
application.yml中 mongo数据库主机域名改成Docker composer容器名 :mongo-hzero
mongodb:
uri: ${SPRING_MONGODB_URI:mongodb://hzero:hzero@mongo-hzero:27017/test}
elasticsearch:

application.yml中 elasticsearch数据库主机域名

# 地址,支持多地址,逗号分隔
host: ${ELASTICSEARCH_HOST:elasticsearch-hzero}

application.yml中 #seta 注册中心 hzero-register

application.yml中 #orchestration网关:

orchestration:
server-uri: ${HZERO_ORCHESTRATION_SERVER_URI:http://hzero-gateway}
bootstrap.yml 中 注册中心的主机域名地址改成docker compose容器名 :hzero-register
  # 注册中心地址
  defaultZone: ${EUREKA_DEFAULT_ZONE:http://hzero-register:8000/eureka}
bootstrap.yml中 配置中心的主机域名地址改成docker compose容器名:hzero-admin
  # 配置中心地址
  uri: ${SPRING_CLOUD_CONFIG_URI:http://hzero-admin:8060/hadm/config}
去掉:
preferred-networks[0]: ${PREFERRED_IP}
增加
ignored-interfaces:
– lo
– docker0
– veth.*
3、复制Jar包构建脚本:4、构建适合Docker的Jar包
$ cp /d02/hzero/project/ps-register/build.sh /d02/hzero-ipaas/project/ps-orchestration-all/
$ cd /d02/hzero-ipaas/project/ps-orchestration-all/
$ bash build.sh
二、目标环境:
环境:WSL:Ubuntu-22.04系统
5、建立hzero-orchestration-docker目录
$ cd /d01/hzero-dockers
$ mkdir hzero-orchestration-docker
6、拷贝Jar包到目标环境

在windows powershell 中执行

$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero-ipaas\project\ps-orchestration-all\target\ps-orchestration-all.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-orchestration-docker\
$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-license\licenseAgent\license-agent110.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-orchestration-docker\
7、编辑Dockerfile
cd /d01/hzero-dockers/hzero-orchestration-docker

vi Dockerfile

FROM registry.cn-shanghai.aliyuncs.com/c7n/javabase:17
COPY ps-orchestration-all.jar /ps-orchestration-all.jar
COPY license-agent110.jar /license-agent110.jar
ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

ENTRYPOINT exec java -XX:+UnlockExperimentalVMOptions $JAVA_OPTS $REFLEC_OPTS $AGENT $SKYWALKING_OPTS -jar /ps-orchestration-all.jar

8、编辑docker-compose.yml

vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
hzero-orchestration:
image: hzero-orchestration-all-jk-demo:1.12
container_name: hzero-orchestration
ports:
– “8185:8185”
– “8186:8186”
environment:
– JAVA_OPTS=-Xms200m -Xmx350m -Dspring.profiles.active=dev
– AGENT=-javaagent:/license-agent110.jar
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 700m # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)
networks:
default:
name: hzero-demo

external: true

9、构建Docker镜像
$ cd /d01/hzero-dockers/hzero-orchestration-docker
$ docker build -t hzero-orchestration-all-jk-demo:1.12 .
构建成功:
$ docker images | grep orchestration
10、测试Docker镜像
测试之前先确保 redis-docker 和 mysql-docker,hzero-register , hzero-admin 容器已经启动:
$ cd /d01/hzero-dockers/hzero-orchestration-docker
$ docker compose up -d
看日志:docker logs hzero-orchestration
看注册中心:
http://localhost:8000,可以看到orchestration服务的已经正常注册。

==================================================

26、制作HZERO PaaS 平台 1.12版本的Demo环境的HZERO 微服务-流程平台工作流服务 ps-workflow 镜像

一、来源环境:
环境:WSL:Ubuntu-22.04-hzero系统
1、来源环境先备份
$ cd /d02/hzero-bpaas/project/ps-workflow/src/main/resources
$ cp application.yml application.wsl.ok.yml
$ cp bootstrap.yml bootstrap.wsl.ok.yml
$ cd /d02/hzero-bpaas/project/ps-workflow/target
$ cp ps-workflow.jar ps-workflow.wsl.ok.jar
2、更改yml配置文件
application.yml中 数据库的主机域名改成Docker compose容器名 :mysql-hzero
 url: ${SPRING_DATASOURCE_URL:jdbc:mysql://mysql-hzero:3306/hzero_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true}
application.yml中 redis数据库的主机域名 改成Docker composer容器名 :redis-hzero
  redis:
  host: ${SPRING_DATA_REDIS_HOST:redis-hzero}
application.yml中 hzero的lock 用的redis数据库改成:容器名:redis-hzero
hzero:
import:
transaction-control: false
lock:
pattern: single
single-server:
address: ${SPRING_REDIS_HOST:redis-hzero}

bootstrap.yml 中 注册中心的主机域名地址改成docker compose容器名 :hzero-register

  # 注册中心地址
  defaultZone: ${EUREKA_DEFAULT_ZONE:http://hzero-register:8000/eureka}

bootstrap.yml中 配置中心的主机域名地址改成docker compose容器名:hzero-admin

  # 配置中心地址
  uri: ${SPRING_CLOUD_CONFIG_URI:http://hzero-admin:8060/hadm/config}
去掉:
preferred-networks[0]: ${PREFERRED_IP}
增加
ignored-interfaces:
– lo
– docker0
– veth.*
3、复制Jar包构建脚本:4、构建适合Docker的Jar包
$ cp /d02/hzero/project/ps-register/build.sh /d02/hzero-bpaas/project/ps-workflow/
$ cd /d02/hzero-bpaas/project/ps-workflow/
$ bash build.sh
二、目标环境:
环境:WSL:Ubuntu-22.04系统
5、建立hzero-workflow-docker目录
$ cd /d01/hzero-dockers
$ mkdir hzero-workflow-docker
6、拷贝Jar包到目标环境

在windows powershell 中执行

$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero-bpaas\project\ps-workflow\target\ps-workflow.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-workflow-docker\
$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-license\licenseAgent\license-agent112a.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-workflow-docker\

7、编辑Dockerfile
$ cd /d01/hzero-dockers/hzero-workflow-docker

$ vi Dockerfile

FROM registry.cn-shanghai.aliyuncs.com/c7n/javabase:17
COPY ps-workflow.jar /ps-workflow.jar
COPY license-agent112a.jar /license-agent112a.jar
ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

ENTRYPOINT exec java -XX:+UnlockExperimentalVMOptions $JAVA_OPTS $REFLEC_OPTS $AGENT $SKYWALKING_OPTS -jar /ps-workflow.jar

8、编辑docker-compose.yml

$ vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
hzero-workflow:
image: hzero-workflow-jk-demo:1.12
container_name: hzero-workflow
ports:
– “8165:8165”
– “8166:8166”
environment:
– JAVA_OPTS=-Xms500m -Xmx800m -Dspring.profiles.active=dev
– AGENT=-javaagent:/license-agent112a.jar
– REFLEC_OPTS=–add-opens java.base/java.lang=ALL-UNNAMED –add-opens java.base/java.util=ALL-UNNAMED –add-opens java.base/java.util.concurrent=ALL-UNNAMED –add-opens java.base/jdk.internal.loader=ALL-UNNAMED –add-opens java.base/java.net=ALL-UNNAMED –add-opens java.base/java.nio=ALL-UNNAMED –add-opens java.base/java.lang.reflect=ALL-UNNAMED
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 1500m # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)
networks:
default:
name: hzero-demo

external: true

9、构建Docker镜像
$ cd /d01/hzero-dockers/hzero-workflow-docker
$ docker build -t hzero-workflow-jk-demo:1.12 .
构建成功:
$ docker images | grep workflow
10、测试Docker镜像
测试之前先确保 redis-docker 和 mysql-docker,hzero-register , hzero-admin 容器已经启动:
$ cd /d01/hzero-dockers/hzero-workflow-docker
$ docker compose up -d
看日志:docker logs hzero-workflow
启动失败:原因是依赖不满足,这个workflow服务之前构建的jar是可以用的,可以成功启动并注册到注册中心,后来本地maven库更改过,看起来是更改后再次打包的jar有问题了。
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘flowExecuteServiceImpl’ defined in URL [jar:nested:/ps-workflow.jar/!BOOT-INF/lib/hzero-boot-modeler-event-driver-2.10.0-1.12.RELEASE.jar!/org/hzero/boot/modeler/event/domain/service/impl/FlowExecuteServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 4: Error creating bean with name ‘eventEncryptHelper’: Lookup method resolution failed
解决方案:把POM中的这一段去掉,重新构建jar 和docker镜像(不需要其作为低代码领域的业务微服务)

org.hzero.boot hzero-boot-modeler-driver 2.10.0-1.12.RELEASE
org.hzero.boot hzero-boot-modeler-client 2.10.0-1.12.RELEASE
操作:

环境:Ubuntu-22.04-hzero

$ cd /d02/hzero-bpaas/project/ps-workflow
$ cp pom.xml pom.xml.bak20251124-OK
$ cd /d02/hzero-bpaas/project/ps-workflow/
$ bash build.sh

windows 环境 PowShell 执行:

$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero-bpaas\project\ps-workflow\target\ps-workflow.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-workflow-docker\
9、构建Docker镜像
环境:Ubuntu-22.04
$ cd /d01/hzero-dockers/hzero-workflow-docker
$ docker compose down
$ docker build -t hzero-workflow-jk-demo:1.12 .
$ docker compose up -d
看日志,这次成功了,在注册中心可以看到workflow已成功注册。

==================================================

27、制作HZERO PaaS 平台 1.12版本的Demo环境的HZERO 微服务-AI平台APP服务 ps-aip-app 镜像

一、来源环境:
环境:WSL:Ubuntu-22.04-hzero系统
1、来源环境先备份
$ cd /d02/hzero-aipaas/project/ps-aip-app/src/main/resources
$ cp application.yml application.wsl.ok.yml
$ cp bootstrap.yml bootstrap.wsl.ok.yml
$ cd /d02/hzero-aipaas/project/ps-aip-app/target
$ cp ps-aip-app.jar ps-aip-app.wsl.ok.jar
2、更改yml配置文件
application.yml中 数据库的主机域名改成Docker compose容器名 :mysql-hzero
 url: ${SPRING_DATASOURCE_URL:jdbc:mysql://mysql-hzero:3306/hzero_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true}
application.yml中 redis数据库的主机域名 改成Docker composer容器名 :redis-hzero
  redis:
  host: ${SPRING_DATA_REDIS_HOST:redis-hzero}

application.yml中 redis数据库的主机域名 改成Docker composer容器名 :elasticsearch-hzero

elasticsearch:
hosts: ${ELASTICSEARCH_HOSTS:https://elasticsearch-hzero:9200}

application.yml中 python执行器的主机域名 改成Docker composer容器名 :hzero-hype

  python:
    # python脚本执行地址
    gateway-path: ${HZERO_AIP_AGENT_PYTHON_GATEWAY_PATH:http://hype-hzero:10088}

application.yml中 HKMS切片执行器的主机域名 改成Docker composer容器名 :hzero-hkms

  llama:
    gateway-path: ${HZERO_KNOWLEDGE_LLAMA_GATEWAY_PATH:http://hzero-hkms:18080}

bootstrap.yml 中 注册中心的主机域名地址改成docker compose容器名 :hzero-register

  # 注册中心地址
  defaultZone: ${EUREKA_DEFAULT_ZONE:http://hzero-register:8000/eureka}

bootstrap.yml中 配置中心的主机域名地址改成docker compose容器名:hzero-admin

  # 配置中心地址
  uri: ${SPRING_CLOUD_CONFIG_URI:http://hzero-admin:8060/hadm/config}
去掉:
preferred-networks[0]: ${PREFERRED_IP}
增加
ignored-interfaces:
– lo
– docker0
– veth.*
3、复制Jar包构建脚本:4、构建适合Docker的Jar包
$ cp /d02/hzero/project/ps-register/build.sh /d02/hzero-aipaas/project/ps-aip-app/
$ cd /d02/hzero-aipaas/project/ps-aip-app/
$ bash build.sh
构建失败,错误信息:
[ERROR] Failed to execute goal on project ps-aip-app-snapshot: Could not resolve dependencies for project org.hzero:ps-aip-app-snapshot:jar:1.6.1.ALPHA.1.3: Could not find artifact com.volcengine:volc-sdk-java:jar:2.0.5-SNAPSHOT in Hzero (https://nexus.saas.hand-china.com/repository/hzero/) -> [Help 1]
分析:
这个之前是构建成功的,POM文件内容没有变化,失败原因是 volc-sdk-java:jar:2.0.5-SNAPSHOT找不到了,这个好像是火山引擎的SDK吧。
跟产研沟通了下,给的建议是
1、这个依赖在库里确实没有了。
2、建议升级到最新版:
hzero-aip-server 1.6.1.ALPHA.4
hzero-aip-app 1.6.1.ALPHA.4
hzero-front-haip 1.6.1-alpha.4
执行:按建议升级,具体升级过程参考 Unbntu-22.04-hzero /d02/更新日志.txt
升级完成后,构建成功,继续执行后续步骤。
二、目标环境:
环境:WSL:Ubuntu-22.04系统
5、建立hzero-aipapp-docker目录
$ cd /d01/hzero-dockers
$ mkdir hzero-aipapp-docker
6、拷贝Jar包到目标环境

在windows powershell 中执行

$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero-aipaas\project\ps-aip-app\target\ps-aip-app.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-aipapp-docker\
$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-license\licenseAgent\license-agent112a.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-aipapp-docker\
7、编辑Dockerfile
$ cd /d01/hzero-dockers/hzero-aipapp-docker

$ vi Dockerfile

FROM registry.cn-shanghai.aliyuncs.com/c7n/javabase:17
COPY ps-aip-app.jar /ps-aip-app.jar
COPY license-agent112a.jar /license-agent112a.jar
ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

ENTRYPOINT exec java -XX:+UnlockExperimentalVMOptions $JAVA_OPTS $REFLEC_OPTS $AGENT $SKYWALKING_OPTS -jar /ps-aip-app.jar

8、编辑docker-compose.yml

$ vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
hzero-aip-app:
image: hzero-aip-app-jk-demo:1.12
container_name: hzero-aip-app
ports:
– “8088:8088”
– “8089:8089”
environment:
– JAVA_OPTS=-Xms500m -Xmx1500m -Dspring.profiles.active=dev
– AGENT=-javaagent:/license-agent112a.jar
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 2500m # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)
networks:
default:
name: hzero-demo

external: true

9、构建Docker镜像
$ cd /d01/hzero-dockers/hzero-aipapp-docker
$ docker build -t hzero-aip-app-jk-demo:1.12 .
构建成功:
$ docker images | grep aip-app
10、测试Docker镜像
测试之前先确保 redis-docker 和 mysql-docker,hzero-register , hzero-admin 容器已经启动:
$ cd /d01/hzero-dockers/hzero-aipapp-docker
$ docker compose up -d
看日志:docker logs hzero-aip-app,OK的
看注册中心,在注册中心可以看到workflow已成功注册。

==================================================

28、制作HZERO PaaS 平台 1.12版本的Demo环境的HZERO 微服务-AI平台Server服务 ps-aip-server 镜像

一、来源环境:
环境:WSL:Ubuntu-22.04-hzero系统
1、来源环境先备份
$ cd /d02/hzero-aipaas/project/ps-aip-server/src/main/resources
$ cp application.yml application.wsl.ok.yml
$ cp bootstrap.yml bootstrap.wsl.ok.yml
$ cd /d02/hzero-aipaas/project/ps-aip-server/target
$ cp ps-aip-server.jar ps-aip-server.wsl.ok.jar
2、更改yml配置文件
application.yml中 数据库的主机域名改成Docker compose容器名 :mysql-hzero
 url: ${SPRING_DATASOURCE_URL:jdbc:mysql://mysql-hzero:3306/hzero_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true}
application.yml中 redis数据库的主机域名 改成Docker composer容器名 :redis-hzero
  redis:
  host: ${SPRING_DATA_REDIS_HOST:redis-hzero}

application.yml中 mongo数据库的主机域名 改成Docker composer容器名 :mongo-hzero

mongodb:
  uri: ${SPRING_DATA_MONGODB_URI:mongodb://hzero:hzero@mongo-hzero:27017/haip?authSource=admin}

application.yml中 redis数据库的主机域名 改成Docker composer容器名 :elasticsearch-hzero

elasticsearch:
hosts: ${ELASTICSEARCH_HOSTS:https://elasticsearch-hzero:9200}

application.yml中 python执行器的主机域名 改成Docker composer容器名 :hzero-hype

  python:
    # python脚本执行地址
    gateway-path: ${HZERO_AIP_AGENT_PYTHON_GATEWAY_PATH:http://hype-hzero:10088}

application.yml中 HKMS切片执行器的主机域名 改成Docker composer容器名 :hzero-hkms

  llama:
    gateway-path: ${HZERO_KNOWLEDGE_LLAMA_GATEWAY_PATH:http://hzero-hkms:18080}

bootstrap.yml 中 注册中心的主机域名地址改成docker compose容器名 :hzero-register

  # 注册中心地址
  defaultZone: ${EUREKA_DEFAULT_ZONE:http://hzero-register:8000/eureka}

bootstrap.yml中 配置中心的主机域名地址改成docker compose容器名:hzero-admin

  # 配置中心地址
  uri: ${SPRING_CLOUD_CONFIG_URI:http://hzero-admin:8060/hadm/config}
去掉:
preferred-networks[0]: ${PREFERRED_IP}
增加
ignored-interfaces:
– lo
– docker0
– veth.*
3、复制Jar包构建脚本:4、构建适合Docker的Jar包
$ cp /d02/hzero/project/ps-register/build.sh /d02/hzero-aipaas/project/ps-aip-server/
$ cd /d02/hzero-aipaas/project/ps-aip-server/
$ bash build.sh
二、目标环境:
环境:WSL:Ubuntu-22.04系统
5、建立hzero-aipserver-docker目录
$ cd /d01/hzero-dockers
$ mkdir hzero-aipserver-docker
6、拷贝Jar包到目标环境

在windows powershell 中执行

$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero-aipaas\project\ps-aip-server\target\ps-aip-server.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-aipserver-docker\
$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\project\ps-license\licenseAgent\license-agent112a.jar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-aipserver-docker\
7、编辑Dockerfile
$ cd /d01/hzero-dockers/hzero-aipserver-docker

$ vi Dockerfile

FROM registry.cn-shanghai.aliyuncs.com/c7n/javabase:17
COPY ps-aip-server.jar /ps-aip-server.jar
COPY license-agent112a.jar /license-agent112a.jar
ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN

ENTRYPOINT exec java -XX:+UnlockExperimentalVMOptions $JAVA_OPTS $REFLEC_OPTS $AGENT $SKYWALKING_OPTS -jar /ps-aip-server.jar

8、编辑docker-compose.yml

$ vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
hzero-aip-server:
image: hzero-aip-server-jk-demo:1.12
container_name: hzero-aip-server
ports:
– “8270:8270”
– “8271:8271”
environment:
– JAVA_OPTS=-Xms500m -Xmx2000m -Dspring.profiles.active=dev
– AGENT=-javaagent:/license-agent112a.jar
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 3000m # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)
networks:
default:
name: hzero-demo

external: true

9、构建Docker镜像
$ cd /d01/hzero-dockers/hzero-aipserver-docker
$ docker build -t hzero-aip-server-jk-demo:1.12 .
构建成功:
$ docker images | grep aip-server
10、测试Docker镜像
测试之前先确保 redis-docker 和 mysql-docker,hzero-register , hzero-admin 容器已经启动:
$ cd /d01/hzero-dockers/hzero-aipserver-docker
$ docker compose up -d
看日志:docker logs hzero-aip-server,OK的
看注册中心,在注册中心可以看到aip已成功注册。

==================================================

29、启动docker compose 容器 Python沙箱 hzero-hype

二、目标环境:
环境:WSL:Ubuntu-22.04系统
1、建立hzero-hype目录
$ cd /d01/hzero-dockers
$ mkdir hzero-hype-docker
$ cd /d01/hzero-dockers/hzero-hype-docker
2、编辑docker-compose.yml

$ vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
hzero-hype:
container_name: hzero-hype
image: registry.hand-china.com/hzero-public/haip-python-executor:0.2
privileged: true
environment:
WORKERNUM: 8
TIMEOUT: 800
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 500m # 容器最大内存(python应用直接限制内存大小)
ports:
– “10080:80”
networks:
default:
name: hzero-demo

external: true

3、测试Docker 容器
$ cd /d01/hzero-dockers/hzero-hype-docker
$ docker compose up -d
出错了:
[+] Running 1/1
✘ hzero-hype Error failed to resolve reference “registry.hand-china.com/hzero-public/haip-python-executor:0.2”: failed to do reques… 5.1s
Error response from daemon: failed to resolve reference “registry.hand-china.com/hzero-public/haip-python-executor:0.2”: failed to do request: Head “https://registry.hand-china.com/v2/hzero-public/haip-python-executor/manifests/0.2”: EOF
看起来是无法从库里面拉取了。
不过我之前拉取过,可以从ubuntu-22.04-hzero的docker镜像库中导出来,在到这边导进来。
在ubuntu-22.04-hzero环境:
$ cd /d03/dockerimagesbak
$ docker images 看下镜像列表

格式:docker save -o 导出文件名 镜像名:标签

$ docker save -o haip-python-executor-0.2.tar registry.hand-china.com/hzero-public/haip-python-executor:0.2
拷贝 这个haip-python-executor-0.2.tar 到ubuntu-22.04 /d01/hzero-dockers/hzero-hype目录下
$ cp \wsl.localhost\Ubuntu-22.04-hzero\d03\dockerimagesbak\haip-python-executor-0.2.tar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-hype-docker\
进入Ubuntu-22.04\d01\hzero-dockers\hzero-hype-docker\ ,导入镜像

格式:docker load -i 镜像文件.tar

$ docker load -i haip-python-executor-0.2.tar
导入成功:Loaded image: registry.hand-china.com/hzero-public/haip-python-executor:0.2
再次启动:docker compose up -d
看日志:docker logs hzero-hype
启动成功

==================================================

30、启动docker compose 容器 文档切片服务 hzero-hkms

二、目标环境:
环境:WSL:Ubuntu-22.04系统
1、建立hzero-hkms目录
$ cd /d01/hzero-dockers
$ mkdir hzero-hkms-docker
$ cd /d01/hzero-dockers/volumes
$ mkdir hkms

windows powershell 中执行:原有数据迁移

$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero-aipaas\hzero-aigc-docker-compose\hkms\nginx.conf \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\volumes\hkms\
$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero-aipaas\hzero-aigc-docker-compose\hkms\app.log \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\volumes\hkms\
$ cp \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero-aipaas\hzero-aigc-docker-compose\hkms\logs \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\volumes\hkms\

设置 hkms 数据目录的所有者为 UID=1000 的用户

$ cd /d01/hzero-dockers/hzero-hkms-docker
$ sudo chown -R 33:33 ../volumes/hkms
$ sudo chmod -R 755 ../volumes/hkms
$ cd /d01/hzero-dockers/hzero-hkms-docker
2、编辑docker-compose.yml

$ vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
hzero-hkms:
container_name: hzero-hkms
image: registry.hand-china.com/hzero-public/hkms-python:1.6.1
# command: sh -c “apt-get update && apt-get install -y iputils-ping
environment:
# HKMS服务进程数量
WORKERNUM: 16
OPENAI_PROXY: “”
# MongoDB地址
MONGO_CONN: mongodb://hzer:hzero@mongo-hzero:27017/hgpt?authSource=admin&authMechanism=SCRAM-SHA-1
# APP URL
HAIP_HOST: http://hzero-aip-app:8088
# 网关地址
FILE_SERVICE_HOST: http://hzero-gateway:8080
# 调用soffice转换文件类型(doc、ppt)时的超时时间,单位:秒。
EMBED_CONVERT_TIME: “120”
# 同步文档向量时,如果文档总长度超过该值(按token计)会中止,不进行向量计算。单位:万token
EMBED_MAX_TEXT_LENGTH: “300”
# 当普通文本中包含源代码块(Markdown格式)时,源代码不参与文本切片时的切片大小计算。但是当源代码块长度超过这个参数设定的值(字符数)时,会进行片段分割(在源代码块前或后,会保持源代码块的完整)。单位:字符。
SRC_BLK_THRESHOLD: “4000”
# 当单个代码块的长度超过此上限时,截断超过部分。单位:字符。
SRC_BLK_THRESHOLD_UPPER: “50000”
# 从向量库、ElasticSearch检索时返回的最大结果数。
EMBED_QUERY_LIMIT_CHUNK: “30”
# 开启debug日志
LOG_CONFIG_FILE: ./bin/log_debug.conf
# 代码插件配置
#ENABLE_CODE_SYNC: “no”
#ASYNC_RDB_URL: “mysql+aiomysql://${MYSQL_USERNAME}:${MYSQL_PASSWORD}@${MYSQL_URL}/hzero_aip”
#RDB_URL: “mysql+pymysql://${MYSQL_USERNAME}:${MYSQL_PASSWORD}@${MYSQL_URL}/hzero_aip”
#CODESYNC_ASYNC_MODE: “no”
# 异步处理配置
#ENABLE_CELERY: “no”
#CELERY_BROKER: “redis://:${REDIS_PASSWORD}@${REDIS_HOST}:${REDIS_PORT}/14”
#CELERY_BACKEND: “redis://:${REDIS_PASSWORD}@${REDIS_HOST}:${REDIS_PORT}/14”
#CELERY_LOG_LEVEL: “DEBUG”
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 3.5g # 容器最大内存(python应用直接限制内存)
volumes:
– ${DOCKER_VOLUME_DIRECTORY:-../volumes}/hkms/nginx.conf:/etc/nginx/sites-available/default
– ${DOCKER_VOLUME_DIRECTORY:-../volumes}/hkms/app.log:/root/hkms/bin/app.log
– ${DOCKER_VOLUME_DIRECTORY:-../volumes}/hkms/logs:/root/hkms/logs
ports:
– “18080:80”
networks:
default:
name: hzero-demo

external: true

3、测试Docker 容器
$ cd /d01/hzero-dockers/hzero-hkms-docker
$ docker compose up -d
出错了:
[+] Running 1/1
✘ hzero-hkms Error failed to resolve reference “registry.hand-china.com/hzero-public/hkms-python:1.6.1”: failed to do request: Head… 5.5s
Error response from daemon: failed to resolve reference “registry.hand-china.com/hzero-public/hkms-python:1.6.1”: failed to do request: Head “https://registry.hand-china.com/v2/hzero-public/hkms-python/manifests/1.6.1”: EOF
分析:
看起来是无法从库里面拉取了。
不过我之前拉取过,可以从ubuntu-22.04-hzero的docker镜像库中导出来,在到这边导进来。
执行:
在ubuntu-22.04-hzero环境:
$ cd /d03/dockerimagesbak
$ docker images 看下镜像列表

格式:docker save -o 导出文件名 镜像名:标签

$ docker save -o hkms-python-1.6.1.tar registry.hand-china.com/hzero-public/hkms-python:1.6.1
拷贝 这个hkms-python-1.6.1.tar 到ubuntu-22.04 /d01/hzero-dockers/hzero-hkms-docker目录下
$ cp \wsl.localhost\Ubuntu-22.04-hzero\d03\dockerimagesbak\hkms-python-1.6.1.tar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\hzero-hkms-docker\
进入Ubuntu-22.04\d01\hzero-dockers\hzero-hkms-docker\ ,导入镜像

格式:docker load -i 镜像文件.tar

$ docker load -i hkms-python-1.6.1.tar
导入成功:Loaded image: registry.hand-china.com/hzero-public/hkms-python:1.6.1
再次启动:docker compose up -d
看日志:docker logs hzero-hkms
正常启动了

==================================================

31、启动docker compose 容器 图数据库 neo4j

二、目标环境:
环境:WSL:Ubuntu-22.04系统
1、建立neo4j-docker目录
$ cd /d01/hzero-dockers
$ mkdir neo4j-docker

windows powershell 中执行:原有数据迁移

$ cp -r \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero-aipaas\hzero-aigc-docker-compose\neo4j\volumes\neo4j \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\volumes\
$ cd /d01/hzero-dockers/neo4j-docker
2、编辑docker-compose.yml

$ vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
neo4j-hzero:
image: registry.hand-china.com/hzero-public/neo4j:5.16.0
container_name: neo4j-hzero
ports:
– “7474:7474”
– “7687:7687”
environment:
– NEO4J_apoc_export_file_enabled=true
– NEO4J_apoc_import_file_enabled=true
– NEO4J_apoc_import_file_use__neo4j__config=true
– NEO4J_PLUGINS=[“apoc”]
– NEO4J_AUTH=neo4j/password
– ES_JAVA_OPTS=-Xms500m -Xmx500m # 设置 JVM 堆内存为 500M
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 1g # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)
volumes:
– ${DOCKER_VOLUME_DIRECTORY:-../volumes}/neo4j/data:/data
– ${DOCKER_VOLUME_DIRECTORY:-../volumes}/neo4j/plugins:/plugins
networks:
default:
name: hzero-demo

external: true

3、测试Docker 容器
$ cd /d01/hzero-dockers/neo4j-docker
$ docker compose up -d
出错了:
[+] Running 1/1
✘ neo4j-hzero Error failed to resolve reference “registry.hand-china.com/hzero-public/neo4j:5.16.0”: failed to do request: Head “h… 5.2s
Error response from daemon: failed to resolve reference “registry.hand-china.com/hzero-public/neo4j:5.16.0”: failed to do request: Head “https://registry.hand-china.com/v2/hzero-public/neo4j/manifests/5.16.0”: EOF
分析:
看起来是无法从库里面拉取了。
不过我之前拉取过,可以从ubuntu-22.04-hzero的docker镜像库中导出来,在到这边导进来。
执行:
在ubuntu-22.04-hzero环境:
$ cd /d03/dockerimagesbak
$ docker images 看下镜像列表

格式:docker save -o 导出文件名 镜像名:标签

$ docker save -o neo4j-5.16.0.tar registry.hand-china.com/hzero-public/neo4j:5.16.0
拷贝 这个neo4j-5.16.0.tar 到ubuntu-22.04 /d01/hzero-dockers/neo4j-docker目录下
$ cp \wsl.localhost\Ubuntu-22.04-hzero\d03\dockerimagesbak\neo4j-5.16.0.tar \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\neo4j-docker\
进入Ubuntu-22.04\d01\hzero-dockers\neo4j-docker\ ,导入镜像

格式:docker load -i 镜像文件.tar

$ docker load -i neo4j-5.16.0.tar
导入成功:Loaded image: registry.hand-china.com/hzero-public/neo4j:5.16.0
再次启动:docker compose up -d
看日志:docker logs neo4j-hzero
正常启动了

==================================================

32、启动docker 容器 web服务器 nginx

二、目标环境:
环境:WSL:Ubuntu-22.04系统
1、建立nginx-docker目录
$ cd /d01/hzero-dockers
$ mkdir nginx-docker
$ cd /d01/hzero-dockers/volumes
$ mkdir nginx
$ cd /d01/hzero-dockers/volumes/nginx

windows powershell:复制前端文件 和nginx配置文件

$ cp -r \wsl.localhost\Ubuntu-22.04-hzero\d02\hzero\front\dist \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\volumes\nginx\
$ cp \wsl.localhost\Ubuntu-22.04-hzero\etc\nginx\sites-available\default \wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\volumes\nginx\nginx.conf
编辑\wsl.localhost\Ubuntu-22.04\d01\hzero-dockers\volumes\nginx\nginx.conf
把root目录改成指向 /usr/share/nginx/html
root /usr/share/nginx/html;
location ^~ /mobile-provider {
root /usr/share/nginx/html/packages;

aigc.hzero.com.cn 专用服务器

    # 改为后端服务实际IP:端口
    proxy_pass http://hzero-aip-app:8088;  # 示例:假设后端在本机8088

把433端口的服务Serve配置全部去掉
2、编辑docker-compose.yml
$ cd /d01/hzero-dockers/nginx-docker

$ vi docker-compose.yml

services:
nginx-hzero:
image: nginx:latest
container_name: nginx-hzero
restart: always
ports:
– “80:80”
volumes:
– ${DOCKER_VOLUME_DIRECTORY:-../volumes}/nginx/dist:/usr/share/nginx/html
– ${DOCKER_VOLUME_DIRECTORY:-../volumes}/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
networks:
default:
name: hzero-demo

external: true

3、测试Docker 容器
$ cd /d01/hzero-dockers/nginx-docker
$ docker compose up -d
$ docker logs nginx-hzero
成功启动
4、测试页面
输入 http://dev.hzero.com.cn
出来首页,但马上报错
http://hzero-gateway:8080/oauth/login
分析:因为容器中 网关地址用了容器名,但现在是在外面,所以解析不到;
解决方案:
在hosts文件中把hzero-gateway 的解析加上
172.18.14.48 hzero-gateway # API网关地址
加上之后可以正常访问 admin/Admin@123!

==================================================

33、启动docker compose 容器 onlyoffice

二、目标环境:
环境:WSL:Ubuntu-22.04系统
1、建立onlyoffice-docker目录
$ cd /d01/hzero-dockers
$ mkdir onlyoffice-docker

建立onlyoffce的volumes目录

$ cd /d01/hzero-dockers/volumes
$ mkdir -p onlyoffice/DocumentServer/{logs,data,lib,db}
$ sudo chown -R 998:998 onlyoffice/DocumentServer
$ sudo chmod -R 755 onlyoffice/DocumentServer
$ sudo chown -R 999:999 onlyoffice/DocumentServer/db
$ sudo chmod -R 755 onlyoffice/DocumentServer/db
2、编辑docker-compose.yml
$cd /d01/hzero-dockers/ onlyoffice-docker

$ vi docker-compose.yml

要求Docker/Docker CE >= 19.x

services:
onlyoffice-hzero:
image: onlyoffice/documentserver
container_name: onlyoffice-hzero
ports:
– “8800:80”
environment:
– JWT_SECRET=your-secret-key # 建议添加JWT密钥(可选但推荐)
– TZ=Asia/Shanghai # 设置时区
deploy: # 限制容器总内存(Docker Compose v2.3+)
resources:
limits:
memory: 2g # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)
volumes:
– ${DOCKER_VOLUME_DIRECTORY:-../volumes}/onlyoffice/DocumentServer/logs:/var/log/onlyoffice
– ${DOCKER_VOLUME_DIRECTORY:-../volumes}/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data
– ${DOCKER_VOLUME_DIRECTORY:-../volumes}/onlyoffice/DocumentServer/lib:/var/lib/onlyoffice
– ${DOCKER_VOLUME_DIRECTORY:-../volumes}/onlyoffice/DocumentServer/db:/var/lib/postgresql
networks:
default:
name: hzero-demo

external: true

3、测试Docker 容器
$ cd /d01/hzero-dockers/onlyoffice-docker
$ docker compose up -d
看日志:docker logs onlyoffice-hzero
正常启动了