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平台组装笔记(十五)继续验证测试

问题1、平台/调度任务/任务调度中心,打开时报错:

前端检查发现一堆权限不匹配的后台API错误:

检查后台hzero-schedule服务的日志,没有错误信息。

看前端错误主要是hzero_platform.iam_permission表中缺少响应的api 记录。

解决方案是:去平台/开发管理/开发管理/系统工具/刷新权限 去手动刷新下IAM权限就好了。

这里点【刷新】的时候,偶尔会遇到违反唯一索引的错误,这种情况可以去数据库把hzero_platform.iam_permission表中,通过模糊搜索code的方法把对应模块的API权限记录全部清除掉,然后再刷新。

备注:之所以出现刷新时有违反唯一索引的错误是刷新的逻辑是增量插入,没有更新,因为开发人员没新增或更改一个API就回去刷新,这个操作比较频繁,用更新会导致性能不好,但增量插入的“增量”逻辑并非跟系统唯一索引完全一致,所以就会导致违反唯一索引的问题。 产研说后面会改进刷新的处理逻辑,会先删除跟增量部分重复的code, 然后再刷新,这样就不会出现违反唯一索引的错误,也不需要去数据库表做响应的删除操作了。

刷新后就没有错误,正常显示了:

问题2、事件管理服务未安装

平台/事件管理/事件源定义 ,访问时出错

分析:

事件管理服务未安装。

解决方案:

选配平台选配事件管理服务进行安

1、选配平台下载服务的资源:

路径:开放平台/开发者/在线选配/服务端选配

父工程选择hzero父组件1.12.2

$ cd /d02/hzero/project

$ mkdir ps-event

#选配完成后,把事件服务.zip 和resource-package.zip 拷贝到 /d02/hzero/project/ps-event 目录下

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

$ unzip 事件服务.zip

$ unzip resource-package.zip -d ./resource-package

2、执行种子数据导入:

$ cd ./resource-package

#更改 application.yml 中mysql db的地址为mysql-hzero

$ cd /d02/hzero/project/ps-event/resource-package

$ bash database-init.sh

访问:http://localhost:8099/

执行1和3

  • 构建服务的jar包

$ cd /d02/hzero/project/ps-event/src/main/resources

#更改application.yml

#mysql连接修改

db.hzero.com.cn->mysql-hzero

#redis连接修改

redis.hzero.com.cn->redis-hzero

#更改 bootstrap.yml

#配置中心修改

dev.hzero.com.cn->hzero-admin

#注册中心修改

dev.hzero.com.cn->hzero-register

#添加网络忽略配置

    inetutils:

      # 指定忽略的网卡

      ignored-interfaces:

       – lo

       – docker0

       – veth.*

#更改POM文件

1.12.2->1.12.2.RELEASE

1.12.0.RELEASE->1.12.2.RELEASE

#拷贝构建和启动脚本

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

$ cp build.sh run.sh run_nobuild.sh stop.sh /d02/hzero/project/ps-event/

# 执行构建并启动服务:

$ bash run.sh

启动成功,可以在注册中心看到:

  • 构建前端

检查 /d02/hzero/front/front/package.json

看已经包含:

 “devDependencies”: {

 “hzero-front-hevt” : “~1.12.0”,

所以,该服务的前端已经构建过了。

  • 测试:功能正常,服务地址改成实际部署环境的:

问题3、API测试数据不全

路径:平台工作台菜单/服务监控/API测试

发现有些已经安装的服务在这里没有显示,比如hzero-license

分析:检查看网络,都调用了哪些API,刷新,结果反而空了;

查hzero-admin后台服务日志:

报内存溢出了:

jakarta.servlet.ServletException: Handler dispatch failed: java.lang.OutOfMemoryError

想想也对,这个展示所有服务的API还是很消耗内存的,之前swagger服务也碰到内存溢出的问题,当时是给调到1G内存的。

解决方案:调整hzero-admin对的启动内存,-Xmx 从300M调整到800M

重启hzero-admin服务,再测试:

注册中心是14个,这里是11个,跟注册中心比还少了3个

继续调整 -Xmx 从800M调整到1200M,重启hzero-admin服务, 结果还是出来11个服务,没有变化,说明再加内存也没用。

缺失的是 hzero-gateway,hzero-license,hzero-swagger 三个服务的API展示

看API调用:hzero-admin 调的是swagger的 tree

执行:把hzero-swagger的-Xmx 从300M调整到800M,重启hzero-swagger服务,再测:还是一样,没有hzero-license和hzero-swagger的API展示,直接调用hzero-admin的这个API来获取hzero-license和hzero-swagger的API文档数据,也是空的。但trail环境上是可以展示hzero-license和hzero-swagger的API文档的。

查hzero-swagger的application.yml配置:

hzero:

  swagger:

skip-service: ${HZERO_SWAGGER_SKIP_SERVICE:register, gateway, oauth}

跳过不显示API的服务列表里面没有hzero-license 和hzero-swagger  所以正常应该显示出来,另外oauth在排除列表中,但实际上却在API测试列表里面显示出来了,这是为什么呢?

问豆包,豆包会告诉你这个列表的来源是hadm_swagger表:

我们去hadm_swagger表中看:

也确实没有hzero-license 和hzero-swagger:

那为什么hzero-license和hzero-swagger没有进入这张表呢?

我们跟豆包聊,关键是先检查 hzero-license服务有没有提供api文档,hzero-license的端口是8105,我们访问 http://dev.hzero.com.cn:8105/v2/api-docs

能正常返回api文档的json数据,加上我们在hzero-admin服务日志中没有看到采集swagger文档的报错信息,判断:问题出在hzero-admin未触发对这个服务的采集流程:

而且在API测试的地方,直接刷hzero-license的API文档返回是空的:

这个明天问下产研吧,什么原因?

产研说hzero_admin没有去调用swagger的api,就是直接请求网关的统一文档入口,从而拉取所有微服务的文档信息并生成服务列表。那个hadm_swagger表也不关键,是拉取之后临时存储的,没有配置作用。之所以hzero-license的api文档在我的环境没有显示出来是因为我用的hzero-license服务版本是2025年5月份之后的版本,新的版本中hzero-license服务的api文档调用显示在程序里面做了限制,禁止其他API直接访问,只允许直接在浏览器中显示。

好了,搞清楚了,这里没有安装配置方面的问题。问题关闭。

后续发现他们说的也不是那么回事。。。

在路径:平台菜单/平台治理/服务管理的地方,把hzero-license服务加上去之后,在swagger-ui.html 和API测试的地方就都能看到了,所以关键是这个服务要向治理平台hzero-admin注册。

问题4、授权信息查看报错

路径:平台工作台菜单/系统管理/授权信息

查看报错,报503错误

分析:

看hzero-license服务正常运行,后台日志没有报错。

估计是hzero_platform.iam_permission表中缺少响应的api 记录。

解决方案是:去平台/开发管理/开发管理/系统工具/刷新权限 去手动刷新下IAM权限

成功完成刷新动作。再测试:

发现还是报错:

去后台看hzero-gateway的服务日志,前端刷新一下,后端就有一堆信息下面这种信息:

把信息给元宝分析错误,结果元宝说没有错误,只是正常的debug信息,元宝建议把hzero-gateway的application.yml配置中关于日志的level部分从debug改成info,以免排查问题因为日志信息太多而收到干扰, 看了一下,确实hzero-gateway的日志太多了,才几个小时就已经有180M了。

按照元宝建议改成info级别日志,重启hzero-gateway 服务。

那么就继续看看路由的缓存问题:在浏览器直接访问:

http://gateway.hzero.com.cn:8080/hlcs/v1/license/info/license-code

返回:

{“failed”:true,”code”:”error.permission.routeNotFound”,”message”:”This request mismatch any routes, uri: %2Fhlcs%2Fv1%2Flicense%2Finfo%2Flicense-code”,”type”:”PERMISSION_SERVICE_ROUTE”,”detailsMessage”:”The route you visited does not exist or the related service is not installed”}

后端直接访问该接口:

$ curl http://172.18.14.48:8105/v1/license/info/license-code

{“timestamp”:”2025-12-11 17:19:04″,”status”:401,”error”:”Unauthorized”,”path”:”/v1/license/info/license-code”}root@desktop-jacksen:/d02/hzero/project/ps-gateway#

问题诊断结论​

✅ ​服务正常运行​:后端服务 hzero-license 已启动并在 8105 端口监听

✅ ​接口路径正确​:/v1/license/info/license-code 接口存在

估计还是iam_permission的问题,但权限已经刷新过了,没解决问题,看下权限表是否已经有了:

权限表中确实已经有了,所以不是权限问题了。

那是没有在网关的路由表里面吗?Hzero-license服务在注册中心可以看见,网关应该可以自动获取到这个服务的路由的吧?

命令行测试:

$ curl -X GET “http://gateway.hzero.com.cn:8080/hlcs/v1/license/info/license-code” \

  -H “Authorization: Bearer 303e3c8f2da80-4cfb-8bc7-53769798d0be”

${“failed”:true,”code”:”error.permission.routeNotFound”,”message”:”This request mismatch any routes, uri: %2Fhlcs%2Fv1%2Flicense%2Finfo%2Flicense-code”,”type”:”PERMISSION_SERVICE_ROUTE”,”detailsMessage”:”The route you visited does not exist or the related service is not installed”}

网关还是找不到路由。如果直接访问这个服务的API也会报未授权,即使带着token

curl    -X GET “http://172.18.14.48:8105/v1/license/info/license-code” \

  -H “Authorization: Bearer 303e3c8f2da80-4cfb-8bc7-53769798d0be”

{“timestamp”:”2025-12-11 18:35:37″,”status”:401,”error”:”Unauthorized”,”path”:”/v1/license/info/license-code”}

那可能是我hzero-gateway的application.yml中没有配置hzero-license的路由。在这个文件中搜索hzero-license,果然是缺失了。

解决方案:

增加hzero-license的路由:

      – id: hlcs

        uri: lb://hzero-license

        predicates:

        – Path=/hlcs/**

        filters:

        – StripPrefix=1

添加后重启, 问题解决。可以正常看到授权信息了:

后来跟产研聊,他们说如果没有在hzero-gateway的application.yml中配置路由,也可以在系统界面上添加,具体路径是:

平台菜单/平台治理/服务管理:

在平台菜单/平台治理/微服务实例,可以看到分别注册到注册中心的微服务实例额注册到hzero-admin的微服务实例:我们可以看到有个微服务没有向治理平台hzero-admin注册。如果向治理平台注册了的话,治理平台就会自动帮这些服务刷路由配置和iam_permission权限了。

治理平台也维护了一份服务路由表,hzero-gateway的GVM内存中的路由表是其自身applicatin.yml中配置的路由信息跟这张表的并集:

问题5、权限组显示错误

路径:平台菜单/系统管理/数据权限控制/权限组管理

分析:

看hzero-platform服务后台日志:

Unknown exception, Request: {URI=/v1/permission-groups-site},

org.springframework.web.servlet.resource.NoResourceFoundException: No static resource v1/permission-groups-site.

……

把整段日志给元宝,元宝分析:

问题根源分析

核心问题在于,Spring Boot 将一个API接口请求误判为静态资源文件请求。这通常由以下一个或几个原因造成:

​控制器(Controller)映射缺失​:Spring MVC 没有找到一个能够处理 /v1/permission-groups-site 这个路径的控制器(例如 @RestController 中定义的 @RequestMapping)。

​静态资源路径配置干扰​:如果应用配置了静态资源映射(例如 spring.mvc.static-path-pattern),且其模式与该 API 路径意外匹配,请求可能会被错误的静态资源处理器截获。

​请求方式不匹配​:控制器上定义的 HTTP 方法(如 @GetMapping, @PostMapping)与您实际发起的请求方法(如 GET, POST)不匹配。

​版本差异与配置过时​:不同版本的 Spring Boot 在静态资源处理上可能存在差异,旧版本的配置方式在新版本中可能已不适用或失效

#

路径:平台菜单/服务监控/API测试,查找hzero-platform的API,确实没有找到permission-groups-site的api.

但是在iam_permission表是有的:

在swagger-ui.html上没找到 hzero-platform的permission-group API

跟产研沟通了下,说这些API在 platform-dpc-saas中,这个组件现在已经默认不依赖了,该组件是数智事业部开发的,他们部门一直在用,而且他们部门认为这个功能需要放在平台层,之前曾经加进来过,所以菜单的种子数据中就有了,但现在产研这边已经不用了,相关菜单也可以去掉。如果要用就是需要在hzero-platform的POM中加下依赖:

<dependency>

            <groupId>org.hzero.plugin</groupId>

            <artifactId>platform-dpc-saas</artifactId>

        </dependency>

加完后,重新build并启动,再测,就正常不报错了:

问题解决。

问题6、jar包管理界面打开报错:

路径:平台菜单/开发管理/个性化管理

点击 jar包管理,报错:The route you visited does not exist or the related service is not installed

分析:这个错误很明显,就是

解决方案:

解决方案:

选配平台选配事件管理服务进行安

1、选配平台下载服务的资源:

路径:开放平台/开发者/在线选配/服务端选配

父工程选择hzero父组件1.12.2

选配hzero-jar组件

$ cd /d02/hzero/project

$ mkdir ps-jar

#选配完成后,把动态Jar管理.zip 和resource-package.zip 拷贝到 /d02/hzero/project/ps-event 目录下

$ cd /d02/hzero/project/ps-jar-app

$ unzip 动态Jar管理.zip

$ unzip resource-package.zip -d ./resource-package

2、执行种子数据导入:

$ cd ./resource-package

#更改 application.yml 中mysql db的地址为mysql-hzero

$ cd /d02/hzero/project/ps-jar/resource-package

$ chmod +x database-init.sh

$ bash database-init.sh

访问:http://localhost:8099/

执行1和3

  • 构建服务的jar包

$ cd /d02/hzero/project/ps-jar/src/main/resources

#更改application.yml

#mysql连接修改

db.hzero.com.cn->mysql-hzero

#redis连接修改

redis.hzero.com.cn->redis-hzero

#redis上面加一层data: 在spring:下一层

#hzero-jar-app->hzero-jar

#更改 bootstrap.yml

#配置中心修改

dev.hzero.com.cn:8010->hzero-admin:8060/hadm/config

#注册中心修改

dev.hzero.com.cn->hzero-register

#添加网络忽略配置

    inetutils:

      # 指定忽略的网卡

      ignored-interfaces:

       – lo

       – docker0

       – veth.*

#更改POM文件

1.12.2->1.12.2.RELEASE

1.12.0.RELEASE->1.12.2.RELEASE

mysql->com.mysql

#拷贝构建和启动脚本

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

$ cp build.sh run.sh run_nobuild.sh stop.sh /d02/hzero/project/ps-jar/

# 执行构建并启动服务:

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

$ bash run.sh

启动报错:

Spring 在寻找:org/hzero/jar/api/  实际路径中不存在:api 子目录

解决方案:把日志发给元宝,按元宝建议多次执行分析-建议-执行再分析的循环未能解决问题,解决了api ,又说缺app等另外3个目录,解决了目录又报其他一些列错误, 后来跟产研沟通,产研说他们在IDE环境启动没问题,要再测试下命令行启动问题的差异,找了下原因,发现是POM文件中多了build部分,而且build部分的版本不对。

解决方案就是把build部分删除掉,就可以正常启动了,然后在注册中心可以看到hzero-jar服务。

  • 构建前端

检查 /d02/hzero/front/front/package.json

看尚未包含:

  “devDependencies” : {

    “hzero-front-hjar” : “~1.2.0”,

所以,要加一下。

$ cd /d02/hzero/front/front/

$ cp package.json package.json.bak20251212

更改package.json ,增加上述依赖

$ yarn

$ yarn run build:ms hzero-front-hjar

$ Done in 8.65s

#部署

$ bash  apply_update_to_runtime_env.sh

  • 测试:功能正常了:

问题7、接口平台API注册报404错误

路径:平台菜单/接口平台/API配置/API注册

这个菜单打开会报404错误

分析:跟产研沟通,在1.8版本中暂不提供这个功能,这个是在1.9以后的大版本中规划的API维度的一个界面。

解决方案:暂时先禁用掉该菜单。

在 平台菜单/系统管理/菜单管理/菜单配置:

问题8、接口平台API权限汇总查看报404错误

路径:平台菜单/接口平台/API权限/API权限汇总查看

这个菜单打开会报404错误

分析:跟产研沟通,在1.8版本中暂不提供这个功能,这个是在1.9以后的大版本中规划的一个功能。

解决方案:暂时先禁用掉该菜单。在 平台菜单/系统管理/菜单管理/菜单配置:

问题9: 集成平台/服务编排/应用连接器 打开页面一闪而过,白屏

路径:平台菜单/服务编排/应用连接器/应用连接器

分析:

检查 浏览器网络没有报API错误,hzero-orchestration服务后台也没有报错。

只有前端报错,通常这种情况就是看下有没有新的前端版本可以更新,先看下开放平台文档中关于编排的前端模块是啥?

文档路径: 开放平台/社区与合作伙伴/文档中心/技术产品/集星獭JeeStar/1.8.1RELEASE/产品安装部署手册/前后端服务清单

说明编排的的前端模块是:jipaas-front-jorc 1.8.0 服务编排模块

看下当前的package.json中的版本:发现没有这个前端模块

解决方案:

在package.json中增加jipaas-front-jorc 1.8.0 服务编排模块和jipaas-front-jfnt 1.8.0 前置机服务模块

$ cd /d02/hzero/front/front

$ cp package.json package.json.bak20251216

#搜索制品库 https://nexus.saas.hand-china.com,搜索hzero-ui库,切换到HTML View,ctro+F 搜索jipaas-front-jorc, 看到最新版本是2025-10-15的1.7.3-beta.1 没有文档写的1.8.0

先尝试按文档1.8.0

Couldn’t find any versions for “jipaas-front-jitf” that matches “~1.8.0”
? Please choose a version of “jipaas-front-jitf” from this list: (Use arrow keys)
❯ 1.8.0-beta.2

yarn之后还确实有,除了jipaas-front-jitf有1.8.0-beta.2需要选择下,其他两个都没让选,看了  jipaas-front-jorc 和 jipaas-front-jfnt 目录下的json文件还都是1.8.0的

$ yarn build:ms jipaas-front-jitf,jipaas-front-jorc,jipaas-front-jfnt

$ Done in 246.70s.

#然后运行前端部署脚本:

$bash  apply_update_to_runtime_env.sh

再测试:已经正常显示了。

问题解决。

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
正常启动了

H-ZERO DevPaaS微服务开发平台的服务+插件架构设计

在“服务 + 插件”架构中,平衡服务与插件的发展,需从规划、开发、管理与评估等多方面着手:
1. 前期规划
– **明确主次与边界**:清晰界定服务和插件的核心功能与职责。服务应提供稳定、基础的功能框架,像电商系统的用户管理、订单处理服务,保障系统基本运作;插件则侧重于拓展和个性化定制,如个性化推荐插件、营销活动插件。避免功能重叠,确保二者相辅相成。
– **制定协同发展路线图**:结合业务战略,规划服务与插件的长期发展路径。明确不同阶段服务升级与插件开发计划。例如,在新业务拓展初期,先完善基础服务,随后围绕新业务开发相关插件,实现二者有序推进。
2. 开发过程
– **遵循统一标准**:建立统一的技术标准和接口规范,确保服务与插件间无缝对接。如规定统一的数据格式、通信协议,无论服务还是插件开发,都依此标准,降低集成难度,提高兼容性与可维护性。
– **保障兼容性**:服务升级时,充分考虑现有插件兼容性,避免接口或数据结构变动致插件失效。同样,插件开发也应适配服务的当前与未来版本。可通过版本管理和兼容性测试机制,如语义化版本号,确保二者协同演进。
– **促进双向反馈**:开发服务与插件的团队保持紧密沟通。服务团队及时向插件团队通报服务架构、接口变化;插件团队反馈插件开发中遇的问题与需求,助服务团队优化设计,实现协同优化。
3. 管理与维护
– **资源合理分配**:依据业务需求与发展阶段,合理分配人力、物力资源。若某阶段重点拓展服务功能,适当增加服务开发资源;若需丰富插件生态,侧重插件开发投入,确保资源与发展重点匹配。
– **建立测试与监控体系**:构建全面测试机制,涵盖单元测试、集成测试、功能测试等,确保服务与插件功能正常及协同工作稳定。同时,搭建监控系统,实时监测性能指标,如响应时间、资源利用率,及时发现处理问题。
– **版本管理与发布协调**:规范服务与插件版本管理,确保版本对应清晰。发布新版本时,协调发布时间与内容,提前通知相关方,做好升级准备与过渡,降低对业务影响。
4. 评估与优化
– **收集用户反馈**:通过多种渠道收集用户对服务与插件的反馈,了解使用体验、需求与问题。如设置用户反馈渠道、开展用户调研,依据反馈优化服务与插件功能。
– **定期评估**:定期评估服务与插件发展情况,对比规划目标,分析进展与偏差。采用关键指标评估,如服务稳定性、插件使用率、用户满意度等,据此调整发展策略。
– **持续优化**:基于评估结果与用户反馈,持续优化服务与插件。对服务性能瓶颈优化,对插件功能改进拓展,使二者不断适应业务发展与用户需求。

增长黑客

AARRR增长黑客模型,也被称为海盗模型,是由硅谷著名风险投资人戴夫・麦克卢尔(Dave McClure)于2007年提出的。该模型是一个用户生命周期模型,关注用户获取(Acquisition)、激活(Activation)、留存(Retention)、收入(Revenue)和自传播(Refer)这五个方面,描述了用户从了解一个产品或服务到成为忠实用户的整个过程。

AARRR模型的五个关键阶段:

  1. 获取用户(Acquisition)
    • 定义:通过各种渠道吸引潜在用户,使其了解并使用产品。
    • 策略:精准定位目标用户群体,利用社交媒体、搜索引擎优化、内容营销等多种渠道进行推广,不断调整获取策略以降低用户获取成本(CAC)。
    • 实例:瑞幸咖啡通过新用户免费喝、买一送一等策略,吸引了大量新用户。
  2. 激活用户(Activation)
    • 定义:引导用户完成首次体验,使其对产品产生兴趣并愿意进一步使用。
    • 策略:简化注册流程,通过新手引导、教程视频等方式帮助用户快速了解产品功能,在首次体验中让用户感受到产品的独特价值和实用性。
    • 实例:Picsart通过会员试用模式,让用户在使用初期就能体验到产品的强大功能。
  3. 留存用户(Retention)
    • 定义:通过不断优化产品体验和服务,使用户持续使用产品。
    • 策略:定期发布新功能,保持产品的新鲜感和吸引力;建立完善的客户服务体系,及时响应用户需求和反馈;通过积分、等级、优惠券等激励手段,提高用户活跃度和留存率。
    • 实例:快手通过举办奥运挑战赛、发放红包等活动,提高了用户的参与度和留存率。
  4. 获取收入(Revenue)
    • 定义:通过产品或服务实现商业变现。
    • 策略:根据产品特性,采用会员制、广告、电商等多种变现方式;简化付费流程,提高付费转化率;通过数据分析,识别付费意愿强的用户群体,进行精准营销。
    • 实例:哔哩哔哩通过多模块广告变现和大会员制度,实现了可观的商业收入。
  5. 推荐传播(Referral)
    • 定义:鼓励用户通过口碑传播,吸引更多新用户。
    • 策略:在产品中嵌入易于分享的功能,如邀请码、分享链接等;通过物质奖励(如红包、优惠券)或精神奖励(如满足感、虚荣心)激励用户分享;确保分享过程简单顺畅,提高分享成功率。
    • 实例:拼多多通过拼团砍价等活动,实现了用户之间的自发传播。

总结:

AARRR模型为企业的用户增长和商业变现提供了清晰的路径和有效的策略。通过深入理解和应用这一模型,企业可以在激烈的市场竞争中脱颖而出,实现可持续发展。该模型强调数据驱动、用户体验、持续迭代和团队协作,是增长黑客在进行用户增长时的重要工具。

PaaS 平台产品部署与升级问题全析

一、话题的背景与现象呈现:

在 OP 私有化部署的软件产品应用场景中,常出现这样的困境:用户在软件实际使用时,遇到现有软件无法通过配置变更来实现的需求或解决的问题。实施服务供应商被找来后,称这是产品功能问题,自身无法解决,需找软件厂商;而软件厂商则表示该需求在其产品的某个迭代版本中已解决,建议用户升级到最新版本。这一情境下,实施服务供应商处境尴尬,急需思考有效的解决方案。

二、深度问题分析

1、费用争议

  • 软件厂商立场:认为自身责任是提供软件,MA 责任范围仅为免费提供升级包,升级服务工作量成本应由客户或服务商承担,且此点在 MA 服务条款中明确说明。
  • 实施供应商困境:查看厂商升级文档后发现短期内有多个小版本升级,按升级指南操作工作量大,且之前实施费用未涵盖此部分,抗拒承担费用。不同的软件厂商提供的升级方式会有较大的成本差异:有的厂商提供的软件升级方案不能跨版本升级,必须逐个版本升级,这种工作量是最大的,而且升级失败的风险很大,因为任何一个版本升级出错,就没法升级到最新的版本。也有一些厂商提供的软件升级方案可以跨版本升级,他们在升级脚本中会自动判断升级前的软件版本,做不同处理。这种厂商的软件升级工作量相对较小。 汉得H-ZERO PaaS平台属于后面一种。
  • 最终用户观点:觉得此类需求或问题本就属于软件质保责任范围,费用应由实施供应商承担。

以 Oracle 和 SAP 软件为例,它们绝不提供升级服务,仅提供解决方案和升级包。实施商在质保期内,会根据问题或需求是否在 SOW 范围内决定是否免费提供升级服务;在国内,因 SOW 界定较模糊,费用承担多取决于客户 IT 预算和双方关系。项目过质保期后,客户若要升级,通常需支付费用给实施商开展升级项目。

2、PaaS 平台部署难题

PaaS 平台包含众多模块,若各模块单独部署,升级问题与上述类似;若共同部署,一个模块升级可能影响其他模块,因为可能涉及共享底层功能模块升级,导致工作量大幅增加,从这方面看,单独部署更具优势。但单独部署也存在额外成本:

  • 硬件成本:基于微服务架构的 PaaS 平台有基础服务组件要求,每套至少需 1 – 2 台 8 核 16G 的服务器或虚拟机资源。若为集成平台、低代码开发平台、统一门户权限管理平台分别单独部署,将增加 3 – 6 套硬件资源成本。
  • 运维工作量成本:基础服务组件升级时,共同部署只需升级一处;单独部署则需对每个部署实例进行升级操作,且升级后需投入必要的测试工作量
  • 因此,单独部署和共同部署各有利弊,聪明的 CIO 可能采用混合方案,对非核心业务系统共同部署,对关键核心业务系统单独部署。

三、针对性解决方案

对于采用共同部署的最终客户,当 A 模块出现问题需升级,且升级涉及与其他模块共用基础服务组件,可能影响 B、C 等模块时,有以下两种解决方案:

  • 方案一:请求厂商针对 A 模块问题提供单独某个大版本下的修复版小版本,而非最新的大版本的新版本(因为大版本新版本可能做了比较大的改动,也可能引用与其他模块共用的新版本基础组件,导致其他模块被动升级,大幅增加解决当前问题的工作量)通常厂商会对每个大版本提供几年的支持,如果不再支持,会发通告;只要是在支持范围内的大版本,只要持续付费MA,那么原则上产品的bug问题,厂商都会提供修复方案(一个Patch或者一个相同大版本下的小版本),对于超出支持历史时间范围内的软件产品版本,如果还要解决特殊问题,那么就需要通过特殊通道去依赖厂商配合了。
  • 方案二:考虑到其他模块未来也需升级,直接升级到最新版本,最新版本可能依赖了新版本的基础组件,那么同时对受此基础组件影响的其他模块一并升级。但是这种方案要谨慎,需要仔细评估是否会引发其他模块的大版本升级, 因为对于PaaS平台,尤其是使用了高低代码开发平台,AIGC开发平台的最终客户,如果已经基于这些平台开发了一些业务应用系统,那么你升级之后必然要对这些应用系统做回归测试,尤其是大版本升级通常涉及较多的的回归测试和应用程序修正工作。这种测试和修正成本跟你在平台上已经构建的应用数量有关系,需要做谨慎评估。通常来说最终客户不应该为了解决某个模块的bug问题而要求对整个PaaS平台进行大版本升级,因为大版本升级影响的范围比较大,需要做全面的对业务操作的风险评估、升级和回归测试的成本评估,大多数情况下需要单独申请预算立项来做。

就解决特定问题而言,方案一成本最低,是合理的方案,所以大家通常更倾向于此方案。

四、附件:PaaS 平台模块构成详解

PaaS 平台产品一般由多个关键模块组成:

  • 高代码开发平台:又称专业代码开发平台或高可控开发平台,常用于构建企业核心业务系统主干。
  • 低代码开发平台:即高效率开发平台,具备零代码开发能力,用于构建企业核心业务系统部分支干以及多数非核心应用,满足长尾 IT 需求。
  • 集成平台:也叫信息总线,主要用于企业各应用间的 API 功能集成和数据集成。
  • 流程平台:也就是工作流平台,作为系统建设中的流程驱动引擎,在高低代码融合开发中广泛应用。
  • 统一门户和权限管理平台:包含统一门户 Portal、统一身份认证、统一权限管理等功能,用于整合企业多套系统,方便用户登录和操作。
  • 统一部署运维管理平台:涵盖 CICD 持续集成、持续部署、服务治理、性能监控、日志及问题追踪等功能,助力 IT 部门运维所有应用系统。
  • 移动应用开发平台:多数高低代码开发平台虽采用流式布局实现 PC 和移动界面自适应,但无法满足企业需求。此平台针对移动端进行特殊开发处理,包括专门布局设计、适配安卓、IOS、鸿蒙的壳应用、后台集成及权限管理等能力。

Hzero 安装问题记录

1、mysql版本选择:

因为每个人获得的Linux服务版本不一样,安装Mysql时可能遇到的问题有

现象1: Public key for mysql-community-common-5.7.44-1.el7.x86_64.rpm is not installed(Linux版本比编写安装手册的人高)

现象2:ERROR You need to update rpm to handle: rpmlib(PayloadIsZstd) <= 5.4.18-1 is needed by mysql84-community-release-el9-1.noarch(新获得的Mysql版本比当前服务器版本高,比如适合linux9的,但你当前的linux服务版本是7.X)

原因: 没有下载跟Linux版本匹配的Mysql 版本。

解决方案:去mysql网站下对应版本的mysql安装就没问题了。

快速了解SDR

什么是SDR

SDR,全称是Sales Development Representative,即销售开发代表。在B2B企业中,是市场营销部门和销售部门之间的接力棒。从整个销售流程来说,SDR能够帮助营销流程更加规范,通过分工,将复杂的工作分配给最适合它的员工,提高销售效率,缩短成交周期,加速业务增长。1让生产商机和鉴别线索的过程更加专业化;2识别未成熟的线索交由市场部孵化,从而提高线索利用率;3释放销售的生产力,让销售集中精力打单,提升线索转化效果。

快速了解SDR

如今,很多公司市场部在很大程度上是由流量为目标的,使用了各种技术、创建了各类内容来获取大量的线索来。但是,这种流量的增加,也使得低质量线索的数量激增。而销售通常的注意力都会放到购买意愿最高的那群人中,而剩下的那些他们认为可能成单概率不大的线索就会被忽视。

这就导致了市场部和销售之间会产生矛盾:市场部会问为什么销售人员没有跟进他们的线索,而销售人员认为市场部不懂什么是真正高质量的线索。

所以,需要有一种职能来填补「市场」和「销售」之间的空白,解决二者之间存在的矛盾,即SDR。

SDR能为企业带来什么价值

1. 更快的响应时间和赢单机会

企业对线索的响应时间越快,越容易增加商机机会。

一个训练有素的SDR团队会通过多种方式(如微信、电话、电子邮件、短信等方式),尽快与潜在客户联系,帮助企业赢单。

2. 提升市场与销售的协同效率

市场团队需要销售部提供反馈数据来改进和优化市场活动,但销售通常不反馈数据信息,或者反馈的数据并不完整。而SDR就成为了「市场部」与「销售部」间的接力棒,可以对数据进行高效整合和处理反馈给市场部,有助于市场部可以及时获得他们需要的信息,以便更好地策划下一次的活动,优化市场部对外的信息传递。

3. 筛选高质量的线索,提升销售ROI

销售与潜在客户沟通通常会占用大量的时间和资源。根据Topohp的研究,销售平均18个电话只能成单一个客户。同时,销售没有时间可以跟进来自多个不同渠道的线索。

SDR会在第一轮的电话沟通中确定潜在客户的痛点、预算和总体需求,这有助于确定线索所处的位置,以便销售人员能够在关单的过程中准确地掌握客户的情况和信息。经过SDR团队筛选出高质量的线索给销售进行跟进,增加销售团队的交易量。当销售可以将主要的时间精力放到高质量的线索时,他们的时间可以创造更多的价值。销售团队的时间投资回报率也就提高了。

4. 减少线索浪费,提高线索转化

市场团队需要销售部提供反馈数据来改进和优化市场活动,但销售通常不反馈数据信息,或者反馈的数据并不完整。而SDR就成为了「市场部」与「销售部」间的接力棒,可以对数据进行高效整合和处理反馈给市场部,有助于市场部可以及时获得他们需要的信息,以便更好地策划下一次的活动,优化市场部对外的信息传递。

SDR的岗位职责

SDR的主要工作是判断潜在线索的质量,并进一步孵化它们,使其有机会向漏斗底部进行转化,从而缩小市场和销售之间的差距,减少企业在低质量线索上浪费的时间和资源。所以SDR的主要工作流程可分为3大模块:

1筛选高质量的线索

SDR需要和市场部其他职能岗位配合(比如投放、内容、PMM)。这些职能部门会通过多种形式或渠道(如活动、内容、官网等)获取线索,这些线索都会转交给SDR,由SDR进行线索质量的判断,决定这条线索直接转给销售人员拜访跟进还是由SDR继续孵化。

2将高质量的线索分派给销售

SDR需要与销售团队密切合作,将高质量的线索交付给销售,安排销售和高意向客户电话或见面,销售拜访客户后判断是否值得跟进,让销售专注于成单。对于销售跟进拜访后判断不接受为SQL的线索,SDR需要进行分类跟进孵化,从而形成营销闭环。

3针对低质量的线索进行持续孵化

SDR对低质量线索会采取进一步孵化,使其有机会向漏斗底部进行转化,从而缩小市场和销售之间的差距,减少企业在低质量线索上浪费的时间和资源。

SDR如何进行精细化运营

SDR怎么判断出高质量客户

不同公司判断成为MQL或SQL的标准不同,但也会有一些共通性。高质量的线索是符合公司理想客户形象的潜在客户,他们知道自己遇到了某个问题,也了解到你的公司可能可以提供解决方案,同时他们有能力购买。一般情况下,SDR对于符合以下几点的线索会判定为高质量线索:1该潜在客户的职位较高,是决策者。

2潜在客户遇到了某个问题,需要产品或服务来帮他们解决。

3自己提供的产品或服务可以帮潜在用户解决这个问题。

4潜在客户希望尽快解决这一问题。

5潜在客户的预算可以支撑其购买产品/解决方案。

SDR针对不同阶段线索的孵化

不同公司判断成为MQL或SQL的标准不同,但也会有一些共通性。高质量的线索是符合公司理想客户形象的潜在客户,他们知道自己遇到了某个问题,也了解到你的公司可能可以提供解决方案,同时他们有能力购买。一般情况下,SDR对于符合以下几点的线索会判定为高质量线索:

1客户对企业的认知不够深。

2客户目前缺少资金。

3客户的岗位没有足够的决策权。

4客户目前正在用竞品的产品,而且短时间内无法切换。

5这部分客户在未来完全有可能出现采购需求。

但是,这部分客户在未来完全有可能出现采购需求。因此企业一定要对潜在线索进行持续的孵化。如果线索没有被销售部门接收,线索一定要重新回到流量池中继续孵化。

进入流量池中的线索分为两种:一种是高意向用户,可以直接转给销售;另一种是低意向用户,可能此时由于预算限制、或者公司发展等各类原因无法进行购买。很多企业对于这类低意向用户会直接放弃,其实这是一种非常浪费的方式。

对于那些还未达到转给销售标准的低质量线索,此时没有成单不意味着未来也不会成单。所以需要有SDR的孵化过程与这些线索建立关系,通过优质的内容、活动、互动等方式,让这些潜在用户对自己的兴趣程度加深,进而变为愿意购买的用户。

SDR团队的角色分工

根据线索来源的不同,SDR团队会分为Inbound和Outbound两类:

SDR需要最大限度地发挥他们的影响,Inbound SDR和Outbound SDR的工作任务以及需要的技能不同。而Outbound SDR通常需要比Inbound SDR了解更深入的产品知识,因为Inbound SDR通常联系的是那些很了解自己产品并且愿意和你的公司建立联系的潜在客户。不过两种SDR都需要储备足够多的业务知识、产品知识和专业以应对面临的挑战。

Inbound SDR

负责通过电话、微信方式第一时间联系Inbound Marketing来源的线索,或者清洗线索池里已有的原始线索,了解、判断、挖掘客户情况及需求后做客户信息完善及标签分类,配合致趣百川营销自动化工具设计孵化流,对标签客户做跟进培育,并将达到转出条件的高意向客户转出给销售人员跟进。

Inbound线索的主要来源渠道包括:

SEO/SEM

400电话、百度商桥、官网注册试用、领英投放等

直播

学习型内容(获客为目的,通常邀请KOL或者明星企业来做分享,内容和产品的关联度不是很大)和加速型(加速转化为目的,通常邀请IP老客户来做背书分享,内容和产品关联度紧密)

内容营销

产品案例、调查问卷、白皮书、短视频等

活动

自办型(包括以品牌曝光及获客为首要目的、低频率的大型自办峰会和以加速转化为目的、高频率的小型沙龙和产品体验会)、合办型会议(通过免费资源置换的形式和目标客户一致的合作伙伴一起合办)及赞助型会议的线索(通过资源置换或者合理的费用赞助合作的面向垂直且聚焦目标客户的峰会活动)

Inbound SDR会根据不同线索来源进行分类,设置电话跟进的优先级。对于整体线索质量较好的渠道优先进行跟进。

Outbound SDR

通过各类营销工具或者人脉资源寻找所负责的目标行业客户,开拓市场,挖掘出潜在客户的联系方式,再给这些潜在客户打电话或发电子邮件,完成需求挖掘、线索跟进与孵化。建立所负责目标行业的合作伙伴生态并将达到转出条件的MQL转出给销售人员跟进。

Outbound SDR团队初期规模可以控制在2~3人,其职责主要是负责目标行业的定向客户开拓。Outbound要主要去找出目标企业的名单和信息,主动拓展。Outbound SDR的拓展动作可以如下展开:

第一步:根据已合作客户/商机客户名单划分目标客户细分行业子类,可以通过第三方工具通过字段标签筛选出每个子类目标客户企业名(在前期,Outbound SDR可以要求每个销售同事每周给予一些签约客户和商机客户名单做周边企业的定向拓展)。

第二步:通过垂直行业媒体榜单或者通过第三方工具“顺藤摸瓜”找到同行企业。

第三步:根据企业名称在SCRM后台搜寻是否有客户注册,对于未成单但是在后台注册的客户可以转交给Inbound SDR去做跟进(避免Inbound SDR和Outbound SDR产生业绩冲突)。

第四步:对于后台没有注册的目标客户可以通过一些渠道找到目标客户对接人并引导到社群通过各类活动和内容做持续跟进孵化。

Outbound SDR应该多关注行业融资信息,以及Outbound SDR可以和BD相配合,让BD同事通过合作方定向引荐目标客户。

SDR团队的激励机制

由于大多数的B2B企业的成交周期比较漫长,商机的认定本身也需要一定的时间,所以基于这个指标的考核对于SDR们注定是个中期的激励效果。但是因为SDR们工作的实质并没有那么“有趣”,也不似销售的业绩那么直接,所以这个团队的报酬体系中必须平衡一下短中长期的回报,才能够更有效地激励大家。于是对于新兴的SDR团队致趣百川建议设计如下的激励体系:

短期激励:奖励突出的行为,做月度单项奖

刚入职的SDR一般需要两个月左右的培训和演练的时间,这个期间无法进行业绩考核,但是可以设置和学习以及Role Play相关的单项奖,奖金额度不大,但重在激励大家进入到一个积极的状态。

中期激励:考核行为指标+商机指标,按季度计算绩效奖金

根据平均成交周期,致趣百川认为按照季度考核SDR的业绩是比较合理的。但因为商机的创建动作并不在SDR自己手中,为了避免阶段性的被动等待,所以会把SDR的通话时长、接触客户数量等行为指标也纳入到绩效计算当中,占到了一定比重。

考核指标以SQL为核心,然后加上一些权重,每天的电话量、转出量需要达到公司的最低标准。如果当月的SQL达标,但是电话量没有达标,可以考虑在奖励的权重上减少20%~30%。

长期激励:销售收入的小比例分成,按年度计算额外奖金

同样的商机数量,其价值一定是不同的,如何让输出更高质量商机的SDR能够受到更多的激励?

可以考虑从商机输出后最终成交的业绩中拿出来一个比较小的比重,在年底对SDR进行一个额外的奖励。这样的长短期综合下来,基本上确定了激励体系的长效性,以及牵引了SDR们对于数量和质量的双重关注。

关于SDR的常见问题

如何衡量SDR的工作量? 

1、与潜在客户联系的次数:特别是通过电话、电子邮件或会议而与客户建立联系的次数。通过这一指标,可以了解SDR的活动情况。可以每天、每周、每月或每年跟踪这一数据,并通过这一指标来优化SDR的时间安排;

2、响应率:对于潜在客户的语音电话、电子邮件等,积极响应的频率有多高。利用这一指标去指导并训练SDR团队,可以帮助其在沟通转化过程中更容易成功。

有哪些指标可以怎判断SDR工作的效果?

1、有效沟通率:与潜在客户产生有意义的对话或交互的数量。

2、每次赢单所需的触达次数:为达成一项成功的交易所需的对外联系数量。

3、MQL(Marketing Qualified Leads, 市场部认可的线索)到SQL(Sales Qualified Leads, 销售认可的线索)的转化率:每天、每周、每个月或每年从MQL转化为SQL的数量。

4、SQL(Sales Qualified Leads, 销售认可的线索)到Opp.(Opportunity,商机)的转化:每天、每周、每个月SQL成为商机的比例。

5、平均交易规模:这个指标揭示了SDR正在联系的客户可能成单金额的平均值。SDR不仅应注重数量,还应注重质量,需要鼓励他们尽可能地追求大客户。

怎么判断SDR给公司带来的影响?1、成单/收盘价的商机数量:SDR创造的商机中最终成单的百分比。可以显示SQL的质量。

2、赢单率:可以衡量一段时间内有多少SQL丢失或成交。

3、SDR带来的销售线索总数和占比:这些是衡量SDR团队对销售团队带来的贡献程度。

拓展阅读

SDR和电销有什么区别?

以上内容转载来源:致趣百川

SQL 性能分析器实验 – 硬件变化对执行计划的影响

测试环境:

DB: Oracle Database 11gR2

APP: EBS R12.1.3

参考文档:Doc ID 1577290.1

 

SQL 性能分析器用于评估系统的变更对SQL执行计划和性能的影响;

可能的应用场景包括:

1、数据库升级

2、硬件、操作系统、数据库的配置变更

3、数据库参数的变更(初始化参数和优化参数)

4、Schema的变更

5、统计信息的变更

本实验的目的主要探讨硬件的变更对执行计划的影响;

 

SQL性能比较分析主要分成如下几个步骤:

  1. 捕获SQL工作负载
    可使用STS( SQL Tuning Set )来捕获SQL工作负载.  STS 由SQL语句,执行的统计信息 和执行的上下文构成.STS可以从生产环境捕获SQL工作负载,完成后可以传送到其他的系统环境,在其他系统环境上进行性能分析。.
  2. 创建SQL性能分析任务
    在建立STS之后,可以建立一个SQL性能分析任务.
  3. 执行一个SQL性能分析任务, 一个SQL分析任务是一个容器,这里面包括了用于SQL性能分析的所有的数据,它至少包括两个SQL数据和一个比较结果.
    1. 变更前的SQL性能试验,一个变更前SQL试验可捕获一个STS在特定的环境下的执行性能数据,
    2. 变更后的SQL性能试验,一个变更后的SQL试验是在测试环境的某些因素变化以后再进行的,这样就获得了另一份可比较的数据。
    3. 比较两个SQL试验
      在变更前后的两个SQL试验完成后, 收集的性能数据就可以进行比较了。Oracle提供了比较工具.
  4. 生成报表
    SQL性能分析器报告包含了2个试验的分析任务信息,并根据所选择的特定选项比较的性能指标。然后,您可以分析变化的影响,并做出更改系统进行进一步的测试,或调整,可能会出现倒退的特定查询。

     下面具体展开:

     1、创建STS(捕获SQL工作负载)

Gforge 迁移日志

背景: 原网站放在公司服务器上,由于备案过期被电信给封IP了; 后找上海电信重新备案,上海电信说域名是个人注册的,但公司的公网IP属于公司,两者不一致无法在上海电信备案,因此只能转到阿里云,阿里云是可以给个人网站备案的;

需求: 把Gforge平台 从公司服务器迁移到阿里云服务器

执行过程:

1、打包原系统上的数据文件

tar -zcvf gforge_var_lib.tar.gz  /var/lib/gforge

压缩后有1.9G;  压缩前2.3G

2、打包原系统上的数据库

命令操作:
数据的导出:pg_dump -U postgres(用户名)  (-t 表名)  数据库名(缺省时同用户名)  > c:\fulldb.sql

pg_dump -U gforgece gforge5** >/d01/gforge5ce_bak_20141105.sql

tar -czvf gforge5ce_bak_20141105.sql.tar.gz gforge5ce_bak_20141105.sql

压缩前144M,压缩后12M

数据的导入:psql -U postgres(用户名)  gforge5**数据库名(缺省时同用户名) < >/d01/gforge5ce_bak_20141105.sql C:\fulldb.sql

3、打包原系统上的程序文件

tar -zcvf gforge_opt.tar.gz /opt/gforge5

有12M

4、目标机上安装Gforge

上传  install-gforge-ce-561-src.zip 解压缩

1) 执行第一步   install-gforge-1-deps.php CENTOS5  会自动下载安装依赖包;

但 wv-1.0.3-1.fc4.x86_64.rpm 会自动下载却未自动安装,提示缺少wvText, 只要手动安装一下即可:

rpm -ivh wv-1.0.3-1.fc4.x86_64.rpm

执行第二步之前,先初始化  postgresql 数据库

service postgresql initdb

然后启动服务

# service postgresql start

把PostgreSQL 服务加入到启动列表

# chkconfig postgresql-9.2 on

# chkconfig –list|grep postgres

修改PostgreSQL 数据库用户postgres的密码(注意不是linux系统帐号)

PostgreSQL 数据库默认会创建一个postgres的数据库用户作为数据库的管理员,默认密码为空,我们需要修改为指定的密码,这里设定为’postgr**’。

# su – postgres

$ psql

# ALTER USER postgres WITH PASSWORD ‘postgres’;
# select * from pg_shadow ;

2) 安装Gforge DB

php  install-gforge-2-db.php

正常完成

3) 安装第3步

这步安装其实有点搞,因为选择阿里云服务器的时候选择的是带AMP的镜像,但这个镜像的默认应用都是安装到\alidata目录下的,包括httpd.conf的配置文件等都在这个目录下,而不是标准安装包的目标目录,但Gforge 安装的时候都是去修改默认安装配置的,这样就没法装了,方法是把\alidata下的APM安装全部卸载掉(有默认的readme.doc文件可参考),然后自己手动使用yum 来安装AMP;

安装完后在执行第三步;

php  install-gforge-3.php  CENTOS5

最后重启http服务时出错,把Gforge 虚拟主机apache配置中的php_value  # 注释掉可重启。

php_value  include_path  “.:/opt/gforge5:/opt/gforge5/lib:/opt/gforge5/lib/external” 在php.ini中已经配置了,这里可以去掉。

另外报缺少 ioncube 文件   ,参考 http://zpz.name/1927/解决

备注:apache 如果使用yum remove  httpd 卸掉,然后用 yum –y install httpd 重装后,其httpd.conf中的配置便复原了,使用yum install php 后,要配置Apache 加载php  ,否则访问.php就不执行出现源码了,可参考:http://blog.sina.com.cn/s/blog_70121e200100lq0h.html

第三步成功后,应该可以正常访问Gforge了。说明相同版本的环境已经Ok了,  然后我们在进行移植;

5、  还原

改名 /var/lib/gforge  -> /var/lib/gforge_bak20141113

改名 /opt/gforge5 –>  /opt/gforge5_bak20141113

然后把原系统上打包的文件上传,然后还原;

tar -xvf gforge_var_lib.tar.gz

tar –xvf gforge_opt.tar.gz

然后倒入数据库

先创建用户和数据库:

psql -U password
postgres=# create user “gforgec*” with password ‘gforges*f’ login in role “gforge”;

create database “gfoXXXXX”
with owner = gfoXXX
encoding =’UTF8′
tablespace = pg_default
connection limit = -1;

然后 上传 gforge5ce_bak_20141105.sql

导入:

psql -U gfoXXX  gfoXXX<  /gforge5ce_bak_20141105.sql

倒入完成后更新数据库连接配置:

/etc/gforge5-db-conf.php

使用新创建的用户名和倒入的数据库名。

6、测试

发现问题

问题1、用户登录时报错: ERROR: text search configuration “default” does not exist

解决方法:

切换到Gforge所用数据库:

psql -U gfoXXX -d gfoXXX

CREATE TEXT SEARCH CONFIGURATION public.default ( COPY = english)

测试全文检索配置default 可用

gforXXXX=> select to_tsvector(‘default’,’hellobaby’);
to_tsvector
—————
‘hellobabi’:1
(1 row)

再次登录正常了;

参考: http://www.postgresql.org/docs/devel/static/sql-createtsconfig.html

问题2:站长管理,搜寻用户时报错:

Could not execute query [Native Error: ERROR: operator does not exist: integer ~~* integer LINE 5: AND (user_id ILIKE 0 ^ HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.] [User Info: SELECT DISTINCT COUNT(*) FROM “user” WHERE is_group=false AND (user_id ILIKE 0 OR unix_name ILIKE ‘%%’ OR email ILIKE ‘%%’ OR firstname ILIKE ‘%%’)]

原因:8.4版本不支持整数到字符串的隐式转换,详情参见:

http://www.postgresql.org/docs/8.3/static/release-8-3.html#AEN85667

解决方案1:

更改SQL:SELECT DISTINCT COUNT(*) FROM “user” WHERE is_group=false AND (user_id::text ILIKE ‘0’ OR unix_name ILIKE ‘%%’ OR email ILIKE ‘%%’ OR firstname ILIKE ‘%%’)

但每次碰到这样的老SQL 都要改,比较麻烦;

解决方案2:

创建一个函数,再添加整数 ilike 整数的操作符,一次性解决所有类似问题。

CREATE OR REPLACE FUNCTION of_integer_ilike_text(prm_integer integer,
prm_intege2 integer)   RETURNS boolean AS

declare
BEGIN
RETURN prm_integer::text ~~* prm_integer2::text;
END;

image

CREATE OPERATOR ~~*(
PROCEDURE = of_integer_ilike_integer,
LEFTARG = integer,
RIGHTARG = integer);

image

问题3:

发现TO-Do任务,在没有关闭的情况下不发提醒邮件:

原因:Cron 脚本未加到crontab中去。

解决方案:把需要cron运行的php脚本加到crontab中去:

>crontab -e

#########################
# GFORGE CRONJOBS
#########################
*/10 * * * *    cd /opt/gforge5 && /usr/bin/php -d include_path=”.:/opt/gforge5:/opt/gforge5/lib:/opt/gforge5/plugins:/opt/gforge5/lib/external” /opt/gforge5/bin/gforge cronjob  /opt/gforge5/cronjobs/send_notification_queue.php
*/15 * * * *    cd /opt/gforge5 && /usr/bin/php -d include_path=”.:/opt/gforge5:/opt/gforge5/lib:/opt/gforge5/plugins:/opt/gforge5/lib/external” /opt/gforge5/cron15.php
15 3 * * *      cd /opt/gforge5 && /usr/bin/php -d include_path=”.:/opt/gforge5:/opt/gforge5/lib:/opt/gforge5/plugins:/opt/gforge5/lib/external” /opt/gforge5/crondaily.php
#########################
# GFORGE SPHINX Job Index
#########################
15 1 * * *      . /usr/local/sphinx/index_gf_main_rotate.sh
*/15 * * * *    . /usr/local/sphinx/index_gf_delta_rotate.sh

后记:

这个迁移完成后 把 mysql 安装一下,然后把Blog迁移过来

安装mysql可以参考: http://www.2cto.com/database/201207/141878.html

Oracle 总帐介绍-4(预算,保留,合并,报告)

预算控制

Oracle 财务提供了有力的、灵活的、易用的预算控制能力来控制费用并且阻止超出预算之外的成本支出。应付帐管理、总帐管理、和采购被完全集成,从而为预算控制需求提供了完全的解决方法。

业务需求

使用Oracle 财务可以实现:

确认实际和计划费用不超过可用资金

为所有可以影响资金的业务即时监测

当为需求、订单、发票或者日记帐储备资金时即时更新可用资金余额

按帐户或者费用文件类型选择超过费用的预算控制程度

多级别的监测资金和保留金

不管会计方式或者货币,控制费用

选择希望强制预算控制的明细和汇总帐户

通过日记帐资源和类别进行预算控制

指定预算控制的容差。比如,如果业务超过了可用资金$1000或者更少,用户被允许进行业务

因为不足的可用资金,所以跨过基础业务

从其他的非Oracle应用中输入日记帐

记录支出保留金,审核、调整支出保留金,正如审核和调整正常的日记帐一样

有选择的清算额外支出保留金,或者将其保留至年电跨度

记录从冲销资金中取消支出保留金

报告可用资金

主要特征

无限制的支出保留金类型

总帐可以规定无限制的支出保留金类型。因为商业活动中可能会使用预算控制的术语,这是同其他组织不同的。用户可以利用这种特性根据组织的术语为日记帐命名。

比如,当为需求储备资金时,合同的条件需求支出保留金参考Oracle 财务生成的日记帐,当审核订单时,合同的条件订单支出保留金参考采购生成的日记帐。

即时监测资金

可以为业务即时单独监测资金。Oracle 财务即时通知用户是否有足够的可用资金。用户也可以监测日记帐、需求、订单和发票的资金。

即时更新可用资金

当成功为业务保留资金后,Oracle 财务自动更新可用资金余额。

即时更新可用资金

绝对的或建议的预算控制

用Oracle财务,用户可以确定是否允许超过可用资金的业务。如果使用完全预算控制,没有可用资金的情况下,Oracle 财务不允许为业务保留资金。如果使用建议预算控制,Oracle 财务即时通知没有可用资金,但是为业务保留资金。

Oracle财务允许用户使用绝对或者建议的预算控制,或者没有针对某一具体科目、成本中心或产品线的预算控制来获得最大限度的费用控制。

多级资金监测和保留资金

为预算控制规定多级资金监测。用户可以选择Oracle 财务来进行详细帐目资金监测或者汇总帐目监测,也可以监测汇总和明细两种资金。

为预算控制汇总帐户

用总帐可以方便的定义需要的汇总帐户。无论何时更新详细科目的余额,总帐都自动更新汇总科目的实际、预算、和支出保留金。当生成汇总帐户时,用户仅仅指示是否需要为该预算控制使用汇总帐户。另外,可以审核总的预算余额、总支出保留金余额、总实际余额、或者可用的即时资金。

多种间隔类型

可以规定需要Oracle 财务进行预算控制的间隔类型。Oracle 财务给用户控制预算的灵活性。选择界限是否是硬的(不能超过界限访问可用资金)或者软的(超过周期界限自动访问可用资金)

多货币分配的支出保留金

Oracle 财务根据同多货币订单分配或者发票分配相一致的本位币进行资金监测。Oracle 财务在本位币中自动生成支出保留金。

预算

Oracle 总帐以需要的方式规定了灵活的预算和预算组织。可以用预算规则、预算公式、电子表格界面来完成或者审核预算。可以在预算之间转移金额。可以方便的将预算数量扩展到很多预算帐户中。可以记录日记帐来生成预算准备过程的审计报告。

保存资金选项

Oracle 财务灵活的控制费用。通过日记帐资源、类别和用户职责定义预算控制选项。或者规定想进行预算控制的帐户范围。

容差

进行预算控制的每种日记帐和类别,用户可以选择规定容限值和容限百分比,这样可以利用最小容限值或者容限百分比超过预算一个特殊的范围。

监测资金的改写

对进行预算控制的每种日记帐资源和类别,用户可以人工改写有足够资金的业务。另外,用户可以在本位币中指定一种改写金额。

日记帐导入

用日记帐,可以自动从现存的非Oracle应用中输入预算、实际、和支出保留金数据。日记帐导入利用新的或者是现存的非Oracle应用程序可以快速集成总帐。也可以通过日记帐为输入业务监测和保存资金。

日记帐录入

用总帐可以为人工输入日记帐监测或保存资金。如果在人工输入的日记帐中没有足够的资金,总帐将通知用户。

取消和冲销资金

Oracle 财务从不同的冲销资金中取消支出保留金,用户也可以方便的报告总的支出保留金和净的支出保留金

可用资金查询

Oracle 总帐可以即时查询可用资金,所以用户通过比较预算和适当的费用来知道实际和计划的费用。

预算控制报告

用财务报表生成器可以报告支出保留资金,这如同报告实际或者预算的数量一样方便。不用程序控制来设计和生成自己习惯的可用资金报告。总帐生成了标准的科目报告,比如总日记帐,来报告支出保留金和费用。

年终支出保留金处理

用总帐的 年终转帐功能有选择的将支出保留金转到下一年度。说明用户希望转帐的范围或者帐户数范围。总帐将支出保留金和预算转入期的余额,并且生成转帐审计报告。

 

 

保留款会计

总帐提供了有力的支出保留能力来阻止超过预算的支出。总帐可以即时的访问可用资金,所以可以了解如何支出保留同预算比较的实际费用。另外,总帐集成了其他的财务产品为需要的支出保留科目提供了完全的解决方法。

业务需求

使用Oracle 总帐可以实现:

输入支出保留帐,分配支出保留差额

同实际数据一样调整责任和承诺付款

确认实际和计划费用没有超过可用资金

复核可用资金

复核本期至今,本季至今,本年至今和项目至今的可用资金余额

支出保留会计与现存系统集成

将支出保留金转到下一年的开始余额中,支出保留金同预算数和可用的资金余额相同

主要特性

在线录入

可以即时输入支出保留金。总帐使这些数据有效,并确认信息的完整性和精确性。过帐前可以即时调整支出保留金。

保留金的集中分配

分配任何成本中心、机构的支出保留金,或者使用简单的公式来分配。比如,可以分配有关新设备结构的支出保留金。在运行支出保留金和报告错误之前,总帐将确认公式有效。

与采购和应付款集成

当审核和打印订单时,采购模块自动在总帐中生成支出保留金。当时发票和订单匹配时,应付帐系统自动在总帐中生成承付款来减少订单的支出保留金。

日记帐的输入

用日记帐输入,可以自动从非Oracle系统中输入支出保留金数据。日记帐输入集成了总帐中新的或现存的应用,比如:采购、应付帐、工资单或者其他的系统。

保留金的过帐

在总帐中控制支出保留金的过帐。用一些快捷健发送一些或者全部的支出保留金。另外,总帐自动 平衡支出保留金和储备金。

汇总支出保留金余额

用总帐可以方便的定义汇总帐户,它的余额是其他明细科目的总数。利用汇总帐户模版可以快速的定义大量的汇总科目。无论何时更新明细科目的余额,总帐自动更新所有的实际、预算和支出保留金。在即时可用资金的查询、公式、分配或者在用财务报表生成器生成的报告中都可以使用汇总帐户。

支出保留金报告

用财务报表生成器报告保留金如同报告实际或者预算数目一样方便。另外,可以无须编程设计和生成自己的可用资金报告。很多总帐报告,包括日记帐过帐报告,列出了支出保留金和费用的信息。甚至可以为特殊支出保留金类型的日记帐生成日记帐过帐报告。

可用资金查询

总帐可以即时访问可用资金,所以用户可以知道费用如何同预算和拨款进行比较。可以在不同权限范围中可以从详细项目、汇总帐户余额、总费用中查询可用资金。查询本期累计,本季累计,本年累计和本项目累计的合用资金。

年终支出保留金处理

可以将支出保留金转到下一年。总帐将支出保留金和预算数目分配进下一年的开始余额。打印年终结转的预览报告。

 

 

合并

合并过程需要统一企业中的所有子公司精确合作,所以在全球财务策略中实际会计流程中最敏感的弱点。为了使生产能力最大,财务策略必须有效提高支持合并过程的每天记帐活动。这个策略保证了每个子公司能提交合并所需要的财务数据。因此,子公司需要能方便的使用和维护的合并功能。

全球合并加强了全球企业的财务策略,这主要通过使用户操纵多步合并过程:准备数据、映射数据、转移数据、进行公司之间的抵销、报告和 分析合并财务结果。

业务需求

使用全球合并系统可以实现:

进行报告-仅仅报表合并或者数据转移合并记帐本位币

从任何详细资源合并数据,任何科目表、记帐本位币、会计期、和余额类型进行合并

用合并工作台和状态控制器进行监测和控制多公司合并

使用灵活的数据映射规则和如何将子公司的数据累记至合并总公司的

逻辑上用合并设置将数据进行分组和同步

用图表的模式审核完整的合并层次

在每种合并级别自动生成抵消分录

用单一模式在多种合并级别中进行追溯

生成合并财务报告来迎合法定报告的需求和内部数据的需求

在OLAP环境中分析合并结果

主要特征

报表合并和数据转移合并

总的来说,有两种合并方式:报表合并和数据转移的合并。支持两种合并方式。

报表合并:在GCS中,可以规定一种财务报告,包括几个子公司。

数据转移合并:

这种方式最适合有多个安装的数据库的全球企业。数据转移合并实际上是将数据从每个子公司转移到一个已经合并了母公司。 总帐用不同的记帐本位币、会计期间、和科目表为公司规定了无限帐套。用户可以用共享段值的不同科目表结构规定多帐套。

合并任何公司

全球企业从合并系统中需要比汇总的财务信息更多的其他东西。最好的合并系统支持详细的策略信息,比如国际收益率分析和通过产品分析的地区收益。所以全球企业需要一种合并方法,它能合并任何层次的商业活动。GCS是一种最需要的合并方法,它通过帮助用户管理动态的全球使市场环境来支持企业做出决定。

集中的监测和控制

直接用户的GCS界面在多步合并过程中的工作流概念指导用户完成每个任务。合并工作台是GCS合并功能的基础,它为合并无数的小公司提供了中央控制点,他还提供了所有子公司的复杂信息,这些子公司合并成一个母公司并且直接通知用户当前每种合并的状态。

合并工作台 状态控制器一起监测和控制合并

状态控制器根据合并过程的状态推荐应当采取的行动。用与工作台联系的状态控制器可以直接访问下面的窗口:数据映射窗口、数据准备窗口、数据转移窗口、减少和报告窗口

灵活的映射规则

异常商业智能被直接归入GCS合并映射规则中。映射规则使分离的商业单元快速合并余额—甚至当它们是不同的科目结构时。另外,GCS映射规则利用有效系数比如母公司的段值和汇总帐户来加速合并过程。

合并设置

合并设置简化了多步的合并过程。合并设置在逻辑上对多级合并结构的每个母公司进行了分组—即使子公司用不同的科目表、映射规则、和合并方法。也可以用合并设置将转移数据同步到每个合并级别。这样可以在系统中合并下一级别之前完成低级别的合并。

图形合并结构观察器

合并观察器在可扩展体系模式中显示了 多级合并结构。合并观察器可以然用户直接看到和分析全部的合并结构,不管它包含多少个中间的母公司。可以在个人节点中使全部体系分解从而分析总的合并结构。另外,扩展体系中的所有节点来观察母公司和子公司的明细关系。

在图形模式中观察全部的合并结构

抵消设置

用抵消设置可以在每个合并级别自动生成抵消分录 。抵消设置支持为计算和抵消少数股权、相互持有部分拥有的内部交易等复杂的公式。

高级追溯能力

合并余额是财务信息波形中的一个波峰。在GCS中可用一种单独的模式在多个合并系统中进行追溯,包括:

合并的母公司合资公司之间

汇总和明细帐户之间

明细帐和日记帐之间

日记帐和子模块业务之间

无限制的功能报告

在现在的快速变化商业环境中,全球的跨国企业不仅要访问更新的信息,还需要灵活的分析不同情况下的信息。GCS为用户提出了何时所需、何种信息。使用GCS,生成的报告可以规定和支持不同的用户层次,所以财务人员可以从总的情况观察合并信息。GCS生成的报告帮助用户提高获得重要财务信息的能力,从而可以使用户在变化不息充满竞争的环境中管理企业。

GCS生成的报告包括网站和电子表格。发布GCS将用户的报告直接发送到网站从而为人工分配删除了打印报告的麻烦。用网站可以将报告连接到一张HTML的网页中。每次打开报告时,都可以自动更新网页。也可以将电子表格复制在网站中的报告中,从而让管理者和财务分析家直接从网站上下载财务信息。所以可以方便的有效的进行预算分配、全球价格分析、或者合并结果。

用GCS的可互换报告组件,也可以实现从现存报告中混合行列生成新的报告。所以每次生成新的报告并没有增加工作,因为没有从零开始。

集成了OLAP分析能力

GCS与财务分析器,市场领先的在线即时分析工具进行紧密的结合,从而可以进行异常多维分析。分析家用OLAP即时聚焦到财务信息进行假设分析,而不是写常规报告。所以,财务分析扩展了全球企业在全球竞争环境中的准确投资和合并结果的影响之间的联系等方面的信息。

财务分析支持无限的商业元素来满足合并分析家的需求。用户可以对多种参数进行分类来获得特殊的信息。另外,可以比较多个商业单元、机构和生产线的数据。

 

 

报告

Oracle 总帐提供了有力的报告和合并能力,包括即时查询,标准报告和列表,用户可以用财务报表生成器来生成无须编程的客户化报表。用总帐可以直接、灵活的访问所需信息来管理业务。

业务需求

使用总帐可以实现

无须程序员的帮助自己设计报告

定义所需的复杂财务报告分析业务,包括为商业单元、盈利中心和成本中心生成的责任报告

利用多种标准的管理和会计报告来获取明细信息,包括科目表列表、日记帐、总帐和试算平衡表 ;当用计算机生成和打印报告时,没有要求一定联系终端 ;用简单的报告菜单和选项申请和多核即时报表;报告中包括了所有的财务信息,包括预算数据和统计数据,如销售单位,人头数,生产单元数,同时报告转换和输入的外币数;即时进行查询来查找更多的明细信息 ;如果想用个人电脑进行分析和计划,可以转换会计信息到诸如Lotus 1-2-3的电子表格中

主要特性

财务报表生成器(FSG)

FSG是非常有用的工具,用来支持可互换的报告对象、处理高性能的服务程序、有效利用系统资源的计划。也可以即时规定处理行、列和所有内部内容的报告

电子表格的报表定义

基于报表向导提供了联系到FSG的表格界面,还为不同用户级别规定了报告。初学者可以用电子表格规定简单的报告,中级用户可以将表格和相关的窗口相联系,高级用户可以设置性能这样可以比在单独的电子表格中更快的输入数据。最重要的是,电子表格界面让用户在表格中管理生成报告的过程,可以综合FSG和电子表格的不同优势。

基于电子表格报表的提交和输出

当定义报告后,可以在提交并在电子表格中审核它们。在报告生成之后,损益表可以自动将他复制回电子表格,并使用常规的设置,比如颜色、字体、和合作登记。也可以从模式模板中自动选择继承模板。比如在硬盘中有资产负债表模板和损益表模板,每种都有不同的模式。当生成损益表时,可以选择继承损益表模板的模式,当生成资产负债表时可以选择继承资产负债表模板模式。所以用户的报告可以准备随时分配到高级管理中。

异常报告

用来突出需要留意特殊信息。规定异常规则和如何标示想要引起注意的标准。用户可以方便的选择显示报告中的异常行。

责任报告

生成一种报告为管理者的汇总报告服务。用责任报告用户会发现各级管理者只需审核必要的信息。

复制报告对象、报告和报告集

自动复制可以让用户复制现存的报告对象、报告和报告集来快速生成新的报告,他还可以复制使用同一科目表的不同帐套,甚至可以用FSG的转移功能复制一个数据库中的数据到另一个数据库中。在实施总帐时,这是特别有用的,因为可以在测试和生成数据库时规定报告和报告对象,然后自动将他转移到产品系统中。

即时请求报告

用几个热健可以生成请求报告。比如,从报告设置列表中选择或者预选规定在总帐中的弹出菜单中显示的的报告,或者从预选规定的报告组件中选择生成特殊报表。

标准报告和列表

总帐提供了各种标准会计报告和列表,包括试算表、日记帐、总帐、帐户分析报告、科目表或者更多的报告。用户为详细或者汇总信息控制运行时间、分类序列和想在报告上看到的可选数据

即时访问

用户可以即时访问会计信息,检查财务报告、会计报告或者列表。

审计线索

Oracle 总帐自动保存所有活动的审计记录,用户可以方便的查出谁作了什么,何时进行的,审计线索帮助你追踪帐户活动和更改。

ASH报告实验

ASH 报告的作用:

    利用 ASH 报告可以分析持续时间通常只有几分钟的瞬间性能问题, 根据各种维度(如 time、session、module、action 或 sql_id )或这些维度的组合进行确定范围或目标的性能分析.

    瞬间性能问题持续的时间非常短,不会出现在Automatic Database Diagnostics Monitor (ADDM) 分析中。ADDM 尝 试在分析期间根据问题读 DB time 的影响报告重大的性能问题。如果某个特定的问题持续的时间非常短暂,则该问题 的严重性可能就被均匀化,或因分析期间产生的其他性能问题而减小。因此,在 ADDM 中可能找不到该问题的记录。

    ADDM 是否捕获某个性能问题,取决于该问题的持续时间与 AWR 快照之间的间隔的时间比。 如果性能问题持续的时间与快照间隔比非常大,则 ADDM 将捕获该问题。例如,如果快照间隔设为 1 小时,而性能问
题持续了 30 分钟,则该问题就不会被视为瞬间性能问题,因为其持续时间与快照间隔比较大,很可能被 ADDM 捕获 到。

    如果某个性能问题只持续 2 分钟,该问题可能就是一个短暂的性能问题,因为其持续时间与快照间隔的比例非常小, 不会出现在 ADDM 发现的问题当中。比如,如果用户通知您系统在晚上 10 点到 10 点过 10 分之间非常慢,而 ADDM 分析 的时段在晚上 10 点到 11 点之间,并且未显示任何性能问题,则可能发生了短暂的性能问题,在用户所报告的10分钟 时段内只持续了数分钟。

 

本实验的目的: 初步理解ASH报告

本实验的环境: 笔记本电脑上的EBS12.1.3 虚拟机(32位)

本实验的过程: 1、登录EBS,查询出一张客户=ABC Corporation Asia 的销售订单,在订单行上添加一行,新增3个AS54888的订购;然后保存;(这个过程在打开虚拟机首次执行时大约耗时10分钟;以后第二次会快很多,当我们这里就是研究第一次的ASH报告);

                      2、然后运行ASH报告,时间间隔为10分钟;

                      3、然后查看并分析ASH报告;

 

 

1、登录EBS,查询出一张客户=ABC Corporation Asia 的销售订单,在订单行上添加一行,新增3个AS54888的订购;然后保存;

image

 

2、运行ASH报告:

image

image

 

 

 

3、然后查看并分析ASH报告;

[oracle@syfdemo ~]$ more ashrpt_1_0212_1111.txt

ASH Report For VIS/VIS

DB Name         DB Id    Instance     Inst Num Release     RAC Host
———— ———– ———— ——– ———– — ————
VIS            280232500 VIS                 1 11.1.0.7.0  NO  syfdemo.ml.c

CPUs           SGA Size       Buffer Cache        Shared Pool    ASH Buffer Size
—- —————— —————— —————— ——————
   2      1,501M (100%)       992M (66.1%)       432M (28.8%)        4.0M (0.3%)

          Analysis Begin Time:   12-Feb-14 11:01:41
            Analysis End Time:   12-Feb-14 11:11:46
                 Elapsed Time:        10.1 (mins)
            Begin Data Source:   V$ACTIVE_SESSION_HISTORY
              End Data Source:   V$ACTIVE_SESSION_HISTORY
                 Sample Count:         311
      Average Active Sessions:        0.51
  Avg. Active Session per CPU:        0.26
                Report Target:   None specified

Top User Events                      DB/Inst: VIS/VIS  (Feb 12 11:01 to 11:11)

                                                               Avg Active
Event                               Event Class        % Event   Sessions
———————————– ————— ———- ———-
db file sequential read             User I/O             64.31       0.33
CPU + Wait for CPU                  CPU                  17.36       0.09
db file parallel read               User I/O              6.75       0.03
log file sync                       Commit                2.89       0.01
          ————————————————————-

////  上面这一节列出 来自用户进程的,占采样会话活动比例最高的一些等待事件; 这里例子中比例最高的等待事件是 数据库文件的顺序读; 说明最大的问题是IO;

 

 

Top Background Events                DB/Inst: VIS/VIS  (Feb 12 11:01 to 11:11)

                                                               Avg Active
Event                               Event Class     % Activity   Sessions
———————————– ————— ———- ———-
control file parallel write         System I/O            3.22       0.02
CPU + Wait for CPU                  CPU                   2.57       0.01
log file parallel write             System I/O            2.25       0.01
          ————————————————————-

////  上面这一节列出 来自后台进程的,占采样会话活动比例最高的一些等待事件;  最高的是控制文件的并行读,3.22% ;

Top Event P1/P2/P3 Values            DB/Inst: VIS/VIS  (Feb 12 11:01 to 11:11)

Event                          % Event  P1 Value, P2 Value, P3 Value % Activity
—————————— ——- —————————– ———-
Parameter 1                Parameter 2                Parameter 3
————————– ————————– ————————–
db file sequential read          64.31                 "1","593","1"       0.32
file#                      block#                     blocks

db file parallel read             6.75                 "3","89","89"       0.64
files                      blocks                     requests

control file parallel write       3.22                   "3","3","3"       2.89
files                      block#                     requests

log file sync                     2.89                "9474","0","0"       1.29
buffer#                    NOT DEFINED                NOT DEFINED

log file parallel write           2.25                   "1","2","1"       0.64
files                      blocks                     requests

          ————————————————————-

////  上面这一节列出   占采样会话活动比例最高的一些等待事件(按等待时间 %Event排序);  并细分出每种等待事件中P1/P2/P3 三种子类型值;

比如  db file sequential read          64.31                 "1","593","1"       0.32
file#                      block#                     blocks

表示  db file sequential read     是等待最严重的事件, 其中单个文件读发生了1次,单个Block读发生了593次,多个Block一起读发生了1次?    

 

Top Service/Module                   DB/Inst: VIS/VIS  (Feb 12 11:01 to 11:11)

Service        Module                   % Activity Action               % Action
————– ———————— ———- —————— ———-
VIS            e:ONT:frm:OEXOEORD            69.77 ONT/ORDER_MGMT_SUP      69.77
SYS$BACKGROUND UNNAMED                        7.72 UNNAMED                  7.72
VIS            frmweb@syfdemo.ml.com (T       6.11 UNNAMED                  6.11
               fnd.framework.service.lo       5.79 6882                     5.79
               e:ONT:wf:OEOL                  3.86 ONT/ORDER_MGMT_SUP       3.86
          ————————————————————-

////  上面这一节列出   占采样会话活动比例最高的一些服务和模块;  这里例子显示在这10分钟内,主要活动来自于销售订单Form;

Top Client IDs                       DB/Inst: VIS/VIS  (Feb 12 11:01 to 11:11)

                                                              Avg Active
Client ID                                          % Activity   Sessions
————————————————– ———- ———-
User            Program                           Service
————— ——————————— ——————–
OPERATIONS                                              76.53       0.39
APPS            frmweb@syfdemo.ml.com (TNS V1-V3) VIS

OPERATIONS                                               5.79       0.03
APPS            JDBC Thin Client                  VIS

          ————————————————————-

////  上面这一节列出   占采样会话活动比例最高的客户端信息;  这里例子显示在这10分钟内,主要活动来自于ERP用户OPERATIONS , 对应的数据库用户是APPS, 使用的程序是Form;

Top SQL Command Types                DB/Inst: VIS/VIS  (Feb 12 11:01 to 11:11)
-> ‘Distinct SQLIDs’ is the count of the distinct number of SQLIDs
      with the given SQL Command Type found over all the ASH samples
      in the analysis period

                                           Distinct            Avg Active
SQL Command Type                             SQLIDs % Activity   Sessions
—————————————- ———- ———- ———-
SELECT                                           83      35.05       0.18
UPDATE                                            1       7.07       0.04
PL/SQL EXECUTE                                   10       6.75       0.03
INSERT                                            5       1.61       0.01
          ————————————————————-

////  上面这一节列出   占采样会话活动比例最高的SQL语句类型;  这里例子显示在这10分钟内,主要活动来自于SELECT查询;

Top Phases of Execution              DB/Inst: VIS/VIS  (Feb 12 11:01 to 11:11)

                                          Avg Active
Phase of Execution             % Activity   Sessions
—————————— ———- ———-
SQL Execution                       85.85       0.44
PLSQL RPC                           75.88       0.39
Hard Parse                          17.68       0.09
Parse                               17.68       0.09
PLSQL Compilation                   14.15       0.07
          ————————————————————-

////  上面这一节列出   占采样会话活动比例最高的SQL语句执行阶段;  这里例子显示在这10分钟内,主要SQL语句阶段来自于执行。 SQL的解析都是硬解析?;

 

^LTop SQL with Top Events             DB/Inst: VIS/VIS  (Feb 12 11:01 to 11:11)

                                                        Sampled #
                 SQL ID             Planhash        of Executions     % Activity
———————– ——————– ——————– ————–
Event                          % Event Top Row Source                    % RwSrc
—————————— ——- ——————————— ——-
          2r68fjxqkmpt8            732202868                    0           6.75
db file parallel read             6.43 ** Row Source Not Available **       6.43
UPDATE OE_ORDER_LINES SET ACCOUNTING_RULE_ID = :B341 , ACCOUNTING_RULE_DURATION
= :B340 , CALCULATE_PRICE_FLAG = :B339 , ACTUAL_ARRIVAL_DATE = :B338 , ACTUAL_SH
IPMENT_DATE = :B337 , AGREEMENT_ID = :B336 , ARRIVAL_SET_ID = :B335 , ATO_LINE_I
D = :B334 , ATTRIBUTE1 = :B333 , ATTRIBUTE10 = :B332 , ATTRIBUTE11 = :B331 , ATT

          gdnwgx9fcxggr                  N/A                    1           3.22
db file sequential read           3.22 ** Row Source Not Available **       3.22
begin OE_SHIPPING_WF.START_SHIPPING (:v1, :v2, :v3, :v4, :v5); end;

          8k76jah7wnp6t           2273136528                    6           1.93
db file sequential read           1.29 TABLE ACCESS – BY INDEX ROWID        0.64
select prompt, description from fnd_menu_entries_tl where menu_id = :1 and entry
_sequence = :2 and language = :3

          bs4bnjpfdnpn2           2066941791                    4           1.29
db file sequential read           0.96 TABLE ACCESS – BY INDEX ROWID        0.96
select function_name, context_dependence, maintenance_mode_support, parame
ters, type, web_agent_name, web_host_name, web_html_call, web_icon, form_i
d from fnd_form_functions where function_id = :1

          ————————————————————-

////  上面这一节列出   占采样会话活动等待事件比例最高的事件,以及导致该事件的SQL语句;这里的例子显示,这10分钟内等待时间最长的事件是 db file parallel read ; 而该事件主要是由于 “更新订单行”的SQL语句导致的。

Top SQL with Top Row Sources         DB/Inst: VIS/VIS  (Feb 12 11:01 to 11:11)

                                                        Sampled #
                 SQL ID             PlanHash        of Executions     % Activity
———————– ——————– ——————– ————–
Row Source                               % RwSrc Top Event               % Event
—————————————- ——- ———————– ——-
          2r68fjxqkmpt8            732202868                    0           6.75
** Row Source Not Available **              6.75 db file parallel read      6.43
UPDATE OE_ORDER_LINES SET ACCOUNTING_RULE_ID = :B341 , ACCOUNTING_RULE_DURATION
= :B340 , CALCULATE_PRICE_FLAG = :B339 , ACTUAL_ARRIVAL_DATE = :B338 , ACTUAL_SH
IPMENT_DATE = :B337 , AGREEMENT_ID = :B336 , ARRIVAL_SET_ID = :B335 , ATO_LINE_I
D = :B334 , ATTRIBUTE1 = :B333 , ATTRIBUTE10 = :B332 , ATTRIBUTE11 = :B331 , ATT

          gdnwgx9fcxggr                  N/A                    1           3.22
** Row Source Not Available **              3.22 db file sequential read    3.22
begin OE_SHIPPING_WF.START_SHIPPING (:v1, :v2, :v3, :v4, :v5); end;

          8k76jah7wnp6t           2273136528                    6           1.93
INDEX – UNIQUE SCAN                         0.96 db file sequential read    0.64
select prompt, description from fnd_menu_entries_tl where menu_id = :1 and entry
_sequence = :2 and language = :3

          bs4bnjpfdnpn2           2066941791                    4           1.29
TABLE ACCESS – BY INDEX ROWID               1.29 db file sequential read    0.96
select function_name, context_dependence, maintenance_mode_support, parame
ters, type, web_agent_name, web_host_name, web_html_call, web_icon, form_i
d from fnd_form_functions where function_id = :1

          ————————————————————-

////  上面这一节列出   占采样会话活动等待事件比例最高的SQL语句及其执行计划,如果是SELECT查询语句,列出详细的执行计划信息,用以了解那部分的SQL执行导致了最主要的问题;这里的例子显示,这10分钟内更新语句和API执行是导致 db file parallel read 这个等待最严重事件的罪魁祸首,但没有显示执行计划 ;而第三句SELECt倒是显示了 对fnd_menu_entries_tl 表的 Index Unique Scan 占据了 db file parallel read 这个等待最严重事件的0.96%;

Top SQL using literals               DB/Inst: VIS/VIS  (Feb 12 11:01 to 11:11)

                  No data exists for this section of the report.
          ————————————————————-

////  上面这一节列出   占采样会话活动等待事件比例最高的  使用了常量的SQL语句,我们可以看看如果存在使用常量的SQL语句,那么可以考虑使用绑定变量来改进; 本例中没有发现使用常量的SQL语句。

Top Parsing Module/Action            DB/Inst: VIS/VIS  (Feb 12 11:01 to 11:11)

Module                         Action                           % Activ Event
—————————— ——————————– ——- ——–

e:ONT:frm:OEXOEORD             ONT/ORDER_MGMT_SUPER_USER          16.08 db file
                               ONT/ORDER_MGMT_SUPER_USER                db file
                               ONT/ORDER_MGMT_SUPER_USER                CPU + Wa
frmweb@syfdemo.ml.com (TNS V1-                                     1.29 db file
          ————————————————————-

////  上面这一节列出   占采样会话活动等待事件比例最高的,用在解析SQL语句上的模块。

 

Top PL/SQL Procedures                DB/Inst: VIS/VIS  (Feb 12 11:01 to 11:11)
-> ‘PL/SQL entry subprogram’ represents the application’s top-level
      entry-point(procedure, function, trigger, package initialization
      or RPC call) into PL/SQL.
-> ‘PL/SQL current subprogram’ is the pl/sql subprogram being executed
      at the point of sampling . If the value is ‘SQL’, it represents
      the percentage of time spent executing SQL for the particular
      plsql entry subprogram

PLSQL Entry Subprogram                                            % Activity
—————————————————————– ———-
PLSQL Current Subprogram                                           % Current
—————————————————————– ———-
APPS.OE_OE_FORM_LINE.VALIDATE_AND_WRITE                                18.01
   SQL                                                                 17.04
APPS.OE_OE_FORM_LINE.CHANGE_ATTRIBUTE                                  16.40
   SQL                                                                 15.43
APPS.OE_OE_FORM_HEADER.PROCESS_OBJECT                                   9.00
   SQL                                                                  8.04
APPS.OE_ATP.ATP_CHECK                                                   4.18
   SQL                                                                  3.86
APPS.OE_OE_FORM_LINE.DEFAULT_ATTRIBUTES                                 3.86
   SQL                                                                  3.86
          ————————————————————-

////  上面这一节列出   占采样会话活动等待事件比例最高的PLSQL程序。其中,PLSQL Entry Subprogram是PLSQL的入口程序,PLSQL Current Subprogram 是当前执行的子程序,如果PLSQL Current Subprogram =SQL; 那么%Current 表示的是为当前子程序执行SQL的百分比时间。

 

Top Java Workload                    DB/Inst: VIS/VIS  (Feb 12 11:01 to 11:11)

                  No data exists for this section of the report.
          ————————————————————-

////  上面这一节列出   占采样会话活动等待事件比例最高的JAVA 程序, 本例中没有出现;

^LTop Sessions                        DB/Inst: VIS/VIS  (Feb 12 11:01 to 11:11)
-> ‘# Samples Active’ shows the number of ASH samples in which the session
      was found waiting for that particular event. The percentage shown
      in this column is calculated with respect to wall clock time
      and not total database activity.
-> ‘XIDs’ shows the number of distinct transaction IDs sampled in ASH
      when the session was waiting for that particular event
-> For sessions running Parallel Queries, this section will NOT aggregate
      the PQ slave activity into the session issuing the PQ. Refer to
      the ‘Top Sessions running PQs’ section for such statistics.

   Sid, Serial# % Activity Event                             % Event
————— ———- —————————— ———-
User                 Program                          # Samples Active     XIDs
——————– —————————— —————— ——–
      362,34551      79.74 db file sequential read             57.88
APPS                 frmweb@syfdemo…m (TNS V1-V3)     180/605 [ 30%]        4

                           CPU + Wait for CPU                  14.79
                                                         46/605 [  8%]        1

                           db file parallel read                6.75
                                                         21/605 [  3%]        1

      286,  239       5.79 db file sequential read              4.18
APPS                 JDBC Thin Client                    13/605 [  2%]        0

                           CPU + Wait for CPU                   1.61
                                                          5/605 [  1%]        0

      390,    1       3.54 control file parallel write          3.22
SYS                  oracle@syfdemo.ml.com (CKPT)        10/605 [  2%]        0

      279, 4765       2.89 db file sequential read              2.25
APPS                 frmweb@syfdemo…m (TNS V1-V3)       7/605 [  1%]        0

      391,    1       2.25 log file parallel write              2.25
SYS                  oracle@syfdemo.ml.com (LGWR)         7/605 [  1%]        0

          ————————————————————-

////  上面这一节列出   占采样会话活动等待事件比例最高的会话;

Top Blocking Sessions                DB/Inst: VIS/VIS  (Feb 12 11:01 to 11:11)
-> Blocking session activity percentages are calculated with respect to
      waits on enqueues, latches and "buffer busy" only
-> ‘% Activity’ represents the load on the database caused by
      a particular blocking session
-> ‘# Samples Active’ shows the number of ASH samples in which the
      blocking session was found active.
-> ‘XIDs’ shows the number of distinct transaction IDs sampled in ASH
      when the blocking session was found active.

Blocking Sid (Inst) % Activity Event Caused                      % Event
——————– ———- —————————— ———-
User                 Program                          # Samples Active     XIDs
——————– —————————— —————— ——–
   391,    1(     1)       2.89 log file sync                        2.89
SYS                  oracle@syfdemo.ml.com (LGWR)         7/605 [  1%]        0

          ————————————————————-

////  上面这一节列出   占采样会话活动比例最高的  阻塞其他会话的会话; 本例中这个会话的Session id 是391,  XIDS =0 表示在采样期间,受影响的事务处理储量为0;

^LTop Sessions running PQs            DB/Inst: VIS/VIS  (Feb 12 11:01 to 11:11)

                  No data exists for this section of the report.
          ————————————————————-

////  上面这一节列出   占采样会话活动等待事件比例最高的 运行并行查询的会话; 本例中没有;

Top DB Objects                       DB/Inst: VIS/VIS  (Feb 12 11:01 to 11:11)
-> With respect to Application, Cluster, User I/O and buffer busy waits only.

      Object ID % Activity Event                             % Event
————— ———- —————————— ———-
Object Name (Type)                                    Tablespace
—————————————————– ————————-
          67932       7.07 db file parallel read                6.43
ONT.OE_ATTACHMENT_RULES (TABLE)                       APPS_TS_SEED

          34881       5.47 db file sequential read              5.47
APPLSYS.FND_PROFILE_OPTIONS (TABLE)                   APPS_TS_SEED

        1231012       4.82 db file sequential read              4.50
APPLSYS.FND_PROFILE_OPTION_VALUES_U1 (INDEX)          APPS_TS_TX_IDX

          68069       3.54 db file sequential read              3.54
ONT.OE_ORDER_LINES_ALL (TABLE)                        APPS_TS_TX_DATA

          34805       2.57 db file sequential read              2.57
APPLSYS.FND_NEW_MESSAGES_PK (INDEX)                   APPS_TS_SEED

          ————————————————————-

////  上面这一节列出   占采样会话活动事件比例最高的事件所涉及的数据库对象;

Top DB Files                         DB/Inst: VIS/VIS  (Feb 12 11:01 to 11:11)
-> With respect to Cluster and User I/O events only.

        File ID % Activity Event                             % Event
————— ———- —————————— ———-
File Name                                             Tablespace
—————————————————– ————————-
              7      18.97 db file sequential read             12.54
/d01/oracle/VIS/db/apps_st/data/reference3.dbf        APPS_TS_SEED

                           db file parallel read                6.43

             30      11.25 db file sequential read             11.25
/d01/oracle/VIS/db/apps_st/data/reference2.dbf        APPS_TS_SEED

             45       5.47 db file sequential read              5.47
/d01/oracle/VIS/db/apps_st/data/reference1.dbf        APPS_TS_SEED

            118       3.86 db file sequential read              3.86
/d01/oracle/VIS/db/apps_st/data/tx_data32.dbf         APPS_TS_TX_DATA

             70       2.89 db file sequential read              2.57
/d01/oracle/VIS/db/apps_st/data/tx_idx8.dbf           APPS_TS_TX_IDX

          ————————————————————-

////  上面这一节列出   占采样会话活动事件比例最高的事件所涉及的数据库文件;

Top Latches                          DB/Inst: VIS/VIS  (Feb 12 11:01 to 11:11)

                  No data exists for this section of the report.
          ————————————————————-

////  上面这一节列出   占采样会话活动事件比例最高的事件所涉及的数据库latch(闩锁);

Latch(闩锁)是简单的,低层次的序列化机制来保护共享数据结构在系统全局区(SGA)。例如,Latch保护用户当前访问的数据库和数据结构描述缓冲区高速缓存中的块的列表。一个服务器或后台进程获取一个锁存器,它在很短的时间,而操纵或在看这些结构中的一个。Latch的实现是依赖于操作系统,特别是关于一个进程是否以及如何长期等待Latch。

^LActivity Over Time                  DB/Inst: VIS/VIS  (Feb 12 11:01 to 11:11)
-> Analysis period is divided into smaller time slots
-> Top 3 events are reported in each of those slots
-> ‘Slot Count’ shows the number of ASH samples in that slot
-> ‘Event Count’ shows the number of ASH samples waiting for
   that event in that slot
-> ‘% Event’ is ‘Event Count’ over all ASH samples in the analysis period

                         Slot                                   Event
Slot Time (Duration)    Count Event                             Count % Event
——————– ——– —————————— ——– ——-
11:01:41   (19 secs)        6 db file sequential read               4    1.29
                              CPU + Wait for CPU                    2    0.64
11:02:00   (1.0 min)       36 db file sequential read              28    9.00
                              CPU + Wait for CPU                    6    1.93
                              db file parallel read                 1    0.32
11:03:00   (1.0 min)       46 db file sequential read              27    8.68
                              CPU + Wait for CPU                   13    4.18
                              control file parallel write           6    1.93
11:04:00   (1.0 min)       30 db file sequential read              21    6.75
                              CPU + Wait for CPU                    6    1.93
                              control file parallel write           1    0.32
11:05:00   (1.0 min)       40 db file sequential read              30    9.65
                              CPU + Wait for CPU                    9    2.89
                              db file scattered read                1    0.32
11:06:00   (1.0 min)       57 db file parallel read                20    6.43
                              db file sequential read              20    6.43
                              CPU + Wait for CPU                   10    3.22
11:07:00   (1.0 min)       33 db file sequential read              27    8.68
                              CPU + Wait for CPU                    5    1.61
                              control file parallel write           1    0.32
11:08:00   (1.0 min)       54 db file sequential read              43   13.83
                              CPU + Wait for CPU                   10    3.22
                              control file parallel write           1    0.32
11:09:00   (1.0 min)        6 log file sync                         5    1.61
                              log file parallel write               1    0.32
11:10:00   (1.0 min)        2 log file parallel write               1    0.32
                              log file sync                         1    0.32
11:11:00   (46 secs)        1 CPU + Wait for CPU                    1    0.32
          ————————————————————-

////  上面这一节把采样会话活动期间分成十份; 第1份和第十分通常是时间零头;中间八份的时间是均等的;

本例中,蓝色部分是第八份,这一份时间内进行54次采样,等待数据库文件的顺序读事件发生43次,占总采用时间期间事件总数的13.83%;

End of Report
[oracle@syfdemo ~]$

 

参考: http://www.cnblogs.com/sqlite3/archive/2011/05/26/2568146.html

          http://blog.itpub.net/35489/viewspace-609528

          Oracle 官方文档 <oracle 11g performance tunning guider>

Oracle 扩展统计信息-列组合直方图实验

在《Oracle 11g Performance tunning guider 》对于扩展统计信息-列组合的描述,大意为:

假设一张表已经收集了列的直方图,那么:

如果 查询条件是: Where  column1 =XXX; 那么oracle 可根据Column1上的直方图预估返回的行数;

如果 查询条件是: Where  column2 =XXX; 那么oracle 可根据Column2上的直方图预估返回的行数;

那么如果查询条件是个组合条件,比如Where Column1=XXX and Column2 = YYY; 那么Oracle 就无法知道如何预估返回的行数了;  所以呢,Oracle 就提供了扩展的统计信息-列组合统计信息;

看下面的实验:

单列条件 sold_to_org_id =5331 的预估返回行数66

image

单列条件 invoice_to_org_id=3662 的预估返回行数1159

image

目前并不存在组合列的统计信息:

image

看组合列查询条件 的预估返回行数,取的是两个单列查询条件中最小的一个:

image

 

为列组合统计信息:

–yufang.shang@hand-china.com
–统计列直方图信息
begin
  DBMS_STATS.GATHER_TABLE_STATS(‘ONT’,
        ‘OE_ORDER_HEADERS_ALL’,
        METHOD_OPT => ‘FOR ALL COLUMNS SIZE SKEWONLY FOR COLUMNS (SOLD_TO_ORG_ID,INVOICE_TO_ORG_ID) SIZE 250’);
end;

 

 

image

 

 

image

 

再次看组合查询的执行计划:

image

跟没有收集扩展的列组合统计信息前相比: Table Access By Index Rowid 的预估返回行数有变化,从9变成了2;

而实际上,这句SQL语句的返回行数是0; 只能说是预估更准了点;

image

 

此功能的实用价值有待遇与进一步探讨……

 

附录:本实验相关SQL:

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

select count(1)
  from oe_order_headers_all
where sold_to_org_id = 5331
 
select count(1)
  from oe_order_headers_all
where  INVOICE_TO_ORG_ID =3662

select count(1)
  from oe_order_headers_all
where sold_to_org_id = 5331
and  INVOICE_TO_ORG_ID =3662

–统计列直方图信息
begin
  DBMS_STATS.GATHER_TABLE_STATS(‘ONT’,
        ‘OE_ORDER_HEADERS_ALL’,
        METHOD_OPT => ‘FOR ALL COLUMNS SIZE SKEWONLY FOR COLUMNS (SOLD_TO_ORG_ID,INVOICE_TO_ORG_ID) SIZE 250’);
end;

–查看创建的列组合
SELECT EXTENSION_NAME, EXTENSION
  FROM DBA_STAT_EXTENSIONS
WHERE TABLE_NAME = ‘OE_ORDER_HEADERS_ALL’;
–删除列组合
begin
DBMS_STATS.DROP_EXTENDED_STATS(‘ONT’,’OE_ORDER_HEADERS_ALL’,
‘(SOLD_TO_ORG_ID,INVOICE_TO_ORG_ID)’);
end;

–查看列组合直方图信息
SELECT e.EXTENSION col_group, t.NUM_DISTINCT, t.HISTOGRAM
  FROM DBA_STAT_EXTENSIONS e, DBA_TAB_COL_STATISTICS t
WHERE e.EXTENSION_NAME = t.COLUMN_NAME
   AND e.TABLE_NAME = t.TABLE_NAME
   AND t.TABLE_NAME = ‘OE_ORDER_HEADERS_ALL’;
  

–查看列组合的直方图
select *
  from DBA_TAB_HISTOGRAMS
where table_name = ‘OE_ORDER_HEADERS_ALL’
   and column_name = ‘SYS_STUC772WO5L42XA96DEQCKUGBS’

IE访问EBS Form的兼容性视图问题

you Asked :

       Hi, 老商 , 我的IE原来访问EBS Form一直是正常的,但从IE10自动升级到IE11后,就无法正常打开EBS R12.1.3 的Form了,提示我未安装JRE,要安装java 1.6.0_07 ;但 我机器上的JRE 已经是1.6.0_25了,比它要求的还新,理论上应该是满足要求的。

       而且我把1.6.0_25卸载后,按它的要求重新安装1.6.0_07 后还是没有解决问题,请问我该怎么办呢?

We Said:

       请检查IE11的兼容性视图设置,把你当前的站点加到兼容性视图站点可解决此问题。

IE10 打印空白的问题

      最近碰到一个很奇怪的问题,使用IE10打印报销单的时候,打出来的内容是空白的,只有在页脚上显示一行临时文件的地址,类似于 fill:///C:/Users/XXXX/AppData/Local/Temp/Low/VTI150FZS.htm.

      在IE里面直接使用打印预览,发现也是空白内容。

      百度一下发现遇到这个问题的人也有,但比较少,给出的一些建议照着做了也没有效果。后来换FireFox打印可惜打印出来的内容也是缺内容的。没办法只能再回到IE想办法。

       既然打印要使用临时文件,就去看看临时文件是否生成,结果发现我的Temp目录下没有Low目录,想想可能是这个原因导致临时文件生成不了。于是就手动添加一个Low目录然后重启IE,结果问题解决。

 

      IE11 可能有同样的问题,同样的解决方法。

SQL中使用文字标量和绑定变量对解析时间的影响实验

说明:本实验主要验证SQL中使用文字标量导致硬解析(hard parse) 和使用绑定变量导致软解析(soft parse);

实验数据库:EBS 12.1.3 Demo数据库

数据库参数 cursor_sharing 默认等于 EXACT;

以下操作在PLSQL DEveloper SQL Window中操作

————————————————————————————————————————

–模拟EBS登录
begin
   fnd_global.APPS_INITIALIZE(user_id =>1318,resp_id =>21623 ,resp_appl_id => 660 )  ;
   mo_global.init(p_appl_short_name => ‘ONT’);
end ;

–打开Session级的TRace
alter session set sql_trace=true;
–设置TRace文件名的前缀,便于查找
alter session set tracefile_identifier=’SYF20130630′;

–执行一段匿名块程序
declare
  v_order_number        varchar2(100);
  v_order_number_result varchar2(100);
begin

  select ORDER_NUMBER    into v_order_number_result
    from oe_order_headers_v   where ORDER_NUMBER = ‘777849’;
  
  select ORDER_NUMBER    into v_order_number_result
    from oe_order_headers_v   where ORDER_NUMBER = ‘777848’;
  
  v_order_number := 777847;
  select ORDER_NUMBER    into v_order_number_result
    from oe_order_headers_v   where ORDER_NUMBER = v_order_number;
  
  v_order_number := 777846;
  select ORDER_NUMBER    into v_order_number_result
    from oe_order_headers_v   where ORDER_NUMBER = v_order_number;

end;
–结束Session级的TRace,生成Trace文件
alter session set sql_trace=false;

–Trace File 在$user_dump_dest路径下,这个路径的具体值可以在commond window下执行如下语句获得
show param user_dump_dest;

———————————————————————————————————–

获得trc文件后进行tkprof

然后查看tkprof后的文件可以看到如下效果:

********************************************************************************

SQL ID: 6hf9x8a7sxzua
Plan Hash: 796084466
SELECT ORDER_NUMBER
FROM
 OE_ORDER_HEADERS_V WHERE ORDER_NUMBER = ‘777849’
call     count       cpu    elapsed       disk      query    current        rows
——- ——  ——– ———- ———- ———- ———-  ———-
Parse        1      0.25       0.26          0          3          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        1      0.00       0.05          2         27          0           1
——- ——  ——– ———- ———- ———- ———-  ———-
total        3      0.26       0.31          2         30          0           1

********************************************************************************

SQL ID: 6z7x7xu7u8yk7
Plan Hash: 796084466
SELECT ORDER_NUMBER
FROM
 OE_ORDER_HEADERS_V WHERE ORDER_NUMBER = ‘777848’
call     count       cpu    elapsed       disk      query    current        rows
——- ——  ——– ———- ———- ———- ———-  ———-
Parse        1      0.22       0.23          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        1      0.00       0.00          0         27          0           1
——- ——  ——– ———- ———- ———- ———-  ———-
total        3      0.22       0.23          0         27          0           1

 

很显然,上述两句SQL是类似的,但由于SQL语句中使用的是文字标量,且数据库参数cursor_sharing=EXACT,导致了硬解析。

 

********************************************************************************

SQL ID: 9zt28w8ru22ny
Plan Hash: 796084466
SELECT ORDER_NUMBER
FROM
 OE_ORDER_HEADERS_V WHERE ORDER_NUMBER = :B1
call     count       cpu    elapsed       disk      query    current        rows
——- ——  ——– ———- ———- ———- ———-  ———-
Parse        2      0.00       0.00          0          0          0           0
Execute      2      0.24       0.24          0          0          0           0
Fetch        2      0.00       0.00          0         54          0           2
——- ——  ——– ———- ———- ———- ———-  ———-
total        6      0.24       0.24          0         54          0           2

 

很显然 在解析这两句话的时候,即是使用绑定变量的方式,其Parse 时间为0,说明只是进行了软解析。

v_order_number := 777847;
  select ORDER_NUMBER    into v_order_number_result
    from oe_order_headers_v   where ORDER_NUMBER = v_order_number;
  
  v_order_number := 777846;
  select ORDER_NUMBER    into v_order_number_result
    from oe_order_headers_v   where ORDER_NUMBER = v_order_number;

通过Function设置不同角色举例

 

需求:

针对同一个Form, 定义不同的Function,区分不同角色

 

方法举例:

1、针对同一个From : TRNORD4752 定义了2个Function ,分别是TRNORD4752 和TRNORD4752_CUST , 差别只是参数不一样;

image

 

2、在Form的开发时,须定义对应的parameter:

image

3、在程序中针对参数不同的值进行不同的权限控制:

image

oracle retail 13.2.5 安装顺序

1. Oracle Retail Merchandising System (RMS), Oracle Retail Trade Management (RTM),
Oracle Retail Sales Audit (ReSA), Optional: Oracle Retail Fiscal Management (ORFM)
Note: ORFM is an optional application for RMS if you are
implementing Brazil localization.
2. Oracle Retail Service Layer (RSL)
3. Oracle Retail Extract, Transform, Load (RETL)
4. Oracle Retail Active Retail Intelligence (ARI)
5. Oracle Retail Warehouse Management System (RWMS)
6. Oracle Retail Allocation
7. Oracle Retail Invoice Matching (ReIM)
8. Oracle Retail Price Management (RPM)
Note: During installation of RPM, you are asked for the
RIBforRPM provider URL. Since RIB is installed after RPM,
make a note of the URL you enter. If you need to change the
RIBforRPM provider URL after you install RIB, you can do
so by editing the remote_service_locator_info_ribserver.xml
file.
9. Oracle Retail Central Office (ORCO)                                  

10. Oracle Retail Returns Management (ORRM)
11. Oracle Retail Back Office (ORBO) or Back Office with Labels and Tags (ORLAT)
12. Oracle Retail Store Inventory Management (SIM)Note: During installation of SIM, you are asked for the RIB
provider URL. Since RIB is installed after SIM, make a note
of the URL you enter. If you need to change the RIB provider
URL after you install RIB, you can do so by editing the
remote_service_locator_info_ribserver.xml file.
13. Oracle Retail Predictive Application Server (RPAS)
14. Oracle Retail Demand Forecasting (RDF)
15. Oracle Retail Category Management
16. Oracle Retail Replenishment Optimization (RO)
17. Oracle Retail Analytic Parameter Calculator Replenishment Optimization (APC RO)
18. Oracle Retail Regular Price Optimization (RPO)
19. Oracle Retail Merchandise Financial Planning (MFP)
20. Oracle Retail Size Profile Optimization (SPO)
21. Oracle Retail Assortment Planning (AP)
22. Oracle Retail Item Planning (IP)
23. Oracle Retail Item Planning Configured for COE (IP COE)
24. Oracle Retail Advanced Inventory Planning (AIP)
25. Oracle Retail Integration Bus (RIB)
26. Oracle Retail Point-of-Service (ORPOS)
27. Oracle Retail Markdown Optimization (MDO)
28. Oracle Retail Clearance Optimization Engine (COE)
29. Oracle Retail Analytic Parameter Calculator for Markdown Optimization (APCMDO)
30. Oracle Retail Analytic Parameter Calculator for Regular Price Optimization (APCRPO)
31. Oracle Retail Promotion Intelligence and Promotion Planning and Optimization (PIPPO)
32. Oracle Retail Workspace (ORW)

 

今天开始安装 第九个 前8个已安装完毕

Oracle Retail 13.2.5 —- Allocation Install

11

allocation 的安装相对比较容易 稍后整理文档

只是 官方文档很多地方都是错的  NND  !!!

备注:WEBLOGIC 可以不用创建新的domain , 使用以前的就好了

进入后截图如下

——- 安装进度 : 基本半天 可以安装完一个模组,剩余模组 预计下周全部安装完毕,然后开始紧张测试

时间 2012年12月20号

445

applmgr 用户的LANG 环境变量设置为中文可能导致的问题

 

applmgr 用户的LANG 环境变量设置为中文可能导致的问题:

现象:env | grep LANG

显示:LANG=zh_CN.UTF-8

 

 

1、调用  FndXdfGen 生成数据库对象的xml描述文件时出错:

adjava oracle.apps.fnd.odf2.FndXdfGen xsl_directory=/d01/oracle/VIS/apps/apps_st/appl/fnd/12.0.0/patch/115/xdf/xsl  jdbc_protocol=thin  jdbc_conn_string=syfdemo.ml.com:1521:VIS  apps_schema=apps  apps_pwd=apps  object_type=TABLE  object_name=POA_BIS_SAVINGS  owner_name=PO  xdf_filename=/home/applmgr/.hdspcitk/out/20121206-135310.pid-32250

Unable to apply XSLT transformation on the xml file

Jackshang log This Message file

Exception occured : Invalid char in text.

 

程序跟踪错误是发生在这句话:

localDOMParser1.parse(paramInputStream);

这句话出错是因为Inputstream中有无效字符(下图SPARE6部分),此无效字符是因为applmgr环境的LANG=zh_CN.UTF-8 ,从而取到的日期格式是中文的,转到inputstream中的时候变成了无效字符;

 

clip_image002

 

解决方法:把applmgr的LANG默认设置成en_US.UTF-8就可以了。

vi .bash_profile

添加: export LANG=”en_US.UTF-8”

转贴:redhat linux AS 4下配置sendmail邮件服务器

redhat linux AS 4下配置sendmail邮件服务器
前期工作:

在DNS管理中加入:

MX:mail.lapkeung.com(优先级 10)

mail.lapkeung.com

一.sendmail服务器的安装:

1.首先查看sendmail是否安装完毕

[root@localhost mail]#rpm -q sendmail

sendmail-8.13.1-2

如果发现没有安装的话,在添加删除软件包里,把邮件这个选上,然后安装

2.安装redhat linuxAS 4 后,修改 /etc/mail/sendmail.mc.

divert(-1)dnl
dnl #
dnl # This is the sendmail macro config file for m4. If you make changes to
dnl # /etc/mail/sendmail.mc, you will need to regenerate the
dnl # /etc/mail/sendmail.cf file by confirming that the sendmail-cf package is
dnl # installed and then performing a
dnl #
dnl # make -C /etc/mail
dnl #
include(`/usr/share/sendmail-cf/m4/cf.m4′)dnl
VERSIONID(`setup for Red Hat Linux’)dnl
OSTYPE(`linux’)dnl
dnl #
dnl # Uncomment and edit the following line if your outgoing mail needs to
dnl # be sent out through an external mail server:
dnl #
dnl define(`SMART_HOST’,`smtp.your.provider’)
dnl #
define(`confDEF_USER_ID’,“8:12”)dnl
define(`confTRUSTED_USER’, `smmsp’)dnl
dnl define(`confAUTO_REBUILD’)dnl
define(`confTO_CONNECT’, `1m’)dnl
define(`confTRY_NULL_MX_LIST’,true)dnl
define(`confDONT_PROBE_INTERFACES’,true)dnl
define(`PROCMAIL_MAILER_PATH’,`/usr/bin/procmail’)dnl
define(`ALIAS_FILE’, `/etc/aliases’)dnl
dnl define(`STATUS_FILE’, `/etc/mail/statistics’)dnl
define(`UUCP_MAILER_MAX’, `2000000′)dnl
define(`confUSERDB_SPEC’, `/etc/mail/userdb.db’)dnl
define(`confPRIVACY_FLAGS’, `authwarnings,novrfy,noexpn,restrictqrun’)dnl
define(`confAUTH_OPTIONS’, `A’)dnl
dnl #
dnl # The following allows relaying if the user authenticates, and disallows
dnl # plaintext authentication (PLAIN/LOGIN) on non-TLS links
dnl #
dnl define(`confAUTH_OPTIONS’, `A p’)dnl
dnl #
dnl # PLAIN is the preferred plaintext authentication method and used by
dnl # Mozilla Mail and Evolution, though Outlook Express and other MUAs do
dnl # use LOGIN. Other mechanisms should be used if the connection is not
dnl # guaranteed secure.
dnl #
define(QUEUE_DIR, `/var/spool/mqueue/q*’)
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN’)dnl
define(`confAUTH_MECHANISMS’, `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN’)dnl
dnl #
dnl # Rudimentary information on creating certificates for sendmail TLS:
dnl # make -C /usr/share/ssl/certs usage
dnl #
dnl define(`confCACERT_PATH’,`/usr/share/ssl/certs’)
dnl define(`confCACERT’,`/usr/share/ssl/certs/ca-bundle.crt’)
dnl define(`confSERVER_CERT’,`/usr/share/ssl/certs/sendmail.pem’)
dnl define(`confSERVER_KEY’,`/usr/share/ssl/certs/sendmail.pem’)
dnl #
dnl # This allows sendmail to use a keyfile that is shared with OpenLDAP’s
dnl # slapd, which requires the file to be readble by group ldap
dnl #
dnl define(`confDONT_BLAME_SENDMAIL’,`groupreadablekeyfile’)dnl
dnl #
dnl define(`confTO_QUEUEWARN’, `4h’)dnl
dnl define(`confTO_QUEUERETURN’, `5d’)dnl
dnl define(`confQUEUE_LA’, `12′)dnl
dnl define(`confREFUSE_LA’, `18′)dnl
define(`confTO_IDENT’, `0′)dnl
dnl FEATURE(delay_checks)dnl
FEATURE(`no_default_msa’,`dnl’)dnl
FEATURE(`smrsh’,`/usr/sbin/smrsh’)dnl
FEATURE(`mailertable’,`hash -o /etc/mail/mailertable.db’)dnl
FEATURE(`virtusertable’,`hash -o /etc/mail/virtusertable.db’)dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(use_ct_file)dnl
dnl #
dnl # The -t option will retry delivery if e.g. the user runs over his quota.
dnl #
FEATURE(local_procmail,`’,`procmail -t -Y -a $h -d $u’)dnl
FEATURE(`access_db’,`hash -T; -o /etc/mail/access.db’)dnl
FEATURE(`blacklist_recipients’)dnl
EXPOSED_USER(`root’)dnl
dnl #
dnl # The following causes sendmail to only listen on the IPv4 loopback address
dnl # 127.0.0.1 and not on any other network devices. Remove the loopback
dnl # address restriction to accept email from the internet or intranet.
dnl #
dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA’)dnl
dnl #
dnl # The following causes sendmail to additionally listen to port 587 for
dnl # mail from MUAs that authenticate. Roaming users who can’t reach their
dnl # preferred sendmail daemon due to port 25 being blocked or redirected find
dnl # this useful.
dnl #
DAEMON_OPTIONS(`Port=25, Name=MSA’)dnl
dnl #
dnl # The following causes sendmail to additionally listen to port 465, but
dnl # starting immediately in TLS mode upon connecting. Port 25 or 587 followed
dnl # by STARTTLS is preferred, but roaming clients using Outlook Express can’t
dnl # do STARTTLS on ports other than 25. Mozilla Mail can ONLY use STARTTLS
dnl # and doesn’t support the deprecated smtps; Evolution <1.1.1 uses smtps
dnl # when SSL is enabled– STARTTLS support is available in version 1.1.1.
dnl #
dnl # For this to work your OpenSSL certificates must be configured.
dnl #
dnl DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s’)dnl
dnl #
dnl # The following causes sendmail to additionally listen on the IPv6 loopback
dnl # device. Remove the loopback address restriction listen to the network.
dnl #
dnl # NOTE: binding both IPv4 and IPv6 daemon to the same port requires
dnl # a kernel patch
dnl #
dnl DAEMON_OPTIONS(`port=smtp,Addr=::1, Name=MTA-v6, Family=inet6′)dnl
dnl #
dnl # We strongly recommend not accepting unresolvable domains if you want to
dnl # protect yourself from spam. However, the laptop and users on computers
dnl # that do not have 24×7 DNS do need this.
dnl #
FEATURE(`accept_unresolvable_domains’)dnl
dnl #
dnl FEATURE(`relay_based_on_MX’)dnl
dnl #
dnl # Also accept email sent to “localhost.localdomain” as local email.
dnl #
LOCAL_DOMAIN(`localhost.localdomain’)dnl
dnl #
dnl # The following example makes mail from this host and any additional
dnl # specified domains appear to be sent from mydomain.com
dnl #
dnl MASQUERADE_AS(`mydomain.com’)dnl
dnl #
dnl # masquerade not just the headers, but the envelope as well
dnl #
dnl FEATURE(masquerade_envelope)dnl
dnl #
dnl # masquerade not just @mydomainalias.com, but @*.mydomainalias.com as well
dnl #
dnl FEATURE(masquerade_entire_domain)dnl
dnl #
dnl MASQUERADE_DOMAIN(localhost)dnl
dnl MASQUERADE_DOMAIN(localhost.localdomain)dnl
dnl MASQUERADE_DOMAIN(mydomainalias.com)dnl
dnl MASQUERADE_DOMAIN(mydomain.lan)dnl
MAILER(smtp)dnl
MAILER(procmail)dnl

文件中,红色字体的行为需要修改的地方,共有五行需要修改。
第一行是手动添加的,与认证无关,作用是启动多个邮件队列,为了获得更好的传输性能。
第二行和第三行是去掉行首的注释。”TRUST_AUTH_MECH”的作用是使sendmail不管access文件中如何设置,都能 relay 那些通过EXTERNAL, LOGIN, PLAIN, CRAM-MD5或DIGEST-MD5等方式验证的邮件,”confAUTH_MECHANISMS” 的作用是确定系统的认证方式。Outlook Express支持的认证方式是LOGIN。
第四行是加上注释,以便让sendmail可以侦听所有网络设备,为整个网络提供服务,而不仅仅只对本机提供服务。
第五行是修改的,原来内容是:
dnl DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea’)dnl
去掉行首的注释符,并且将内容修改成Port=25:
DAEMON_OPTIONS(`Port=25, Name=MSA’)dnl
在smtp的默认端口(25)上进行认证,而不是587端口。这样就强制所有使用该邮件服务器进行邮件转发的用户在认证后才能发邮件了。

2.运行:
# m4 /etc/mail/sendmail.mc >/etc/mail/sendmail.cf
用m4重新生成sendmail.cf文件

修改local-host-names文件,加入mail.lapkeung.com

修改access文件,加入:

mail.lapkeung.com RELAY
lapkeung.com RELAY

生成库文件
# makemap hash /etc/mail/access.db < /etc/mail/access

3. 既然我们打开了多个队列,现在我们在/var/spool/mqueue/下创建任意多个队列目录,运行:
# cd /var/spool/mqueue
# mkdir q1 q2 q3 q4 q5 q6

4. 修改/etc/mail/local-host-names,将希望该邮件服务器使用的邮箱名加进去,比如邮箱为:xxx@abc.com.cn则将abc.com.cn加入到该文件中。
5. 重新启动sendmail服务,运行:
# killall –HUP sendmail

# service sendmail restart
6. 可以通过telnet 本机IP 25来验证sendmail服务是否已经正常启动,若登陆成功,则说明sendmail服务已经成功启动。
# telnet localhost 25
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’
220 localhost.localdomain ESMTP Sendmail 8.12.8/8.12.8; Wed, 12 May 2004 15:57:01 +0800
ehlo localhost
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-AUTH GSSAPI LOGIN PLAIN
250-DELIVERBY
250-HELP
quit
#
在AUTH后面有LOGIN就基本上可以在OutlookExpress上认证了。

二. Pop3服务配置:(pop3是在AS4上的新改动! ^!^)

为了安装POP3服务器,您需要安装dovecot包。以下面的RPM查询命令查看dovecot是否已安装在系统中:
#rpm -q dovecot
没安装的话,这个RPM包在第4张光盘上.

1. # service dovecot start

启动 Dovecot Imap: [ 确定 ]

2. 修改/etc/dovecot.conf文件:

#protocols = imap imap3
更改为:
protocols = imap imap3 pop3 pop3s

缺省的ports:
imap: 143
imaps: 993
pop3: 110
pop3s: 995
保存后退出,

然后重启 dovecot

#sbin/service dovecot restart

测试

[root@localhost mail]#telnet 127.0.0.1 110

trying 127.0.0.1….

connected to localhost.localdomain(127.0.0.1)

Escape character is `^`]`

+ok dovecot ready

出现上面的提示就表明pop3正常在运行了

接下来新建邮件帐号,由于linux系统帐号就是邮件帐号,所以只要建立系统帐号和密码,就可以在outlook等客户端收发邮件了.

无法调用 fnd_ldap_wrapper.update_user错误分析

 

版本: EBS R12.1.3   Vision

现象:

在更新EBS 用户时,报错:fnd_ldap_wrapper.update_user

image

分析:估计是系统启用了EBS跟LDAP集成的配置,导致更新用户时去更新LDAP目录了,但是什么配置文件呢?

打开这个package

image

查找fnd_profile , 找到两个profile :

profile:APPS_SSO_LDAP_SYNC

profile:APPS_SSO

查找这两个profile的定义:

image

进一步检查 “Oracle Applications SSO LDAP 同步”的Site层配置:

image

发现是“启用” ;

把 配置文件“Oracle Applications SSO LDAP 同步” 改成

image

发现改了以后,更改用户信息依然报错,错误现象跟原来一样,  没用;

 

 

查 数据库 log 

/d01/oracle/VIS/db/tech_st/11.1.0/admin/VIS_syfdemo/diag/rdbms/vis/VIS/trace/alert_VIS.log

发现有这么一条:

ORA-1653: unable to extend table APPLSYS.FND_FORM_FUNCTIONS_TL by 16 in                 tablespace APPS_TS_SEED

考虑到创建用户也属于基础数据,于是把 APPS_TS_SEED 表空间下面的一个datafile 从600M 扩大到800M

alter database datafile ‘/d01/oracle/VIS/db/apps_st/data/reference1.dbf’ resize 800M

再次尝试修改用户信息,错误依旧;

 

 

打开日志调试,原来的日志设置:

image

调整后:

可以看日志: 发现APPSADMIN不能更新是因为这个用户是LINKED; 而SYSADMIN可以更新是因为not linked

 

image

 

image

那么 什么觉得这个用户是否为linked呢?

把 /d01/oracle/VIS/apps/apps_st/comn/java/classes/oracle/apps/fnd/sso/SSOManager.class 下载下来,反编译,发现如下代码:

try
     {
       localOracleCallableStatement = (OracleCallableStatement)localOracleConnection.prepareCall("declare   retbol boolean;   retstr varchar2(1);begin   retbol:=fnd_sso_manager.isPasswordChangeable(:1);  if (retbol=true)  then retstr:=’Y’;  else retstr:=’N’;  end if;  :2:=retstr;end;");
       localOracleCallableStatement.setString(1, paramString.toUpperCase());
       localOracleCallableStatement.registerOutParameter(2, 12, 0, 1);

看来是调用了package: fnd_sso_manager

继续查fnd_sso_manager.isPasswordChangeable 的代码发现是判断fnd_user表中 user_guid字段是否为空来判断的,如果为空就是not linked ,否则就是linked;

如果是linked那么更新的时候就会产生刚才那个错误,否则就没有这个错误;

 

 

 

 

问题2:

现象:创建用户时报错:

 

image

无法调用 fnd_ldap_wrapper.create_user,原因如下:

ora-06508:  pl/sql:  无法找到正在调用  的程序单元.(USER_NAME=YUNFANG)

 

分析: 在fnd_user_pkg.ldap_wrapper_create_user() 中我们看到:

— Bug: 5375111
  — Calling ldap_wrapper_wrapper with the new expire_pwd flag.
  fnd_ldap_wrapper.create_user(x_user_name, l_pwd, x_start_date, x_end_date,
     x_description, x_email_address, x_fax, x_expire_pwd, x_user_guid,
     x_oid_pwd, l_result);

  if (l_result <> fnd_ldap_wrapper.G_SUCCESS) then
    reason := fnd_message.get;
    fnd_message.set_name(‘FND’, ‘LDAP_WRAPPER_CREATE_USER_FAIL’);
    fnd_message.set_token(‘USER_NAME’, x_user_name);
    fnd_message.set_token(‘REASON’, reason);
    app_exception.raise_exception;
  end if;

exception
  when others then
    fnd_message.set_name(‘FND’, ‘LDAP_WRAPPER_CREATE_USER_FAIL’);
    fnd_message.set_token(‘USER_NAME’, x_user_name);
    fnd_message.set_token(‘REASON’, sqlerrm);
    app_exception.raise_exception;
end;

查询 消息定义:

image

 

说明问题正是发生在这里,但重新编译 fnd_user_pkg 是正常的,为了确认是错误是发生在这里的;在这个函数里面加了一段 debug代码 :

if (fnd_log.LEVEL_STATEMENT >= fnd_log.g_current_runtime_level) then
fnd_log.string(FND_LOG.LEVEL_STATEMENT,
                   ‘syfdemo1:fnd_user_pkg’,
                   ‘ldap_wrapper_create_user’);
end if;

重新编译fnd_user_pkg 后,再次创建用户,居然成功了。 真是神奇! 这是什么原因呢?

记得以前也曾经出现过莫名其妙的问题,重现编译没用,在代码里面加段Debug代码再编译就成了;这到底有什么玄机在里面呢? 有空继续研究。。。。

如何自定义adf Table的filter

概述

Adf table自带的filter的有时候并不能满足我们过滤的要求,例如lov或者是下拉列表选择性的就没有。本文主要对如何自定义下拉列表filter。

实现

1. 选择字段,并插入filter facet

S5GBH(O_{9UIBNH]H%WG3VL

2.编辑filter facet内容

下拉字段:

插入一个下拉框,编辑下拉框item,放置一个空的item供以选择

下拉框中放置一个forEach,显示所有的下拉列表

value设置为所在="#{vs.filterCriteria.所过滤字段}

value="#{vs.filterCriteria.Meaning}"

   1: <f:facet name="filter">

   2:   <af:selectOneChoice id="soc1" value="#{vs.filterCriteria.Meaning}"

   3:                       inlineStyle="width:70px;">

   4:     <f:selectItem id="si12"/>

   5:     <af:forEach var="listrow"

   6:                 items="#{bindings.UsersStatusLovVO1.rangeSet}">

   7:       <f:selectItem id="si11" itemValue="#{listrow.Meaning}"

   8:                     itemLabel="#{listrow.Meaning}"/>

   9:     </af:forEach>

  10:   </af:selectOneChoice>

  11: </f:facet>

时间字段:

放置一个inputDate

   1: <f:facet name="filter">

   2:   <af:inputDate id="id1"

   3:                 value="#{vs.filterCriteria.TokenEnableDate}"/>

   4: </f:facet>

效果

image    image

ZT: WEBUTIL Config in oas10.1.2.0.2

WEBUTIL installation in Oracle Application Server10.1.2.0.2

1.download http://www.oracle.com/technology/software/products/forms/files/webutil/webutil_106.zip

2.upzip webutil_106.zip
3.copy java\frmwebutil.jar to the directory [OraHome]\forms\java
4.copy all files in directory server\ to the directory [OraHome]\forms\server;
5.copy directory webutil to the directory [OraHome]\forms\;

6.unzip jacob_18.zip
http://prdownloads.sourceforge.net/jacob-project/jacob_18.zip
7.copy jacob.jar to the directory %ORACLE_HOME\forms\java;
8.copy jacob.dll to the directory %ORACLE_HOME\forms\webutil;
9.set environment variablePath :[OraHome]\jdk\bin

10.open command window,sign frmwebutil.jar and jacob.jar
cd [OraHome]\forms\webutil\
[OraHome]\forms\webutil\sign_webutil [OraHome]\forms\java\frmwebutil.jar
[OraHome]\forms\webutil\sign_webutil [OraHome]\forms\java\jacob.jar
note:Do not care if key is duplicated when signing
11.create webutil_db package;

login db as sysdba

CREATE USER webutil IDENTIFIED BY webutil
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;

GRANT CONNECT, resource, CREATE PUBLIC SYNONYM TO webutil;

grant execute on dbms_lob to webutil;

grant execute on utl_encode to webutil;

grant execute on utl_raw to webutil;

CONNECT webutil/webutil@orcl

@[OraHome]\forms\create_webutil_db.sql

CREATE PUBLIC SYNONYM webutil_db FOR webutil.webutil_db;
grant execute on webutil_db to public;

12.modify [OraHome]\forms\server\default.env
CLASSPATH=[OraHome]\forms\java\frmwebutil.jar;[OraHome]\jdk\jre\lib\jacob.jar;[OraHome]\jdk\jre\lib\rt.jar ;

13.modify [OraHome]\forms\server\formsweb.cfg

[webutil]

WebUtilArchive=frmwebutil.jar,jacob.jar,frmall.jar

14.modify [OraHome]\forms\server\webuitl.cfg

transfer.database.enabled=TRUE

transfer.appsrv.enabled=TRUE

15.modify webutil.pll

replace webutil.pll by webutil.pll in the directory Oracle Developer Suit-home/forms/webutil.pll

and rename webutil.pll to webutil_lib.pll

WEBUTIL installation in Oracle Developer Suit10.1.2.0.2

In Forms DS 10.1.2.0.2, almost all the required configurations are done by the Oracle Universal Installer itself, except for the part related to jacob.

1) Download http://prdownloads.sourceforge.net/jacob-project/jacob_18.zip
and extract to a temporary staging area. Do not attempt to use 1.7 or 1.9.

2) Copy or move jacob.jar and jacob.dll
C:\webutile is the folder where you extracted Jacob, and will end in …\jacob_18
cd C:\webutile
copy jacob.jar Oracle_Home\forms\java\.
copy jacob.dll Oracle_Home\forms\webutil\.
The Jacob staging area is no longer needed, and may be deleted.

3) Sign frmwebutil.jar and jacob.jar
Open a DOS command prompt.
Add Oracle_Home\jdk\bin to the PATH:
set PATH=C:\oracle\developer\jdk\bin;%PATH%
Sign the files, and check the output for success:
C:\oracle\developer\forms\webutil\sign_webutil C:\oracle\developer\forms\java\frmwebutil.jar
C:\oracle\developer\forms\webutil\sign_webutil C:\oracle\developer\forms\java\jacob.jar

4) If you already have a schema in your RDBMS which contains the WebUtil stored code,
you may skip this step. Otherwise,
Create a schema to hold the WebUtil stored code, and privileges needed to
connect and create a stored package. Schema name “WEBUTIL” is recommended
for no reason other than consistency over the user base.

Login as sysdba
CREATE USER webutil IDENTIFIED BY webutil
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;

GRANT CONNECT, resource, CREATE PUBLIC SYNONYM TO webutil;

grant execute on dbms_lob to webutil;

grant execute on utl_encode to webutil;

grant execute on utl_raw to webutil;

CONNECT webutil/webutil@orcl

@[OraHome]\forms\create_webutil_db.sql

CREATE PUBLIC SYNONYM webutil_db FOR webutil.webutil_db;
grant execute on webutil_db to public;

5) Modify Oracle_Home\forms\server\default.env, and append C:\oracle\developer\jdk\jre\lib\rt.jar
to the CLASSPATH entry.

6) Modify Oracle_Home\forms\server\formsweb.cfg insde [default] add :
archive_jini=frmall_jinit.jar,frmwebutil.jar,jacob.jar

also add :
[webutil]

WebUtilArchive=frmwebutil.jar,jacob.jar,frmall.jar
archive=frmwebutil.jar,frmall.jar
lookAndFeel=oracle

7) Modify Oracle_Home\forms\server\webutil.cfg and add :
transfer.database.enabled=TRUE
transfer.appsrv.enabled=TRUE

8)rename webutil.pll to webutil_lib.pll

8) Start the OC4J instance

9) Start Forms Builder and connect to a schema in the RDBMS used in step (4).
Open webutil.pll, do a “Compile ALL” (shift-Control-K), and generate to PLX (Control-T).
It is important to generate the PLX, to avoid the FRM-40039 discussed in
Note 303682.1
If the PLX is not generated, the Webutil.pll library would have to be attached with
full path information to all forms wishing to use WebUtil. This is NOT recommended.

10) Create a new FMB.
Open webutil.olb, and Subclass (not Copy) the Webutil object to the form.
There is no need to Subclass the WebutilConfig object.
Attach the Webutil.pll Library, and remove the path.
Add an ON-LOGON trigger with the code
NULL;
to avoid having to connect to an RDBMS (optional).
Create a new button on a new canvas, with the code
show_webutil_information (TRUE);
in a WHEN-BUTTON-PRESSED trigger.
Compile the FMB to FMX, after doing a Compile-All (Shift-Control-K).

11) Under Edit->Preferences->Runtime in Forms Builder, click on “Reset to Default” if
the “Application Server URL” is empty.
Then append “?config=webutil” at the end, so you end up with a URL of the form
http://server:port/forms/frmservlet?config=webutil

aritcle source : http://lyh7609.iteye.com/blog/423373

weblogic导入导出工具进行导入导出MDS

在OIM的过程中,不免会经常碰到需要从服务器上导出MDS配置文件或者是往服务器上导入我们配置后的MDS文件,所以weblogic的导入导出工具的使用还是比较频繁的,本文主要介绍weblogic工具。

如何从weblogic中导出MDS文件:

1.首先我们新建一个文件夹用以保存所需导出的MDS文件:

在/u01/app/Oracle/Middleware/文件夹下创建tmp2/metadata/db/目录:

用以存储MDS文件的目录为:/u01/app/Oracle/Middleware/tmp2/metadata/db

2.配置weblogic.properties文件

进入到/u01/app/Oracle/Middleware/Oracle_IDM2/server/bin,对weblogic.properties文件进行编辑:

配置属性如下:

属性 说明
wls_servername oim_server1 OIM应用所运行的服务器上,一般情况下为oim_server1
application_name OIMMetadata 一般有两种选择:
oim:当导入或者是导出out of box的事件处理的时候;
OIMMetadata:其他的out of box元数据都是,以及导入或者是导出自定义数据的时候。
metadata_from_loc /u01/app/Oracle
/Middleware/tmp2/metadata
当我们需要导入的时候才会用到这个属性,我们需要将/u01/app/Oracle/Middleware/tmp2/metadata/db/
LDAPContainerRules.xml文件导入到/db/LDAPContainerRules.xml的时候,我们需要将这个属性的值设置为/u01/app/Oracle/Middleware/tmp2/metadata
metadata_to_loc /u01/app/Oracle
/Middleware/tmp2/metadata
当我们需要导出MDS文件的时候,才会用到这个属性,这个属性配合metadata_files属性一起使用,假设我们需要将/db/LDAPContainerRules.xml文件导出到/u01/app/Oracle/Middleware/tmp2/metadata目录下,我们就需要将这个属性设置为:/u01/app/Oracle/Middleware/tmp2/metadata,以及metadata_files属性设置为:/db/LDAPContainerRules.xml
metadata_files /db/LDAPContainerRules.xml 所需要导出文件的文件名以及其在weblogic上保存的名称。假设我们需要将db/LDAPContainerRules.xml导出,就需要将该属性设置为db/LDAPContainerRules.xml

导入测试:

我们需要将/db/LDAPContainerRules.xml文件从weblogic导出到/u01/app/Oracle/Middleware/tmp2/metadata,那首先我们将weblogic.properties文件设置为如下:

wls_servername=oim_server1

application_name=OIMMetadata

metadata_from_loc=

metadata_to_loc=/u01/app/Oracle/Middleware/tmp2/metadata

metadata_files=/db/LDAPContainerRules.xml

其次使用导出工具:

1.进入到/u01/app/Oracle/Middleware/Oracle_IDM2/server/bin文件夹中:cd /u01/app/Oracle/Middleware/Oracle_IDM2/server/bin

2.设置环境变量

export OIM_ORACLE_HOME=/u01/app/Oracle/Middleware/Oracle_IDM2

3.运行导出脚本

./weblogicExportMetadata.sh

4.输入用户名,密码,服务器(由于我是在本机上的,所以用localhost)

weblogic

weblogic1

t3://localhost:7001

5.运行结果

image

最后进入到我们的/u01/app/Oracle/Middleware/tmp2/metadata/db文件夹中可以查看到LDAPContainerRules.xml这个文件。

 

导出测试:

我们需要对刚才导出的/db/LDAPContainerRules.xml文件进行更改,然后进行导入。

1.我们首先需要对该文件进行编辑

2.然后将/u01/app/Oracle/Middleware/Oracle_IDM2/server/bin下的weblogic.properties文件配置如下:

wls_servername=oim_server1

application_name=OIMMetadata

metadata_from_loc=/u01/app/Oracle/Middleware/tmp2/metadata

metadata_to_loc=

metadata_files=

3.设置环境变量

export OIM_ORACLE_HOME=/u01/app/Oracle/Middleware/Oracle_IDM2

4.运行导出脚本

./weblogicImportMetadata.sh

5.输入用户名,密码,服务器(由于我是在本机上的,所以用localhost)

weblogic

weblogic1

t3://localhost:7001

6.运行结果

image

最后再根据导出的步骤将我们导入的文件进行导出,进行查看,就可以发现该文件已经被更改。

使用wlst工具进行导入导出(这个好用):

导出OIM中的所有MDS Data

./wlst.sh

connect()

weblogic

weblogic1

t3://localhost:7001

exportMetadata(application=’OIMMetadata’, server=’oim_server1′, toLocation=’/u01/app/Oracle/Middleware/tmp2/metadata’)

:)

PS:最后盗个我崇拜的老大的表情

:)

接收事务处理接口错误处理日志1例

/*******************************************************************************
date : 2007-05-08
处理者: yunfang.shang
*******************************************************************************/

select * from rcv_transactions_interface
–查接收接口中来自销售订单退货的记录(error_message是错误信息提示)
SELECT rti.processing_request_id,
       rti.creation_date,
       rti.transaction_date,
       rti.group_id,
       oeh.order_number,
       rti.item_id,
       item_description,
       rti.unit_of_measure,
       rti.quantity,
       rti.source_document_code,
       rti.subinventory,
       oel.flow_status_code,
       pie.error_message
  FROM rcv_transactions_interface rti,
       oe_order_headers_all       oeh,
       oe_order_lines_all         oel,
       PO_INTERFACE_ERRORS        pie
 WHERE rti.oe_order_header_id = oeh.header_id
   AND rti.oe_order_line_id = oel.line_id
   AND rti.oe_order_header_id = oel.header_id
   AND rti.interface_transaction_id = pie.interface_line_id(+)
 ORDER BY oeh.order_number
—       
/*
364244 2007-5-7 16:57:22 2007-4-12 16:57:14 1310 1000000933 1898 振华P999手机(银) 部 1 RMA 111216601 CLOSED “RVTII-&ERR_NUMBER:子例行程序 rvtiicreate() 返回的错误原因:子例行程序 rvtiicreate() 返回时出现内部错误。措施:请记录此错误编号以及您尝试进行的活动。 请与系统管理员联系以寻”
364881 2007-5-7 20:54:16 2007-4-12 20:54:01 1312 1000000933 1898 振华P999手机(银) 部 1 RMA 111216601 CLOSED “RVTII-&ERR_NUMBER:子例行程序 rvtiicreate() 返回的错误原因:子例行程序 rvtiicreate() 返回时出现内部错误。措施:请记录此错误编号以及您尝试进行的活动。 请与系统管理员联系以寻”
366128 2007-5-8 9:13:45 2007-5-8 9:13:45 1521 1000000998 3489 天时达TS933手机(黑) 部 1 RMA 111217801 CLOSED RCV_TP_ACCT_PERIOD_CLOSED
366133 2007-5-8 9:14:13 2007-5-8 9:14:13 1524 1000000998 111 诺基亚N2610手机(黑) 部 1 RMA 111217801 CLOSED RCV_TP_ACCT_PERIOD_CLOSED
366131 2007-5-8 9:14:06 2007-5-8 9:14:06 1523 1000000998 111 诺基亚N2610手机(黑) 部 1 RMA 111217801 CLOSED RCV_TP_ACCT_PERIOD_CLOSED
366129 2007-5-8 9:13:53 2007-5-8 9:13:53 1522 1000000998 3489 天时达TS933手机(黑) 部 1 RMA 111217801 CLOSED RCV_TP_ACCT_PERIOD_CLOSED
366613 2007-5-8 4:37:32 2007-5-8 4:37:32 1519 1000001000 101 诺基亚N1112 手机(浅蓝) 部 1 RMA 111217801 AWAITING_RETURN RCV_TP_ACCT_PERIOD_CLOSED
366613 2007-5-8 4:37:32 2007-5-8 4:37:32 1519 1000001000 101 诺基亚N1112 手机(浅蓝) 部 1 RMA 111217801 AWAITING_RETURN RCV_TP_ACCT_PERIOD_CLOSED
366613 2007-5-8 4:37:32 2007-5-8 4:37:32 1519 1000001000 101 诺基亚N1112 手机(浅蓝) 部 1 RMA 111217801 AWAITING_RETURN RCV_TP_ACCT_PERIOD_CLOSED
366613 2007-5-8 4:37:32 2007-5-8 4:37:32 1519 1000001000 101 诺基亚N1112 手机(浅蓝) 部 1 RMA 111217801 AWAITING_RETURN RCV_TP_ACCT_PERIOD_CLOSED
366613 2007-5-8 4:37:32 2007-5-8 4:37:32 1519 1000001000 101 诺基亚N1112 手机(浅蓝) 部 1 RMA 111217801 AWAITING_RETURN RCV_TP_ACCT_PERIOD_CLOSED
*/

–错误信息的具体内容可以查:
select * from fnd_new_messages where message_name = ‘RCV_TP_ACCT_PERIOD_CLOSED’

/*您的事务处理日期必须在打开的会计期内

原因:您提交的接收事务处理的日期不在打开的会计期内。

措施:重新输入事务处理,使事务处理日期在打开的会计期内,或者打开事务处理日期所在的会计期。*/

–上述接口数据  有5条在 Awaiting_return,其他已经Close
–已经Close 的数据是因为,李进做了手工接收。
–前两条自动处理失败是因为 当时1000000933 订单的销售员没有定义收入帐户导致Cogs出错。进而导致接收失败。
–李进手工接收时,把订单对应的销售员的收入帐户添加好才处理过去。
–后几条自动处理失败是因为 当时1000000998 订单的事务处理日期在5月份,而5月份的库存会计期还没开。
–李进手工接收时,把事务日期改成4月份才处理过去。

–RMA订单行已经关闭说明接收已经被手工处理。这种接口数据需要删除
–create table rcv_trx_interface_bak as select * from rcv_transactions_interface where 1=2;
–create unique index rcv_trx_interface_u1 on rcv_trx_interface_bak(INTERFACE_TRANSACTION_ID);
–备份
INSERT INTO rcv_trx_interface_bak
  (SELECT *
     FROM rcv_transactions_interface
    WHERE INTERFACE_TRANSACTION_ID IN
          (SELECT INTERFACE_TRANSACTION_ID
             FROM rcv_transactions_interface rti, oe_order_lines_all oel
            WHERE rti.oe_order_line_id = oel.line_id
              AND rti.oe_order_header_id = oel.header_id
              AND oel.flow_status_code = ‘CLOSED’
              AND rti.transaction_status_code = ‘ERROR’
              AND rti.source_document_code = ‘RMA’));
–6行被插入
–删除
DELETE FROM rcv_transactions_interface
 WHERE INTERFACE_TRANSACTION_ID IN
       (SELECT INTERFACE_TRANSACTION_ID
          FROM rcv_transactions_interface rti, oe_order_lines_all oel       
         WHERE rti.oe_order_line_id = oel.line_id
           AND rti.oe_order_header_id = oel.header_id
           AND oel.flow_status_code = ‘CLOSED’
           AND rti.transaction_status_code = ‘ERROR’
           and rti.source_document_code = ‘RMA’);
–6行被删除

/*
在用户层打开如下系统配置文件:
a. RCV: Debug Mode=Yes
b. PO:Enable Sql Trace for Receiving Processor=Yes
c. FND: Debug Log Enabled=Yes
d. FND: Debug Log Level=Statement
e. FND: Debug Log Module=%
*/

 

 — 查看PO接收接口处理器的错误方法 :参见Metalink Note : Note:299497.1   [ (老版本 Note:50903.1)]
 — 更改因为事务处理日期不在打开的会计期内的错误,可以更改事务处理日期
 — 然后提交接口处理程序。如下面的Sql
 declare
        l_request_id number ;
        X_Group_Id  number := 182;         — 输入接口表中出错记录的 group_id
        X_Transaction_date date :=  to_date(‘2007-4-29′,’YYYY-MM-DD’)   ;– 输入一个打开会计期内的日期:比如 to_date(‘2007-4-29′,’YYYY-MM-DD’);
 begin
 
 –注意,这里的user_id,resp_id,resp_appl_id 在不同的环境可能不同。
 fnd_global.APPS_INITIALIZE(user_id => 1111,
                            resp_id => 50260,
                            resp_appl_id => 660);
                           
 UPDATE rcv_transactions_interface
   SET processing_status_code  = ‘PENDING’,
       transaction_status_code = ‘PENDING’,
       processing_request_id = NULL,
       transaction_date = X_Transaction_date,
       expected_receipt_date = X_Transaction_date      
 WHERE group_id = X_Group_Id;                          
                           
                           
  l_request_id := fnd_request.submit_request(‘PO’,
                                               ‘RVCTP’,
                                               ”,
                                               to_char(sysdate+0.0003,
                                                       ‘YYYY/MM/DD HH24:MI:SS’),
                                               false,
                                               ‘IMMEDIATE’,
                                               X_Group_Id,
                                               chr(0)); 
  dbms_output.put_line(to_char(l_request_id));
 end ;
 
 –得到的request_id
 –查request的运行结果
 SELECT request_id,
        last_update_date,
        requested_start_date,
        phase_code,
        status_code,
        argument_text
   FROM fnd_concurrent_requests
  WHERE request_id = &p_request_id
 
 –如果有错误,查错误日志
SELECT to_char(TIMESTAMP, ‘DD-MON-YY HH24:MI:SS’),
       SUBSTR(message_text, 1, 300),
       SUBSTR(module, 1, 30),
       log_sequence
  FROM fnd_log_messages
 WHERE trunc(TIMESTAMP) = trunc(SYSDATE)
   AND process_id = (SELECT os_process_id
                       FROM fnd_concurrent_requests
                      WHERE request_id = &p_request_id)
   AND module NOT LIKE ‘fnd%’
 ORDER BY log_sequence;
 
 —
/* 146 08-5月 -07 21:40:24 ”          ORA-01405: 读取的列值为 NULL
” po.src.rvtp.rvtii.RVTIICREATE. 94948
147 08-5月 -07 21:40:24 ”          RVTII:076 OE COGS API returned Error 销货成本帐户生成失败,并出现以下错误:ORA-20002: 3135: ‘在同步进程中,不允许出现 ‘Wf_Item_Activity_Status.Set_Error(error_process)’。 ‘

” po.src.rvtp.rvtii.RVTIICREATE. 94950
148 08-5月 -07 21:40:24 ”          ORA-01405: 读取的列值为 NULL
” po.src.rvtp.rvtii.RVTIICREATE. 94952*/

–可见是COGS 帐户生成失败
–可能是某个COGS要取的某个帐户没有设置
— 20070508 21:54 接口中一些错误的接收,被李进手工接收了,订单行已经关闭
— 备份
INSERT INTO rcv_trx_interface_bak
  (SELECT *
     FROM rcv_transactions_interface
    WHERE INTERFACE_TRANSACTION_ID IN
          (SELECT INTERFACE_TRANSACTION_ID
             FROM rcv_transactions_interface rti, oe_order_lines_all oel
            WHERE rti.oe_order_line_id = oel.line_id
              AND rti.oe_order_header_id = oel.header_id
              AND oel.flow_status_code = ‘CLOSED’
              AND rti.transaction_status_code = ‘ERROR’
              AND rti.source_document_code = ‘RMA’));
–7行被插入
–删除
DELETE FROM rcv_transactions_interface
 WHERE INTERFACE_TRANSACTION_ID IN
       (SELECT INTERFACE_TRANSACTION_ID
          FROM rcv_transactions_interface rti, oe_order_lines_all oel       
         WHERE rti.oe_order_line_id = oel.line_id
           AND rti.oe_order_header_id = oel.header_id
           AND oel.flow_status_code = ‘CLOSED’
           AND rti.transaction_status_code = ‘ERROR’
           and rti.source_document_code = ‘RMA’);
–7行被删除

遭遇美尼尔

       3周前的1天,早上起床感觉头晕,去大华医院检查,医生检查了小血,心电图,除窦性心动过缓(58/次)外,其他正常,但医生说其实窦性心动58/次也还不算太差。当时开了通天口服液4盒; 个人认为是缺乏体育锻炼而导致,于是又开始早晨跑步,希望能消灭头晕症状。3天以后到外地出差1周,出差期间早上也坚持跑步,但有时感觉头不是很清醒,有疲劳感。

        出差回上海后第1天晚上睡觉时,在从仰卧转为左侧卧或者右侧卧的时候,感觉天旋地转,但一般20秒以后消失。早上起来还晕,有天旋地转的感觉,但1分钟以后即恢复正常。第2天晚上症状依旧,睡觉不踏实,早上起来竟然无论如何也无法站立,一站起来就天旋地转,恶心,心跳加速,呼吸加速,很难受;只能躺下,几分钟后再次尝试站起来均告失败。 家人着急,既无法起床,那么只能叫120来把我扶上车,去8院挂急诊;

       在8院挂了2袋生理盐水,1袋党参;同时做大血检查、心电图检查、脑CT检查;情况均属正常;想让医生继续做颈椎检查,急症医生说中青年因为颈椎原因导致眩晕的可能性极小,急症室不做这种检查。 3瓶水挂完已是下午,LP给我吃了点皮蛋瘦肉粥,尝试站起来依然很晕,问能否吃刚才医生配的 甲磺酸倍他司汀片(俗称 敏使朗),医生说回去再吃,于是强坚持站了起来,虽感觉头脑还是有点昏沉,脚步还不是太稳,但相信自己可以坐出租回去;于是到院外叫了一辆出租回家,回到小区先在活动区坐了一会,然后自行爬楼梯上楼了;到家终于坚持不住了,狂吐不止,把在医院吃的瘦肉粥和红枣全部还了出来,躺下后抱着试试看的态度,服用了甲磺酸倍他司汀片,半小时后感觉疗效很快很好;感觉这药很对胃口,看说明其药理作用是加快内耳迷路微循环的血流量。网上查这种药也属于晕车药的一种。

       第2天继续休息调整,继续服用甲磺酸倍他司汀片,感觉好很多了;晚上睡觉时侧翻虽然也有晕的感觉,但明显要轻很多,且恢复速度快!第3天早上起来感觉还可以,于是去上班了,由于很多人建议得这种病的人尽量别开车或者少开车,于是坐地铁去上班;个人觉得这样也好,因为坐地铁的话,整个路程中要步行25分钟,这样一天来回可以多走50分钟,既绿色又健康;

       第一天在公司上班有时感觉有些气短,但基本没有眩晕;第二天上班气短的感觉没有了,上午也没有眩晕,但下午3点左右时在弯身往地板上拔插电源时,依然触发了眩晕,但恢复很快,一段时间内有点难受,但基本站立没有问题;本想再次服用甲磺酸倍他司汀片,但考虑到这种药片毕竟是应急药,不宜多服,于是没有服用,晚上坐地铁回家,一路上没有问题;

    回到家后,感觉还不错,增强中药治疗,有朋友推荐了红枣+天麻 共煮服用的药方,虽然网上有人说服用天麻对美尼尔好像无效,但我认为每人情况不一样,既然甲磺酸倍他司汀片对我有效,那么天麻也有活血作用,对我应该也有效,至少不会有反作用,于是就煮了服用了,考虑到多睡对美尼尔有用,在晚上9:00就开始睡了。这一晚,在翻侧时基本没有眩晕的感觉了。 早上醒来感觉好多了,开车陪LP去了趟龙华寺也没有什么问题。

经过上述经历,我个人认为如下细则应该在今后被遵守:

1)以后坚持坐地铁上下班(除非遇到流感高峰),这样既可以减少危险发生概率,又可以多锻炼身体(每天增加50分钟步行时间)

2)没事不要折腾到很晚才睡,晚上10:00之前没什么事就睡吧。

3)天麻这种食品在平时可以少量泡茶,含在嘴里咀嚼等等,以促进脑部血液循环。

4)在适当的时候增加体育锻炼;我记得2003年的时候,每次弯身都感觉脑部有胀感,后来坚持跑步1年多以后,就没有这种感觉了。

 

其他嘛,有人说美尼尔病人不能开车,我倒是觉得只要身体状况稳定,周六周日开开也无所谓。对我而言,这种病发作是有征兆的,由轻到重,可以提前控制。

附:天麻的副作用

天麻是一味常用而较名贵的中药,临床多用于头痛眩晕、肢体麻木、小儿惊风、癫痫、抽搐、破伤风等症。由于天麻对肝阳上亢引起的头痛、眩晕等效果显著,故常被人当成“补药”服用。一见眩晕,不分体质虚实,气血盛衰,就妄用天麻,其结果就可能出现以上患者一样的不良反应。

    服用天麻出现的常见不良反应有:头晕、恶心、胸闷、皮肤丘疹伴瘙痒等,个别会出现面部或全身浮肿,甚至脱发现象。不仅单用天麻会发生这类反应,有的人服了含天麻的汤剂如半夏白术天麻汤等、中成药如天麻丸、天麻蜜环菌糖衣片后,同样会出现对天麻过敏的症状。

    对天麻的副作用或使用禁忌,古人早有认识。如《本草纲目》云:“久服天麻,遍身发出红丹。”《本经逢原》也云:“天麻性虽不燥,毕竟风剂,若血虚无风,火炎头痛、口干便闭者,不可妄用。”

    清代名医吴仪洛更是直言:“血液衰少及非真中风者忌用”。现代药理实验证明:天麻有一定毒副作用,天麻中毒剂量是40g以上,中毒潜伏期是1~6小时。

    使用天麻时“药不对证”是引起不良反应的重要原因之一。所以,使用天麻时应注意这样几点:

    1.凡病人见津液衰少,血虚、阴虚等,均慎用天麻。

    2.重视配伍应用。《本草衍义》有“天麻须别药相佐使,然后见其功”的记述。古今医家很少单味使用天麻,而多根据不同病证组方用药。如:半夏白术天麻汤、天麻钩藤饮、天麻丸等。临床证明,单独使用天麻的效果不佳或者效果不确定。

    3.即使针对肝阳上亢、痰阻经络等实证时,使用天麻也要详审病情,把握病机,随证加减,方能取得良好的治疗效果。

    4.天麻不宜合久煎。天麻的主要成分为天麻甙,遇热极易挥发。天麻与他药共煎会因热而失去镇静镇痛的有效成分。所以,天麻最好先用少量清水润透,待软化后切成薄片,晾干或晒干研末,用煎好的汤药冲服,或研末入丸、散服用。

    5.使用单味天麻或天麻制剂时,如出现头晕、胸闷气促、恶心呕吐、心跳及呼吸加快、皮肤瘙痒等时,应立即停药,症状严重者应及时到医院诊治。

2011春节-常州恐龙园

 

有朋友说过年这几天晚上,常州恐龙园挺好玩的,虽是常州人,以前还真是一直没去过,于是在大年初四晚上,决定去看一下。

这是常州恐龙园的一个概要介绍:

IMG_0997

走了一圈整体感觉恐龙园是一个科教基地和娱乐设施齐聚的大型游乐场所,还是挺值得大家去看看的,大家跟着我的摄像镜头,来领略一下恐龙园的特别景致吧。

IMG_0984

这些都是恐龙化石。

IMG_1009

 

IMG_1012

这个是什么,大家猜到了吗,对了,这就是恐龙蛋。

IMG_1020

 

IMG_1024

 

IMG_1073

 

IMG_1013

 

IMG_1011

 

IMG_1008

由于是晚上去的,所以灯光效果特好。

IMG_1044

这个是金刚。

IMG_1104

IMG_1146

IMG_1141

 

这是大风车

IMG_1159

这是新春特别节目,彩灯游行。

p2

 

p4

 

p6

 

p7

 

p10

ORACLE EBS新需求

凡顶咨询
1、ORACLE EBS 财务项目经理 1人 随时到位 项目经理具有有色金属、冶炼、钢铁、每天、贸易、食品或化工行业。3-4年以上外部经验,要求有过至少一个项目的项目经理经验。BASE可以:北京上海大连沈阳南京,本科学历,最好财务专业毕业,有过实际的财务经验。
2、ORACLE EBS 采购项目经理 1人 随时到位 项目经理具有有色金属、冶炼、钢铁、每天、贸易、食品或化工行业。3-4年以上外部经验,要求有过至少一个项目的项目经理经验。BASE可以:北京上海大连沈阳南京
联系人:Tina
MSN: finding005@hotmail.com finding008@live.cn finding007@live.cn
邮箱:qhd_finding006@126.com qhd_finding008@126.com
TEL:15354339198 15354336698
QQ:1589905815 1349945159 1723267291 1597414210

ALLOC 13.1 Demo 安装日志

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

七、ALLOC 安装

7.1 Alloc DB 安装

在安装rms的时候已经完成alloc的db object的安装

Allocation schema: ALLOC13DEV

密码:*********

7.2 Alloc Appserver 安装

7.2.1 确认alloc所在数据库已经启动

若未启动,设置环境变量启动之

su – root

Xhost+

su – oracle

ORACLE_BASE=/d01/app/oracle

ORACLE_HOME=/d01/app/oracle/product/11.1.0/db_1

ORACLE_SID=retl

PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:

export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH

RMS_STAGEDIR=/d01/stage/retail/rms/rms

export RMS_STAGEDIR

NLS_LANG=AMERICAN_AMERICA.UTF8

export NLS_LANG

sqlplus ‘/as sysdba’

Sql> startup

7.2.2 启动OAS 10.1.3.4

ORACLE_HOME=/d01/app/oracle/product/10.1.3.1/OracleAS_2

PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:

export export ORACLE_HOME PATH

$ORACLE_HOME/opmn/bin/opmnctl startall

进入oas控制台,http://retek13.hand-china.com:2000/em

As Instance name : retekas2

Oc4jadmin 密码: *********1

创建instance和group

$ORACLE_HOME/bin/createinstance -instanceName alloc_oc4j -groupName alloc_group

密码输入:*********1

cp $ORACLE_HOME/opmn/conf/opmn.xml $ORACLE_HOME/opmn/conf/opmn.xml.bak_bf_alloc

vi $ORACLE_HOME/opmn/conf/opmn.xml

设置语言环境

<process-type id="alloc_oc4j" module-id="OC4J" status="enabled">

<environment>

<variable id="LANG" value="en_US" />

</environment>

$ORACLE_HOME/opmn/bin/opmnctl reload

$ORACLE_HOME/opmn/bin/opmnctl @cluster startproc ias-component=alloc_group

JAVA_HOME=$ORACLE_HOME/jdk

export JAVA_HOME

cp /d01/app/oracle/OraHome_1/network/admin/tnsnames.ora /d01/app/oracle/product/10.1.3.1/OracleAS_2/network/admin/

cd /d01/stage/retail/alloc/alloc/application

./install.sh

输入:

Alloc/RMS 13 JDBC URL: jdbc:oracle:oci:@retl

Allocation schema: ALLOC13DEV

RMS 13 schema: RMS13DEV

需要rpm_oc4j

application name: rpm13

clip_image001

alloc安装完成后会自动启动一个ocm的安装,此安装在最后一步向oracle的configuration manager server 注册时因为超时而失败。

clip_image002

安装测试:

http://retek13.hand-china.com:2000/alloc/index.jsp

clip_image003

SELECT * FROM ALC_USERS

输入用户名:RETEK

密码:retek

clip_image004

RWMS 13.1 Demo 安装日志

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

六、RWMS 安装

按照rwms的ig安装

6.1) RWMS DB 安装

6.1.1)创建OFA目录

su – oracle

ORACLE_BASE=/d01/app/oracle

ORACLE_HOME=/d01/app/oracle/product/11.1.0/db_1

ORACLE_SID=rwms

PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:

export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH

RWMS_STAGEDIR=/d01/stage/retail/rwms/dbserverunix

export RWMS_STAGEDIR

NLS_LANG=AMERICAN_AMERICA.UTF8

export NLS_LANG

cd $ORACLE_BASE/oradata

mkdir $ORACLE_BASE/oradata/rwms

mkdir $ORACLE_BASE/admin/rwms

mkdir $ORACLE_BASE/admin/rwms/adump

mkdir $ORACLE_BASE/admin/rwms/bdump

mkdir $ORACLE_BASE/admin/rwms/cdump

mkdir $ORACLE_BASE/admin/rwms/udump

mkdir $ORACLE_BASE/admin/rwms/dpdump

mkdir $ORACLE_BASE/admin/rwms/pfile

mkdir $ORACLE_BASE/admin/rwms/arch

cp $RWMS_STAGEDIR/create_db/init102_release.ora $ORACLE_HOME/dbs/initrwms.ora

更改正确的路径和Dbname:

vi $ORACLE_HOME/dbs/initrwms.ora (ok)

vi $RWMS_STAGEDIR/create_db/crdb1.sql

vi $RWMS_STAGEDIR/create_db/crdb2.sql

vi $RWMS_STAGEDIR/create_db/crdb3.sql

vi $RWMS_STAGEDIR/create_db/create_rwms_tablespaces.sql

运行crdb3.sql时, xdb_protocol.log 中有错误,原因是执行到某个操作时,报告不能分配share pool; 因为我把默认的sga参数都调整到原来的一半了,原来的SGA是1G,我调整到了512M ,特别是share pool也被我从350M 调整到了175M,在安装过程中出现了share pool不够用的情况,Action ,调大share pool 到原来的350M,其他依然是原来的一半,重启数据库后继续:

spool xdb_protocol.log

@$ORACLE_HOME/rdbms/admin/catqm.sql change_on_install SYSAUX TEMP;

spool off

@$ORACLE_HOME/rdbms/admin/utlrp.sql

重新运行可以。

创建Schema:

sqlplus ‘/as sysdba’

create role developer;

create role wms_user;

cd $RWMS_STAGEDIR/utility

sqlplus ‘/as sysdba’

@create_user.sql

@rwms_owner_grants.sql

创建RIB对象

sqlplus ‘/as sysdba’

ALTER USER "RWMS13DEV" QUOTA UNLIMITED ON "SYSTEM"

ALTER USER "RWMS13DEV" QUOTA UNLIMITED ON "RETEK_DATA"

ALTER USER "RWMS13DEV" QUOTA UNLIMITED ON "RETEK_INDEX"

ALTER USER "RWMS13DEV" QUOTA UNLIMITED ON "LOB_DATA"

cd $RWMS_STAGEDIR/rib_objects/ddl

sqlplus rwms13dev/********

@rib13ddl.sql

log显示很多表创建失败,主要是对DATA_MEDIUM , DATA_LARGE表空间无权限

sqlplus ‘/as sysdba’

ALTER USER "RWMS13DEV" QUOTA UNLIMITED ON "DATA_MEDIUM";

ALTER USER "RWMS13DEV" QUOTA UNLIMITED ON "INDEX_MEDIUM";

ALTER USER "RWMS13DEV" QUOTA UNLIMITED ON "DATA_LARGE";

ALTER USER "RWMS13DEV" QUOTA UNLIMITED ON "INDEX_LARGE";

cd $RWMS_STAGEDIR/rib_objects/db_objects/130

sqlplus rwms13dev/********

Sql>@InstallAndCompileAllRibOracleObjects.sql

创建rwms对象:

cd $RWMS_STAGEDIR/types/130

sqlplus rwms13dev/********

@rwms13type.sql

cd $RWMS_STAGEDIR/ddl

sqlplus rwms13dev/********

@rwms13.sql

log显示很多表创建失败,主要是对DATA_MEDIUM , DATA_LARGE表空间无权限

sqlplus ‘/as sysdba’

ALTER USER "RWMS13DEV" QUOTA UNLIMITED ON "DATA_MEDIUM";

ALTER USER "RWMS13DEV" QUOTA UNLIMITED ON "INDEX_MEDIUM";

ALTER USER "RWMS13DEV" QUOTA UNLIMITED ON "DATA_LARGE";

ALTER USER "RWMS13DEV" QUOTA UNLIMITED ON "INDEX_LARGE";

再次运行rwms13.sql

cd $RWMS_STAGEDIR/triggers/130

sqlplus rwms13dev/********

@rwms13trg.sql

cd $RWMS_STAGEDIR/db_objects/130

sqlplus rwms13dev/********

@rwms13dbo.sql

cd $RWMS_STAGEDIR/utility

sqlplus rwms13dev/********

@inv_obj_comp.sql

插入初始化数据:

cd $RWMS_STAGEDIR/data/130

sqlplus rwms13dev/********

@create_base_data.sql

升级到1301:

cd $RWMS_STAGEDIR/dbcs/1301

sqlplus rwms13dev/********

@patch1301dbcs.sql

cd $RWMS_STAGEDIR/db_objects/1301

sqlplus rwms13dev/********

@patch1301rwms.sql

cd $RWMS_STAGEDIR/data/1301

sqlplus rwms13dev/********

@patch1301ctl.sql

cd $RWMS_STAGEDIR/utility

sqlplus rwms13dev/********

@inv_obj_comp.sql

升级到1302:

cd $RWMS_STAGEDIR/rib_objects/db_objects/1302

sqlplus rwms13dev/********

Sql>@InstallAndCompileAllRibOracleObjects.sql

cd $RWMS_STAGEDIR/types/1302

sqlplus rwms13dev/********

Sql>@patch1302types.sql

cd $RWMS_STAGEDIR/dbcs/1302

sqlplus rwms13dev/********

Sql>@patch1302dbcs.sql

cd $RWMS_STAGEDIR/db_objects/1302

sqlplus rwms13dev/********

Sql>@patch1302rwms.sql

cd $RWMS_STAGEDIR/utility

sqlplus rwms13dev/********

@inv_obj_comp.sql

cd $RWMS_STAGEDIR/data/1302

sqlplus rwms13dev/********

Sql>@base_reports_parameters.sql

Sql>@I18N_main_script.sql

升级到13.1

cd $RWMS_STAGEDIR/rib_objects/db_objects/131

sqlplus rwms13dev/********

Sql>@InstallAndCompileAllRibOracleObjects.sql

cd $RWMS_STAGEDIR/types/131

sqlplus rwms13dev/********

Sql>@patch131types.sql

cd $RWMS_STAGEDIR/dbcs/131

sqlplus rwms13dev/********

Sql>@patch131dbcs.sql

cd $RWMS_STAGEDIR/triggers/131

sqlplus rwms13dev/********

Sql>@patch131trg.sql

cd $RWMS_STAGEDIR/db_objects/131

sqlplus rwms13dev/********

Sql>@patch131rwms.sql

cd $RWMS_STAGEDIR/utility

sqlplus rwms13dev/********

@inv_obj_comp.sql

cd $RWMS_STAGEDIR/data/131

sqlplus rwms13dev/********

Sql>

@base_copyright_info.sql

@base_currency.sql

@base_item_master.sql

@13.1_main_script.sql

————————————————————————————-

6.2) RWMS APP 安装

6.2.1 准备环境变量:

设置环境变量:

su – oracle

INSTALL_DIR=/d01/app/retail_apps

Export INSTALL_DIR

cd $INSTALL_DIR

cp -R /d01/stage/retail/rwms/appserverunix/* .

cd $INSTALL_DIR/rwms

cp -R $INSTALL_DIR/forms_scripts $INSTALL_DIR/rwms/

rm -fR $INSTALL_DIR/forms_scripts

ORACLE_HOME=/d01/app/oracle/OraHome_1

PATH=$ORACLE_HOME/bin:$ORACLE_HOME/opmn/bin:$ORACLE_HOME/dcm/bin:$INSTALL_DIR/rwms/forms_scripts:$PATH

export ORACLE_HOME PATH

ORACLE_SID=rwms

export ORACLE_SID

NLS_LANG=AMERICAN_AMERICA.UTF8

export NLS_LANG

CLASSPATH=$ORACLE_HOME/jlib/importer:$ORACLE_HOME/jlib/debugger.jar:$ORACLE_HOME/jlib/utj.jar:$ORACLE_HOME/jlib/ewt3.jar:$ORACLE_HOME/jlib/share.jar:$ORACLE_HOME/jlib/dfc.jar:$ORACLE_HOME/jlib/help4.jar:$ORACLE_HOME/jlib/oracle_ice.jar:$ORACLE_HOME/jlib/jewt4.jar

export CLASSPATH

FORMS_BUILDER_CLASSPATH=$CLASSPATH

FORMS_PATH=$INSTALL_DIR/rwms/forms/bin:$ORACLE_HOME/forms

REPORTS_PATH=$INSTALL_DIR/rwms/reports/bin:$ORACLE_HOME/forms

TK_UNKNOWN=$ORACLE_HOME/guicommon/tk/admin

UP=rwms13dev/********@rwms

export FORMS_BUILDER_CLASSPATH FORMS_PATH TK_UNKNOWN UP

在tnsnames.ora中添加rwms

允许xserver链接

su – root

xhost +

确认数据库已经启动

编译pll:

cp $INSTALL_DIR/rwms/forms/src/*.pll $INSTALL_DIR/rwms/forms/bin/

cd $INSTALL_DIR/rwms/forms/bin/

forms.pll.sh

cp $INSTALL_DIR/rwms/forms/src/*.fmb $INSTALL_DIR/rwms/forms/bin/

cd $INSTALL_DIR/rwms/forms/bin/

forms.fmb.sh

cp $INSTALL_DIR/rwms/forms/src/*.mmb $INSTALL_DIR/rwms/forms/bin/

cd $INSTALL_DIR/rwms/forms/bin/

menus.mmb.sh

rm -f *.mmb

cp $INSTALL_DIR/rwms/reports/bin/label.prt $INSTALL_DIR/rwms/extras/

安装帮助:

启动ias,创建一个oc4j实例:rwms_help_instance,把rwms-help.war部署上去。

启动FormServer

$ORACLE_HOME/opmn/bin/opmnctl startall

$ORACLE_HOME/bin/emctl start iasconsole

为RWMS配置AppServer:

cp $ORACLE_HOME/forms/admin/resource/US/fmrweb.res $ORACLE_HOME/forms/server/rwms_key_mapping.res

vi $ORACLE_HOME/forms/server/rwms_key_mapping.res (把ig中的键盘映射内容拷贝进去)

9 : 0 : "Tab" : 1 : "Next Field"

9 : 1 : "Shift+Tab" : 2 : "Previous Field"

85 : 2 : "Ctrl+U" : 3 : "Clear Field"

38 : 0 : "Up" : 6 : "Up"

80 : 2 : "Ctrl+P" : 6 : "Up"

40 : 0 : "Down" : 7 : "Down"

76 : 2 : "Ctrl+L" : 7 : "Down"

33 : 0 : "PageUp" : 12 : "Scroll Up"

34 : 0 : "PageDown" : 13 : "Scroll Down"

69 : 2 : "Ctrl+E" : 22 : "Edit"

10 : 0 : "Return" : 27 : "Return"

81 : 2 : "Ctrl+Q" : 32 : "Exit"

112 : 2 : "Ctrl+k" : 35 : "Show Keys"

49 : 2 : "Ctrl+1" : 83 : "F1"

50 : 2 : "Crtl+2" : 84 : "F2"

51 : 2 : "Ctrl+3" : 85 : "F3"

52 : 2 : "Ctrl+4" : 86 : "F4"

53 : 2 : "Ctrl+5" : 87 : "F5"

54 : 2 : "Ctrl+6" : 88 : "F6"

55 : 2 : "Ctrl+7" : 89 : "F7"

56 : 2 : "Ctrl+8" : 90 : "F8"

57 : 2 : "Ctrl+9" : 91 : "F9"

27 : 0 : "Esc" : 82 : "F10"

86 : 1 : "Shift+V" : 29 : "List of Values"

cp $ORACLE_HOME/Apache/Apache/conf/httpd.conf $ORACLE_HOME/Apache/Apache/conf/httpd.conf.bak_bf_rwms

mkdir /d01/app/retail_apps/rwms/temp

mkdir /d01/app/retail_apps/rwms/reptemp

mkdir /d01/app/retail_apps/rwms/web_html

vi $ORACLE_HOME/Apache/Apache/conf/httpd.conf

添加内容:

Listen 7878

<VirtualHost *:7878>

ServerName retek13.hand-china.com

ServerAlias retek13.hand-china.com.*

DocumentRoot "/d01/app/oracle/OraHome_1/Apache/Apache/htdocs"

Alias /web_html/ "/d01/app/retail_apps/rwms/web_html/"

Alias /web_gif/ "/d01/app/retail_apps/rwms/web_gif/"

Alias /temp/ "/d01/app/retail_apps/rwms/temp/"

Alias /rwms_reptemp/ "/d01/app/retail_apps/rwms/reptemp/"

Alias /rf_launch_value/ "/d01/app/retail_apps/rwms/rf_launch/"

</VirtualHost>

编辑env文件:

cp $ORACLE_HOME/forms/server/default.env $ORACLE_HOME/forms/server/rwms.env

vi $ORACLE_HOME/forms/server/rwms.env

添加:

FORMS_PATH=/d01/app/retail_apps/rwms/forms/bin:$ORACLE_HOME/forms

ORACLE_RWMS_REPORTS_HOST=http://retek13.hand-china.com:7878/

ORACLE_RWMS_RWSERVER=reports/rwservlet

ORACLE_RWMS_REPORTS_SERVER=rwms_reports_server+envid=rwms

REPORTS_TEMP=/d01/app/retail_apps/rwms/reptemp

REPORTS_PATH=/d01/app/retail_apps/rwms/reports/bin:$ORACLE_HOME/forms

ORACLE_RWMS_EXTRAS_PATH=/d01/app/retail_apps/rwms/extras

NLS_DATE_FORMAT=DD-MON-RR

NLS_LANG=AMERICAN_AMERICA.UTF8

FORMS_REJECT_GO_DISABLED_ITEM=FALSE

备注:<report_server>究竟该填写什么,ig中讲得不清楚。

配置formsweb.cfg …尚未开始。

添加

[rwms]

envfile=rwms.env

width=950

height=685

form=logon_scr.fmx

separateFrame=true

lookAndFeel=Oracle

colorScheme=swan

userid=rwms13dev/********@rwms

baseHTMLjinitiator=basejpi.htm

jpi_download_page=http://java.sun.com/products/archive/j2se/1.4.2_06/index.html

jpi_classid=clsid:CAFEEFAC-0014-0002-0006-ABCDEFFEDCBA

jpi_codebase=http://java.sun.com/products/plugin/autodl/jinstall-1_4_2-windows-i586.cab#Version=1,4,2,06

jpi_mimetype=application/x-java-applet;jpi-version=1.4.2_06

[rwms_hh]

envfile=rwms.env

width=100%

height=100%

form=hh_intro_s.fmx

separateFrame=false

lookAndFeel=Oracle

colorScheme=swan

Logo=false

background=false

ShowMenuBar=false

ShowStatusBar=false

baseHTML=base.htm

baseHTMLjinitiator=basejpi.htm

jpi_download_page=http://java.sun.com/products/archive/j2se/1.4.2_06/index.html

jpi_classid=clsid:CAFEEFAC-0014-0002-0006-ABCDEFFEDCBA

jpi_codebase=http://java.sun.com/products/plugin/autodl/jinstall-1_4_2-windows-i586.cab#Version=1,4,2,06

jpi_mimetype=application/x-java-applet;jpi-version=1.4.2_06

otherparams=term=/d01/app/oracle/OraHome_1/forms/server/key_mapping.res usesdi=YES

splashScreen=false

HTMLbodyAttrs=scroll=”no” topmargin=”0”leftmargin=”0” marginheight=”0” marginwidth=”0”onload=”window.moveTo(0,0);”

userid=rwms13dev/********@rwms

[rwms_tm]

envfile=rwms.env

width=100%

height=100%

form=tm_intro_s.fmx

separateFrame=false

lookAndFeel=Oracle

Logo=false

background=false

ShowMenuBar=false

ShowStatusBar=false

baseHTML=base.htm

baseHTMLjinitiator=basejpi.htm

jpi_download_page=http://java.sun.com/products/archive/j2se/1.4.2_06/index.html

jpi_classid=clsid:CAFEEFAC-0014-0002-0006-ABCDEFFEDCBA

jpi_codebase=http://java.sun.com/products/plugin/autodl/jinstall-1_4_2-windows-i586.cab#Version=1,4,2,06

jpi_mimetype=application/x-java-applet;jpi-version=1.4.2_06

otherparams=term=/d01/app/oracle/OraHome_1/forms/server/rwms_key_mapping.res usesdi=YES

splashScreen=false

HTMLbodyAttrs=scroll=”no” topmargin=”0” leftmargin=”0” marginheight=”0” marginwidth=”0” onload=”window.moveTo(0,0);”

userid=rwms13dev/********@rwms

[rwms_wr]

envfile=rwms.env

width=100%

height=100%

form=wr_intro_s.fmx

separateFrame=false

lookAndFeel=Oracle

colorScheme=swan

Logo=false

background=false

ShowMenuBar=false

ShowStatusBar=false

baseHTML=base.htm

baseHTMLjinitiator=basejpi.htm

jpi_download_page=http://java.sun.com/products/archive/j2se/1.4.2_06/index.html

jpi_classid=clsid:CAFEEFAC-0014-0002-0006-ABCDEFFEDCBA

jpi_codebase=http://java.sun.com/products/plugin/autodl/jinstall-1_4_2-windows-i586.cab#Version=1,4,2,06

jpi_mimetype=application/x-java-applet;jpi-version=1.4.2_06

otherparams=term=/d01/app/oracle/OraHome_1/forms/server/rwms_key_mapping.res usesdi=YES

splashScreen=false

HTMLbodyAttrs=scroll=”no” topmargin=”0”leftmargin=”0” marginheight=”0” marginwidth=”0”onload=”window.moveTo(0,0);”

userid=rwms13dev/********@rwms

cp $ORACLE_HOME/reports/conf/rep_retek13_oracleas1.conf $ORACLE_HOME/reports/conf/rwms_reports_server.conf

vi $ORACLE_HOME/reports/conf/rwms_reports_server.conf

添加:

<environment id="rwms">

<envVariable name="REPORTS_PATH" value="/d01/app/retail_apps/rwms/reports/bin"/>

<envVariable name="NLS_LANG" value="AMERICAN_AMERICA.UTF8"/>

</environment>

cp $ORACLE_HOME/reports/conf/rwms_reports_server.conf $ORACLE_HOME/forms/server/

vi /d01/app/retail_apps/rwms/rf_launch/rwms_rf_menu.htm

更改值如下:

var hh_device = "http://retek13.hand-china.com:7878/forms/frmservlet?config=rwms_hh";

var tm_device = "http://retek13.hand-china.com:7878/forms/frmservlet?config=rwms_tm";

var wr_device = "http://retek13.hand-china.com:7878/forms/frmservlet?config=rwms_wr";

var exit_script ="http://retek13.hand-china.com:7878/rf_launch_value/close.htm";

重启FormServer:

停止FormServer

$ORACLE_HOME/bin/emctl stop iasconsole

$ORACLE_HOME/opmn/bin/opmnctl stopall

启动FormServer

$ORACLE_HOME/opmn/bin/opmnctl startall

$ORACLE_HOME/bin/emctl start iasconsole

测试:

http://retek13.hand-china.com:7878/forms/frmservlet?config=rwms

clip_image001

IG 中讲的登录用户信息是错误的,通过跟踪session的sql可以知道正确的用户存放于dms_user表中,可以从这张表获取用户信息。

select * from dms_user

clip_image002

———————————————————————————————–

为rwms配置ocm

vi $ORACLE_HOME/retail_inventory/oracle_retail_ARIApp.properties

添加如下两行:

rmsappsvr.retek13.hand-china.com.rwms+RWMS_INSTALL_DATE=2010-12-30 11:38:10

rmsappsvr.retek13.hand-china.com.rwms+RWMS_VERSION=13.1.0

ARI 13.1 Demo 安装日志

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

五、ARI 安装

5.1 DB object 安装

—————————————————————–

创建 Tablespace :

cd /d01/stage/retail/ari/dbserverunix/create_db

vi create_ari_tablespaces.sql

更改数据文件的绝对路径

————————————————————————————-

— Script: create_ari_tablespaces.sql

— Execute as: sysdba

— Note: Before running this script:

— Modify <datafile_path> values.

— Modify datafile storage parameters and sizes as needed

———————————————————————————-

spool create_ari_tablespaces.log

CREATE TABLESPACE ARI_INDEX

DATAFILE ‘/d01/app/oracle/oradata/retl/ari_index01.dbf’ SIZE 500M

AUTOEXTEND ON NEXT 100M MAXSIZE 2000M

EXTENT MANAGEMENT LOCAL

SEGMENT SPACE MANAGEMENT MANUAL

;

CREATE TABLESPACE ARI_DATA

DATAFILE ‘/d01/app/oracle/oradata/retl/ari_data01.dbf’ SIZE 500M

AUTOEXTEND ON NEXT 100M MAXSIZE 2000M

EXTENT MANAGEMENT LOCAL

SEGMENT SPACE MANAGEMENT MANUAL

;

spool off

Exit

—————————————————————————————————————————————–

su – oracle

ORACLE_HOME=/d01/app/oracle/product/11.1.0/db_1

ORACLE_SID=retl

PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:

NLS_LANG=AMERICAN_AMERICA.UTF8

export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH NLS_LANG

sqlplus ‘/as sysdba’

Sql>@create_ari_tablespaces.sql;

创建Schema (密码都设置为********)

cd /d01/stage/retail/ari/dbserverunix/utility

sqlplus ‘/as sysdba’

Sql>@create_master_schema_user.sql;

Schema 输入:ARI131M

Sql>@create_gen_schema_user.sql

Schema 输入: ARI131G

创建database object

cd /d01/stage/retail/ari/dbserverunix/ddl

sqlplus ari131m/********@retl

Sql>@ari13.sql

cd /d01/stage/retail/ari/dbserverunix/db_objects

sqlplus ari131m/********@retl

Sql>@ari13dbo.sql

cd /d01/stage/retail/ari/dbserverunix/utility

sqlplus ari131m/********@retl

Sql>@inv_obj_comp.sql

创建 ARI Data

cd /d01/stage/retail/ari/dbserverunix/data

sqlplus ari131m/********@retl

Sql>@ari13ctl.sql

cd /d01/stage/retail/ari/dbserverunix/data/forms_menu_elements

sqlplus ari131m/********@retl

Sql>@base_form_menu_elements.sql;

创建语言数据

cd /d01/stage/retail/ari/dbserverunix/data/forms_menu_elements

sqlplus ari131m/********@retl

Sql>@base_form_menu_elements_langs_zhs.sql;

Alter ARI Data

cd /d01/stage/retail/ari/interface/MTS_Support

sqlplus ari131m/********@retl

Sql>@mts_realm.sql;

Sql>@mts_parm_type.sql;

SQL>@mts_parm.sql

SQL>@update_group_lookup.sql

Create Generated Schema Synonyms

cd /d01/stage/retail/ari/dbserverunix/utility

sqlplus ari131g/********@retl

Sql>@generated_syns.sql

Create User Synonyms

cd /d01/stage/retail/ari/dbserverunix/utility

sqlplus ari131m/********@retl

Sql>@user_syns.sql

——————————————–

警告:缺少 user_syns.sql 文件 。

5.2 Application Server 层 安装

—————————————————————–

su – oracle

mkdir /d01/app/retail_apps/ari

cd /d01/app/retail_apps/ari

unzip ari131appserver.zip

设置环境变量:

INSTALL_DIR=/d01/app/retail_apps/ari

Export INSTALL_DIR

ORACLE_HOME=/d01/app/oracle/OraHome_1

PATH=$ORACLE_HOME/bin:$ORACLE_HOME/opmn/bin:$ORACLE_HOME/dcm/bin:$INSTALL_DIR/forms10gr2_scripts:$PATH

export ORACLE_HOME PATH

ORACLE_SID=retl

export ORACLE_SID

NLS_LANG=AMERICAN_AMERICA.UTF8

export NLS_LANG

CLASSPATH=$ORACLE_HOME/jlib/importer:$ORACLE_HOME/jlib/debugger.jar:$ORACLE_HOME/jlib/utj.jar:$ORACLE_HOME/jlib/ewt3.jar:$ORACLE_HOME/jlib/share.jar:$ORACLE_HOME/jlib/dfc.jar:$ORACLE_HOME/jlib/help4.jar:$ORACLE_HOME/jlib/oracle_ice.jar:$ORACLE_HOME/jlib/jewt4.jar

export CLASSPATH

FORMS_BUILDER_CLASSPATH=$CLASSPATH

FORMS_PATH=$INSTALL_DIR/forms/bin:$INSTALL_DIR/forms/src:$ORACLE_HOME/forms

TK_UNKNOWN=$ORACLE_HOME/guicommon/tk/admin

UP=ari131m/********@retl

export FORMS_BUILDER_CLASSPATH FORMS_PATH TK_UNKNOWN UP

允许xserver链接

su – root

xhost +

启动数据库

另起一个session 启动数据库

编译:

这里注意:不能按照安装文档的说法把文件从src目录拷贝到bin目录,否则会出现错误 FRM-30312: Failed to compile the library. 错误。

原因是frm_cmp.sh 试图从原目录中拷贝fmb文件到当前执行编译命令的目录,冲突了。

cd $INSTALL_DIR/forms/bin/

pll2plx10gr2_ari

rm -f *.plx

cp $INSTALL_DIR/forms/src/*.fmb $INSTALL_DIR/forms/bin/

fmb2fmx10gr2_fm

rm -f fm_*.fmx

Fmb2fmx10gr2

for PROG in `ls *.fmb | grep -v fm_`

do PROGNAME=`echo $PROG`

rm $PROGNAME

done

cp $INSTALL_DIR/forms/src/*.mmb $INSTALL_DIR/forms/bin/

mmb2mmx10gr2

rm -f *.mmb

为ARI配置Appserver:

cp $ORACLE_HOME/forms/server/default.env $ORACLE_HOME/forms/server/ari.env

vi ari.env

添加如下变量:

FORMS_PATH=/d01/app/retail_apps/ari/forms/bin:/d01/app/oracle/OraHome_1/forms

NLS_DATE_FORMAT=DD-MON-RR

FORMS_USERNAME_CASESENSITIVE=1

NLS_LANG=AMERICAN_AMERICA.UTF8

FORMS_USERNAME_CASESENSITIVE=1

FORMS_REJECT_GO_DISABLED_ITEM=FALSE

sqlplus ari131m/********@retl

Sql>Update ari_language set webhelp_server=’http://retek13.hand-china.com:7777′

Vmware host无ip地址时,对guest机器中数据库的访问会变慢;

cd $ORACLE_HOME/forms/server

cp formsweb.cfg formsweb.cfg.bak_before_ari

vi formsweb.cfg 添加:

[ari]

envfile=ari.env

width=850

height=585

separateFrame=true

form=arimstr.fmx

lookAndFeel=Oracle

colorScheme=swan

baseHTMLjinitiator=basejpi.htm

jpi_download_page=http://java.sun.com/products/archive/j2se/1.4.2_06/index.html

jpi_classid=clsid:CAFEEFAC-0014-0002-0006-ABCDEFFEDCBA

jpi_codebase=http://java.sun.com/products/plugin/autodl/jinstall-1_4_2-windows-i586.cab#Version=1,4,2,06

jpi_mimetype=application/x-java-applet;jpi-version=1.4.2_06

配置帮助文件:

cp $ORACLE_HOME/Apache/Apache/conf/httpd.conf $ORACLE_HOME/Apache/Apache/conf/httpd.conf.bak_bf_ari

vi $ORACLE_HOME/Apache/Apache/conf/httpd.conf

添加别名:

Alias /english/ “/d01/app/retail_apps/ari/web_html/WebHelp”

运行测试:

启动FormServer

$ORACLE_HOME/opmn/bin/opmnctl startall

$ORACLE_HOME/bin/emctl start iasconsole

测试

http://retek13.hand-china.com:7777/forms/frmservlet?config=ari

clip_image001

clip_image002

为ARI配置OCM:

cd $ORACLE_HOME/retail_inventory

vi oracle_retail_ARIApp.properties

添加如下两行:

rmsappsvr.retek13.hand-china.com.ari13inst1+ARI_INSTALL_DATE=2010-12-28 11:38:10

rmsappsvr.retek13.hand-china.com.ari13inst1+ARI_VERSION=13.1.0

安装Ari导入导出工具:

ariiet131.exe 安装windows客户端上的,可在需要的时候安装。

RETL 13.1 Demo 安装日志

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

四、RETL安装

按照 retl的developer guider安装

su – oracle

准备安装目标目录:

mkdir /d01/app/retail_apps/retl

解压缩安装介质到stage目录后进入Stage目录:

cd /d01/stage/retail/alloc/rfx-13.1

./install.sh

安装过程很简单:

—————————————-

[oracle@retek13 rfx-13.1]$ ./install.sh

Enter directory for RETL software:

—> \c

/d01/app/retail_apps/retl

Is this the correct directory for the install? y or n

RFX_HOME: /d01/app/retail_apps/retl

—> \c

y

Creating install directory in /d01/app/retail_apps/retl …

Copying Library Files…

Copying Sample Files…

Copying Executables…

Copying Config File…

Successful completion of RETL Install

To complete the RETL setup and installation:

1) Place the following in a .kshrc/ .profile to retain setup variables:

RFX_HOME=/d01/app/retail_apps/retl

PATH=/d01/app/retail_apps/retl/bin:$PATH

export RFX_HOME PATH

2) Be sure to verify any additional environment setup as per the "Setup" section

of the Programmers Guide.

3) Verify the installation by running the following command:

$RFX_HOME/bin/verify_retl

——————————————-

执行验证:

$RFX_HOME/bin/verify_retl

报java例外,

Exception in thread "main" java.lang.ClassFormatError: com.retek.retl.base.RETL (unrecognized class file version)

at java.lang.VMClassLoader.defineClass(libgcj.so.7rh)

原因:操作系统自带的java 是1.4版本的,13.1的retl要求1.6的jdk,下载一个:

http://java.sun.com/javase/index.jsp

JAVA_HOME=/d01/jdk1.6.0_23

export JAVA_HOME

RFX_HOME=/d01/app/retail_apps/retl

export RFX_HOME

ORACLE_HOME=/d01/app/oracle/product/11.1.0/db_1

ORACLE_SID=retl

PATH=$RFX_HOME/bin:$JAVA_HOME:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:

NLS_LANG=AMERICAN_AMERICA.UTF8

export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH NLS_LANG

再次运行验证

$RFX_HOME/bin/verify_retl

[oracle@retek13 bin]$ $RFX_HOME/bin/verify_retl

Checking RETL Environment…passed!

Checking RETL binary…passed!

Running samples…failed!

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

RETL Installation is faulty! One or more tests failed in the samples directory.\n See /tmp/verifyretl-3558.log for failed tests

If tests have failed due to unexpected reasons, please contact support.

Please correct this problem and run the following line to verify

your installation is correct:

verify_retl

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

More /tmp/verifyretl-3558.log

[oracle@retek13 bin]$ more /tmp/verifyretl-8212.log

[ binop] [ Passed ]!

[ export] [ Passed ]!

[ fieldmod] [ Passed ]!

[ filter] [ **FAILED** ] – 1 failure(s).

[ funnel] [ **FAILED** ] – 1 failure(s).

[ generator] [ Passed ]!

[ import] [ Passed ]!

[ retl-training] [ Passed ]!

[ sort] [ **FAILED** ] – 1 failure(s).

[ verify_db] [ Passed ]!

———————————————

filter 测试失败,进入

cd /d01/app/retail_apps/retl/samples/filter

查看 out3.txt 可知 gsort 可执行文件未找到,这个文件在 /d01/app/retail_apps/retl/bin目录下是个链接,执行同目录下的gsort.Linux, 这个文件不存在; 在RETL的安装文档中讲到 retl的gsort 应链接到linux本身的sort程序,所以还要执行:

rm -f $RFX_HOME/bin/gsort

ln -s /bin/sort $RFX_HOME/bin/gsort

再次测试通过

[oracle@retek13 retl]$ $RFX_HOME/bin/verify_retl

Checking RETL Environment…passed!

Checking RETL binary…passed!

Running samples…/d01/app/retail_apps/retl/samples

passed!

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

WARNING : RETL was not verified with a database. If database support

is required in the future, please run the following:

verify_retl -do

Congratulations! Your RETL environment and installation passed all tests

See the programmer’s guide for more information about how to further test

your database installation (if applicable).

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

Exiting…saving output in /tmp/verifyretl-25217.log

For Oracle的测试也是成功的:

[oracle@retek13 retl]$ $RFX_HOME/bin/verify_retl -do

Checking RETL Environment…found ORACLE environment…passed!

Checking RETL binary…passed!

Running samples…/d01/app/retail_apps/retl/samples

passed!

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

Congratulations! Your RETL environment and installation passed all tests

See the programmer’s guide for more information about how to further test

your database installation (if applicable).

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

Exiting…saving output in /tmp/verifyretl-26003.log

总结:

运行RETL前先设置环境变量:

su – oracle

JAVA_HOME=/d01/jdk1.6.0_23

export JAVA_HOME

RFX_HOME=/d01/app/retail_apps/retl

export RFX_HOME

ORACLE_HOME=/d01/app/oracle/product/11.1.0/db_1

ORACLE_SID=retl

PATH=$RFX_HOME/bin:$JAVA_HOME:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:

NLS_LANG=AMERICAN_AMERICA.UTF8

export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH NLS_LANG

RMS 13.1 Demo安装日志

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

三、RMS安装

3.1)RMS DB安装

3.1.1) partition 策略设置:我们这里安装开发环境,不需要(注意正式环境是需要做的)

3.1.2)创建OFA目录

su – oracle

ORACLE_BASE=/d01/app/oracle

ORACLE_HOME=/d01/app/oracle/product/11.1.0/db_1

ORACLE_SID=retl

PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:

export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH

RMS_STAGEDIR=/d01/stage/retail/rms/rms

export RMS_STAGEDIR

cd $ORACLE_BASE/oradata

mkdir $ORACLE_BASE/oradata/retl

mkdir $ORACLE_BASE/admin/retl

mkdir $ORACLE_BASE/admin/retl/adump

mkdir $ORACLE_BASE/admin/retl/bdump

mkdir $ORACLE_BASE/admin/retl/cdump

mkdir $ORACLE_BASE/admin/retl/udump

mkdir $ORACLE_BASE/admin/retl/dpdump

mkdir $ORACLE_BASE/admin/retl/pfile

mkdir $ORACLE_BASE/admin/retl/arch

mkdir $ORACLE_BASE/utlfile

3.3.3) 创建数据库

RMS_STAGEDIR=/d01/stage/retail/rms/rms

export RMS_STAGEDIR

cp $RMS_STAGEDIR/dbschema/dbscripts_rms/create_db/init111.ora $ORACLE_HOME/dbs/initretl.ora

更改正确的路径和Dbname:

vi $ORACLE_HOME/dbs/initretl.ora

vi $RMS_STAGEDIR/dbschema/dbscripts_rms/create_db/crdb1.utf8.sql

vi $RMS_STAGEDIR/dbschema/dbscripts_rms/create_db/crdb2.sql

vi $RMS_STAGEDIR/dbschema/dbscripts_rms/create_db/crdb3.sql

vi $RMS_STAGEDIR/dbschema/dbscripts_rms/create_db/create_rms_tablespaces.sql

Sqlplus 运行上述脚本

sqlplus ‘/as sysdba’

创建schema: rms13dev

密码:********

创建schema:alloc13dev

密码:********

安装rms schema

———————————————————————————————————————————————————————————————

./runinstall

可能遇到的错误:

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/dbc_scripts中的sql执行是会出错,错误在:

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/error

1、dbc_system_option.err

这个错误是因为要删除某些约束对象不存在而引发的ora错误,因为dbc_system_option.sql中 有句话whenerver error exit ;导致退出,实际上此错误可忽略,可把这句话注释掉,再次运行./runinstall ,选择继续模式,而不要选择重新来过的模式。

改正后重新运行,还会再次卡在dbc_system_option.sql ,但看错误log实际已经执行完毕,因此把dbc_system_option.err删除后再次运行./runinstall即可。

2、dbc_deal_head.err

这个错误要根据实际的错误文件提示去解决:

缺类型定义:TABLE_COLUMN_REC

find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l "TABLE_COLUMN_REC"

定义文件在:/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/table_column_rec.sql

把这个文件单独运行后再继续可以过。

3、dbc_salweek_c_daily.err

缺类型定义:TABLE_CONSTRAINT_REC 和 TABLE_CONSTRAINT_TBL

find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l "TABLE_CONSTRAINT_REC"

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/table_constraint_rec.sql

把找到的sql 单独执行以下即可:sqlplus rms13dev/********@retl ….

4、dbc_item_master.sql

这个文件得手动这行了, 要增加一个字段 CATCH_WEIGHT_TYPE varchar2(1) ,另外把已经成功执行的部分去掉,重复执行DDL语句是过不去的。

手工执行完毕后,把.err文件删除,然后resume

5、dbc_repl_attr_upd_hist.err

表 REPL_ATTR_UPD_HIST 不存在。

find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l " REPL_ATTR_UPD_HIST"

表定义在: /d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.0.1/rms/dbcs/0300_repl_attr_upd_hist.sql

6、dbc_tsf_head.err

TABLE_INDEX_TBL 类型定义不存在

find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l "TABLE_INDEX_TBL"

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/table_index_rec.sql

7、0207_shipment.err

把 0207_shipment.sql中的 whenever sqlerror exit 去掉,把.err 文件删除, resume

把下面2句话去掉,resume

ALTER TABLE SHIPMENT DROP COLUMN BILL_TO_LOC_TYPE

/

ALTER TABLE SHIPMENT DROP COLUMN MATCH_LOCATION

/

8、0217_mv_currency_conversion_rates.err

报MV不存在,措施:把这段话注释掉。

–DROP MATERIALIZED VIEW MV_CURRENCY_CONVERSION_RATES;

9、c7636420_form_elements_langs_supvwedt.err

外键约束错误,item=LI_DELIVERY_POLICY 在表form_elements中不存在。

find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l "LI_DELIVERY_POLICY"

记录在下面的sql中存在:先后手工执行下面3个文件:

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/data/form_menu_elements/supvwedt_fmb.xml.sql

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/control_script/c7636420_form_elements_supvwedt.sql

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/control_script/c7636420_form_elements_langs_supvwedt.sql

单独执行上面的SQL后 resume

find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l "FINAL_DEST_IND"

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.0.2/rms/data/c7259107_form_elements.sql 中有这个字段的定义,单独执行其中的一条insert语句。

再次resume

10、c7636420_nav_access.err

System_options 表中缺少 INVC_MATCH_IND

find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l "INVC_MATCH_IND"

Bug: 在/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/dbc_script/dbc_system_options.sql 中已经没有这个字段,但SYSTEM_OPTIONS_SQL.pls这个package中还用这个字段,

CREATE OR REPLACE PACKAGE SYSTEM_OPTIONS_SQL

find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l "CREATE OR REPLACE PACKAGE SYSTEM_OPTIONS_SQL"

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/db_objects/syoptns.pls 中应用了INVC_MATCH_IND 但

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.0.2/rms/db_objects/syoptns.pls 中已经不再引用 INVC_MATCH_IND

而在13.1 patch中没有syoptns.pls ,在log中看13.0.2已经成功运行,正是怪啊。。。。

手工运行

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.0.2/rms/db_objects/syoptns.pls

Resume

11、c7636420_navigate.err

find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l "REPLENISHMENT"

外键约束错误,所需的外键内容在: /d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.0.2/rms/data/c7259107_nav_folder_base.sql

综合 前面若干错误,可判断13.0.1 和13.0.2 中的脚本未执行。虽然log显示已执行。这是为什么呢?

打开最早的log 可以看到:虽然ant运行了13.0.2 ,但是都未成功,相当于未运行,原因是13.0.2 使用了相对路径,而执行ant的程序不再13.0.2目录下。13.0.1也是这个问题。

SP2-0310: unable to open file "13.0.2/rms/data/c7429959_dba_policies.sql

这实际上是bug , 解决方案:

删除rms13dev,alloc13dev 用户,重新解压缩rms db 安装包, 到patch目录下去运行安装程序。

su – oracle

ORACLE_BASE=/d01/app/oracle

ORACLE_HOME=/d01/app/oracle/product/11.1.0/db_1

ORACLE_SID=retl

PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:

export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH

RMS_STAGEDIR=/d01/stage/retail/rms/rms

export RMS_STAGEDIR

NLS_LANG=AMERICAN_AMERICA.UTF8

export NLS_LANG

@$RMS_STAGEDIR/dbschema/dbscripts_rms/utility/create_user.sql

@$RMS_STAGEDIR/dbschema/dbscripts_rms/allocation/utility/create_user.sql

cd /d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch

/d01/stage/retail/rms/rms/dbschema/install.sh

这个方法不行,依然不通。换方法,直接更改 patch中的

rmsdbstart.sql

reimdbstart.sql

allocdbstart.sql

allocuserdbstart.sql

把相对路径更改为绝对路径。

@@替换成

@@$RMS_STAGEDIR/dbschema/dbscripts_rms/required_patches/mom-dbpatch/

再次运行安装,这次13.0.1, 13.0.2 都安进去了,当然还有部分程序编译有问题。

但如下错误还是出现:

1、dbc_deal_head.err 还是出现了。 按老方法改后resume

2、dbc_salweek_c_daily.err

TABLE_CONSTRAINT_REC 类型的定义不存在, 按老方法改后resume

3、dbc_tsfhead.err 按老方法改后resume

4、c7636420_form_elements_langs_supvwedt.err

从 /d01/stage/retail/rms/rms/dbschema/dbscripts_rms/data/form_menu_elements/supvwedt_fmb.xml.sql 中找到这句话,单独执行后resume

INSERT INTO form_elements (FM_NAME, block_name, item_name, item_type, sub_item_name, default_label_prompt, default_access_key, base_ind) VALUES (

‘FM_SUPVWEDT’,’B_SUPS’,

‘LI_DELIVERY_POLICY’,’List Item’, ‘NONE’,

‘Delivery Policy’, NULL, ‘Y’

);

5、13.1 patch的rpm/error下面出现错误:

因为还存在无效对象,不让过

select * from user_objects where status !=’VALID’; 有71个无效对象。

5.1 LIKE_ITEM_SQL 缺类型定义 OBJ_TAX_INFO_TBL OBJ_TAX_INFO_REC

find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l "OBJ_TAX_INFO_TBL"

find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l " OBJ_TAX_INFO_REC"

先后运行下面3个sql来创建这两个类型定义:

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/objtaxinfotype.sql

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/objtaxinfotypebody.sql

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/objtaxinfotypetbl.sql

再编译所有无效对象,然后再次查询

select * from user_objects where status !=’VALID’; 有41个无效对象

5.2 RMSAIASUB_SUPPLIER_VALIDATE 缺少类型定义:RIB_SupplierColRef_REC

find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l "RIB_SupplierColRef_REC"

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/SupplierColRef.sql

find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l "RIB_SupplierRef_TBL"

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/SupplierColRef.sql

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.0.2/rms/rib/db_objects/SupplierCollectionRef.sql

这些类型定义的sql在运行的时候报"object has been deleted" ,仔细看代码中的内容名称都被加上了双引号,把部分双引号去掉可以编译成功。

5.3 OBJ_CC_COST_EVENT_TBL 定义不存在

find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l "OBJ_CC_COST_EVENT_TBL"

find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l "OBJ_CC_COST_EVENT_REC"

找不到,在google, metalink均找不到。

find /d01/stage/retail -type f -mount |xargs fgrep -l "OBJ_ISCL_SUPP_HIER_CHG_TBL"

find /d01/stage/retail -type f -mount |xargs fgrep -l "OBJ_TEMPL_RELN_EVENT_TBL"

find /d01/stage/retail -type f -mount |xargs fgrep -l "RIB_InvReqItem_REC"

find /d01/stage/retail -type f -mount |xargs fgrep -l OBJ_ELC_COST_EVENT_TBL

这些类型定义不存在,且也找不到在哪里。

OBJ_PP_COST_EVENT_TBL

OBJ_DEAL_PASSTHRU_EVENT_TBL

OBJ_TEMPL_RELN_EVENT_TBL

OBJ_SC_COST_EVENT_TBL

OBJ_ISCL_SUPP_HIER_CHG_TBL

OBJ_ELC_COST_EVENT_TBL

"RIB_ReportLocRef_REC"

"RIB_ReportLocDesc_REC"

"RIB_SupplierColDesc_REC"

这些文件可以在如下目录找到:

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/obj_elc_cost_event.sql

find /d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects -type f -mount |xargs fgrep -l OBJ_ELC_COST_EVENT_TBL

find /d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects -type f -mount |xargs fgrep -l obj_elc_cost_event_tbl

字符串查找区分大小写,按小写找可以找到:

find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_invReqitem_REC

找不到,在rms的rib目录下也找不到,从独立的RIB安装包中查找,也找不到

但在。。中有:

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/rib_objects/db_objects/invReqDesc.sql

find /d01/stage/retail -type f -mount |xargs fgrep -l "RIB_InvReqItem_REC"

find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_InvReqItem_REC

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/InvReqDesc.sql

都可以找到;是大小写的原因;

find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_InvReqItem_REC

CREATE_ORD_TSF_SQL 编译错误:原因 引用 RIB_InvReqItem_REC 类型的时候多了一个参数, 实际原因是RIB类型不是13.1最新的,解决方法更新到13.1最新的RIB类型定义。

RMSMFM_STORE 编译错误:原因 引用 RIB_StoreDesc_REC 类型的时候多了一个参数,实际原因是RIB类型不是13.1最新的,解决方法更新到13.1最新的RIB类型定义。

find /d01/stage/retail -type f -mount |xargs fgrep -l RMSMFM_STORE

find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_ReportLocRef_REC

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/ReportLocRef.sql

find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_ExtOfReportLocRef_REC

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/ExtOfReportLocRef.sql

find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_ReportLocDesc_REC

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/ReportLocDesc.sql

find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_SupplierColDesc_REC

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/SupplierColDesc.sql

find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_Addr_REC

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/SupplierDesc.sql

find /d01/stage/retail -type f -mount |xargs fgrep -l item_rec

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/obj_item_tab_rec.sql

find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_XItmSupCtyMfrDesc_TBL

find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_DeliverySlotDesc_REC

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/DeliverySlotDesc.sql

find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_DeliverySlotRef_REC

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/DeliverySlotRef.sql

find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_ItemSupCtyMfrDesc_TBL

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/ItemDesc.sql

find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_ItemSupCtyMfrRef_REC

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/ItemSupCtyMfrRef.sql

find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_XItemSupCtyMfrRef_TBL

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/XItemRef.sql

find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_XStoreDesc_REC

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/XStoreDesc.sql

find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_ItemLocVirtRepl_REC

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/ItemLocDesc.sql

find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_LocPODesc_REC

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/LocPODesc.sql

find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_TsfDesc_REC

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/TsfDesc.sql

find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_StoreDesc_REC

/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/StoreDesc.sql

把找到的这些SQL再运行一次,可解决所有的无效对象问题。

上述SQL中,除/ExtOfReportLocRef.sql在/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/InstallAndCompileAllRibOracleObjects.sql中不存在,其他都有,也即Oralcle的安装文件确实漏了一个文件,但其他文件都没有漏;

clip_image001

在我的安装日志中,InstallAndCompileAllRibOracleObjects.sql是现实已经被执行的,但实际上这里面的很多文件未被执行;

下次安装再出现无效对象的话,建议再次运行这个文件即可。

——————————————————————————

总结:无效对象出现的原因都是因为13.1中的package 需要的很多在13.1中新增或者变更的RIB 相关的TYPE定义不一致,原因是13.1中的RIB相关的TYPE定义未执行;但看log是现实已成功执行。所以需要在比较是否安装文件中的安装SQL漏掉了这几个子SQL;

再次执行安装,选择resume方式,安装成功;

su – root

Xhost+

su – oracle

ORACLE_BASE=/d01/app/oracle

ORACLE_HOME=/d01/app/oracle/product/11.1.0/db_1

ORACLE_SID=retl

PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:

export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH

RMS_STAGEDIR=/d01/stage/retail/rms/rms

export RMS_STAGEDIR

NLS_LANG=AMERICAN_AMERICA.UTF8

export NLS_LANG

cd $RMS_STAGEDIR\dbschema

./install.sh

clip_image002

安装rms batch

———————————————————————————————————————————————————————————————

Ig 里面使用oretail用户安装,我这里为简单起见,统一使用oracle用户(前面的application server安装也全部是是使用oracle用户的)

batch属于数据库节点的安装

su – root

Xhost+

su – oracle

cd /d01/stage/retail/rms

unzip rms13batch.zip

ORACLE_BASE=/d01/app/oracle

ORACLE_HOME=/d01/app/oracle/product/11.1.0/db_1

ORACLE_SID=retl

PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:

export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH

RMS_STAGEDIR=/d01/stage/retail/rms/rms

export RMS_STAGEDIR

NLS_LANG=AMERICAN_AMERICA.UTF8

export NLS_LANG

先把数据库启了:

Lsnrctl start

Sqlplus ‘/as sysdba’

SQL>startup

准备安装目标目录:

mkdir /d01/app/retail_apps

mkdir /d01/app/retail_apps/rms

mkdir /d01/app/retail_apps/rms/batch

安装:

cd $RMS_STAGEDIR/batch

./install.sh

缺少demo_rdbms.mk文件,从另一个服务器相同版本的拷贝一个过来。

安装过程中需要输入一些参数,这些参数从rms schema的安装日志中获取: rms-install-dbschema.201012211630.log

/*************

The RMS database schema has been installed successfully.

The ReIM database tables have been installed in the RMS13DEV@retl RMS schema.

This is the database user that should be used by the ReIM application.

The following values should be used in the Invoice Matching application installer:

ReIM/RMS 13 JDBC URL: jdbc:oracle:oci:@retl

ReIM/RMS 13 schema: RMS13DEV

RMS 13 schema owner: RMS13DEV

The Allocation database tables have been installed in the RMS13DEV@retl RMS schema.

The following values should be used in the Allocation application installer:

Alloc/RMS 13 JDBC URL: jdbc:oracle:oci:@retl

Allocation schema: ALLOC13DEV

RMS 13 schema: RMS13DEV

****************/

安装过程比较快,大约7分钟吧,R13比R12的安装还是要方便很多。

clip_image003

clip_image004

安装rms application Server

———————————————————————————————————————————————————————————————

Ig 里面使用oretail用户安装,我这里为简单起见,统一使用oracle用户(前面的application server安装也全部是是使用oracle用户的)

ORACLE_HOME=/d01/app/oracle/OraHome_1

PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:

export ORACLE_HOME PATH

ORACLE_SID=retl

export ORACLE_SID

RMS_STAGEDIR=/d01/stage/retail/rms/rms

export RMS_STAGEDIR

NLS_LANG=AMERICAN_AMERICA.UTF8

export NLS_LANG

cp $ORACLE_HOME/guicommon/tk/admin/Tk2Motif.rgb $ORACLE_HOME/guicommon/tk/admin/Tk2Motif.rgb_ORIG

vi $ORACLE_HOME/guicommon/tk/admin/Tk2Motif.rgb

更改:

Tk2Motif*fontMapCs: iso8859-2=UTF8

mkdir /d01/app/retail_apps/rms/appserver

vi $ORACLE_HOME/network/admin/tnsnames.ora, 添加:

retl =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = retek13.hand-china.com)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = retl)

)

)

安装:

cd /d01/stage/retail/rms

unzip rms13application.zip

备注:rms131apppatch.zip中文件没有rms13application.zip 中的文件新

启动FormServer:

$ORACLE_HOME/opmn/bin/opmnctl startall

$ORACLE_HOME/bin/emctl start iasconsole

http://retek13.hand-china.com:1156

登录后,创建一个oc4j instance :rms_help_instance , 创建后把这个实例启动,该instance 默认的管理员是admin, 密码请改成********1

执行安装。。待续。。。

cd $RMS_STAGEDIR/application

./install.sh

安装

clip_image005

clip_image006

clip_image007

按Exit 后,自动启动OCM的安装:

clip_image008

clip_image009

安装日志文件在:/d01/app/retail_apps/rms/appserver/base/log 目录下

PostInstall 的配置:

1) 备份

cp /d01/app/oracle/OraHome_1/Apache/Apache/conf/httpd.conf /d01/app/oracle/OraHome_1/Apache/Apache/conf/httpd.conf.ori_bak

cp /d01/app/oracle/OraHome_1/forms/java/oracle/forms/registry/Registry.dat /d01/app/oracle/OraHome_1/forms/java/oracle/forms/registry/Registry.dat_ori_bak

cp /d01/app/oracle/OraHome_1/forms/server/formsweb.cfg /d01/app/oracle/OraHome_1/forms/server/formsweb.cfg_ori_bak

cp /d01/app/oracle/OraHome_1/forms/admin/resource/US/fmrweb.res /d01/app/oracle/OraHome_1/forms/admin/resource/US/fmrweb.res_ori_bak

cp /d01/app/oracle/OraHome_1/forms/admin/resource/US/fmrweb_utf8.res /d01/app/oracle/OraHome_1/forms/admin/resource/US/fmrweb_utf8.res_ori_bak

cd /d01/app/retail_apps/rms/appserver/post

cp -R * /d01/app/oracle/OraHome_1

重启服务:

$ORACLE_HOME/bin/emctl stop iasconsole

$ORACLE_HOME/opmn/bin/opmnctl stopall

$ORACLE_HOME/opmn/bin/opmnctl startall

$ORACLE_HOME/bin/emctl start iasconsole

测试 rms application Server

———————————————————————————————————————————————————————————————

根据 Oracle Retail Merchandising Installation Test Cases For Version 13.0 [ID 559560.1] 提供的testcase进行测试

http://retek13.hand-china.com:7777/forms/frmservlet?config=rms13instbase

clip_image010

Orecle Retail(Retek) 13.1 Demo TechBase安装日志

下载Oracle Linux 5.5: 必须从www.oracle.com ->Download -> Server 进入,会引导你进入edelivery (直接进edelivery 是没有linux下载入口的)

下载Database 11g 11.1.0.7 : 先从edelivery下载11.1.0.6 ,再去Metalink下载11.1.0.7的patch.

下载Application Server 10.1.2.0.2 Form and Report Service : 从edelivery的Oracle Development Tools 入口进去找

Application Server 10.1.2.3 : Patchset 5983622

下载BI Publiser Server: 从edelivery 的BI 入口进入下载。

RMS 文档: http://download.oracle.com/docs/cd/E12448_01/rms/docset.html

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

一、DB(11.1.0.7)安装:

Stage: OracleRetailR13.1\Datebase11g_X64

1.1)根据 oracle database 11g quick install guider b32285.pdf 进行db 安装 11.1.0.6

备注:如果安装OEL 5.5 那么rpm只要再额外安装sysstat即可。

安装过程中的密码设置:********

数据库管理访问:https://retek13.hand-china.com:1158/em

1.2)根据README.htm 安装 11g Release 1 (11.1.0.7) Patch Set 1 for Linux x86-64

ORACLE_BASE=/d01/app/oracle

ORACLE_SID=orcl

ORACLE_HOME=/d01/app/oracle/product/11.1.0/db_1

PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:

export export ORACLE_HOME ORACLE_SID PATH

1.3)启停数 据库

停止:

su – oracle

设置 环境变量

停止dbconsole: $ emctl stop dbconsole (可选)

停止 lsn : $ lsnrctl stop [listener_name]

停止实例(web 界面或者 sqlplus)

启动:

su – oracle

设置 环境变量

启动 lsn : $ lsnrctl start [listener_name]

启动dbconsole: $ emctl start dbconsole

启动实例(web 界面或者 sqlplus)

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

二、AS 安装:

Stage: OracleRetailR13.1\OracleAS\

2.1) FormServer & ReportServer 10.1.2.3 安装

2.1.1) 根据 B25260-01 中的AS Install Guider 安装10.1.2.0.2 ( B24489-01.zip)

默认情况下,AS 10gR2 不能在OEL5.x上安装,需要打patch ,才能在此平台上安装,参考[ID 564174.1]

DISPLAY=:0.0

export DISPLAY

./runInstaller PREREQ_CONFIG_LOCATION=/d01/stage/OracleAS/formserver/10.1.2.0.2/prereq -paramFile /d01/stage/OracleAS/formserver/10.1.2.0.2/oraparam.ini

中文环境安装有字体问题,切换到英文环境安装:

Ias_admin password : ********1

Form Server 安装成功后的信息:

see the following URL to access the Oracle Enterprise Manager 10g Application Server Control Console :

http://retek13.hand-china.com:1156

The following information is available in:

/d01/app/oracle/OraHome_1/install/setupinfo.txt

Oracle Application Server 10g 10.1.2.0.2 Usernames and Default password information: Please refer to the Oracle Application Server 10g Administrator Guide for more information.

Install Type: Oracle Application Server Forms and Reports Services

Configured Components: Oracle HTTP Server, OracleAS 10g Containers for J2EE, OracleAS 10g Web Cache, OracleAS 10g Reports Services, OracleAS 10g Forms Services

Use the following URL to access the Oracle HTTP Server and the Welcome Page:

http://retek13.hand-china.com:7777

—————————————–

Use the following URL to access the Oracle Enterprise Manager Application Server Control:

http://retek13.hand-china.com:1156

Instance Name: rmsappsvr.retek13.hand-china.com

User: ias_admin

Psw:********1

2.1.2)安装 p5983622_10123_LINUX.zip 升级到10.1.2.3 (根据patch的Readme)

ORACLE_HOME=/d01/app/oracle/OraHome_1

PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:

export ORACLE_HOME PATH

su – oracle

linux32 bash

ORACLE_HOME=/d01/app/oracle/OraHome_1

export ORACLE_HOME

$ORACLE_HOME/bin/emctl stop iasconsole

$ORACLE_HOME/opmn/bin/opmnctl stopall

安装过程中会报错

查log 有如下错误:

— message in installation logs

/usr/bin/ld: skipping incompatible $ORACLE_HOME/lib//libiplsn.a when searching for -liplsn

/usr/bin/ld: skipping incompatible $ORACLE_HOME/lib/libiplsn.a when searching for -liplsn

/usr/bin/ld: cannot find -liplsn

查Metalink没有解决方法,查google有如下解决方法:

原因:env_forms.mk 中有些调用gcc的地方漏加 -m32 参数。

解决方法:

1) Don’t quit current installation

2) Edit $ORACLE_HOME/forms/lib/env_forms.mk

比如这些地方:(在这里列举的不全,请用 /gcc查找修改每一处)

LINK=$(PURECMDS) gcc $(LDFLAGS) $(COMPSOBJS) -m32

SOSD_FORMS_LDSHARED=/usr/bin/gcc -m32 -o $@ -z text -shared

SOSD_FORMS_LDSHARED_SO=/usr/bin/gcc -m32 -o $@ -z muldefs -shared -$(LDPATHFLAG)$(LIBHOME)

cd $ORACLE_HOME/forms/lib

make -f ins_forms.mk install

3) Retry installation

上述错误解决后,安装就正常了。

2.2) Oracle Application Server Oc4j J2ee&Web Server 10gR3 安装

2.2.1)Oracle Application Server 10.1.3.1 安装(soa_linux_x86_101310_disk1.cpio)

10.1.3.1 在OEL 5.x _X86_64上安装也需要更改预安装检查参数,则可以在metalink上找patch[ID 790943.1】提出在OEL 5.x 上能安装SOA 10.1.3.1 。对应的预安装patch 为:p6339508_101310_Linux-x86-64.zip ,按此note安装。

为了不与以前安装的Application Server端口冲突,更改参数:更改 staticports.ini 中的端口参数(从2000开始)

su – oracle

linux32 bash

cd /d01/stage/OracleAS/10.1.3.1

./runInstaller PREREQ_CONFIG_LOCATION=/d01/stage/OracleAS/10.1.3.1/prereq -paramFile /d01/stage/OracleAS/10.1.3.1/oraparam.ini

linux32 bash

cd /d01/stage/OracleAS/10.1.3.0

./runInstaller PREREQ_CONFIG_LOCATION=/d01/stage/OracleAS/10.1.3.0/prereq -paramFile /d01/stage/OracleAS/10.1.3.0/oraparam.ini

备注: 如果出现错误提示:

Error in writing to directory /tmp/OraInstall2010-08-30_05-03-38PM. Please ensure that this directory is writable and has atleast 60 MB of disk space. Installation cannot continue.

: Success

无法安装。请检查预安装patch是否正确,有的时候用错了,因为param.ini不匹配,导致文件指向错误,会出现这种错误提示。

先创建3个Schema: ORAWSM,ORABPEL,ORAESB 密码都是********;

As Instance name : retekas2

Oc4jadmin 密码: ********1

Default Oc4j instance name :home

安装完成后的信息:

Access the Welcome page:

http://retek13.hand-china.com:2000

Access Oracle Enterprise manager 10g Application Server Contral:

http://retek13.hand-china.com:2000/em

停止服务:

ORACLE_HOME=/d01/app/oracle/product/10.1.3.1/OracleAS_2

PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:

export export ORACLE_HOME PATH

$ORACLE_HOME/opmn/bin/opmnctl stopall

2.2.2)Oracle Application Server 10.1.3.4 Patch 安装(ias_linux_x86_101340.zip)

xhost +

su – oracle

ORACLE_HOME=/d01/app/oracle/product/10.1.3.1/OracleAS_2

PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:

export export ORACLE_HOME ORACLE_SID PATH

cd /d01/stage/OracleAS/Disk1

linux32 bash

./runInstaller

2.3) BI Publisher Server 安装

xhost +

su – oracle

ORACLE_HOME=/d01/app/oracle/product/10.1.3.1/OracleAS_2

PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:

export export ORACLE_HOME ORACLE_SID PATH

cd /d01/stage/OracleAS/RH_Linux/Oracle_Business_Intelligence_Publisher_Standalone

linux32 bash

./runInstaller

选择 Advanced Install type

安装完成后的信息:

The installation of Oracle BI Publisher 10.1.3.4.1 was successful.

These instructions are located in:

/d01/app/oracle/product/10.1.3.1/BIPHome_1/BI_Publisher_readme.txt

At the end of this installation BI Publisher will be started.

You may access it at the following URL:

http://retek13.hand-china.com:2000/xmlpserver

as

Username: Administrator

Password: Administrator

启停服务是受OracleAS_2控制的。

我需要更改ip, 从192.168.15.10 -> 192.168.1.10

IP更改完成,服务器重启后,DB,AS均未受影响。 很简单!

Oracle Retail (Retek)13.1 产品安装顺序

Enterprise Installation Order  (此顺序在Retek各产品的Installtion guide中的最后一章中均有描述)

1. Oracle Retail Merchandising System (RMS), Oracle Retail Trade Management(RTM), Oracle Retail Sales Audit (ReSA) Oracle Retail Service Layer (RSL)

2. Oracle Retail Extract, Transform, Load (RETL)

3. Oracle Retail Active Retail Intelligence (ARI)

4. Oracle Retail Warehouse Management System (RWMS)

5. Oracle Retail Allocation

6. Oracle Retail Invoice Matching (ReIM)

7. Oracle Retail Price Management (RPM)

8. During installation of RPM, you are asked for the RIBforRPM

Note:

provider URL. Since RIB is installed after RPM, make a note of the

URL you enter. If you need to change the RIBforRPM provider URL

after you install RIB, you can do so by editing the jndi_provider.xml

file.

9. Oracle Retail Central Office (ORCO)

10. Oracle Retail Back Office (ORBO) or Back Office with Labels and Tags (ORLAT)

11. Oracle Retail Store Inventory Management (SIM)

12. Oracle Retail Predictive Application Server (RPAS)

13. Oracle Retail Merchandise Financial Planning (MFP)

14. Oracle Retail Size Profile Optimization (SPO)

15. Oracle Retail Assortment Planning (AP)

16. Oracle Retail Item Planning (IP)

17. Oracle Retail Item Planning configured for COE (IPCOE)

18. Oracle Retail Advanced Inventory Planning (AIP)

19. Oracle Retail Integration Bus (RIB)

20. Oracle Retail Point-of-Service (ORPOS)

21. Orace Retail Mobile Point-of-Service (ORMPOS)

22. Oracle Retail Analytics Applications

23. Oracle Retail Data Warehouse (RDW)

24. Oracle Retail Workspace (ORW)

在13.1版本中ReSA,RTM 均包含在RMS中

R12使用的一些有趣故事

R12使用的一些有趣故事:

1) 12.1.1安装后post-install检查时,http及jsp未通过.把应用层服务全部重起一次,再retry 检查可通过.

2) 英文版安装后,准备打中文Patch,在system adminstration 中添加语言授权时,一不小心把中文设置成主语言了(中文语言包的Patch尚未打)
   执行autoconfig时,报2个错:

   a) dbc文件未生成,从而导致无法显示登陆界面, 经log和代码跟踪检查原因就是fnd_app_server_pkg.get_platform_code在执行时会根据上述步骤中的主语言决定查询条件的userenv(‘lang’),而系统中没有针对ZHS的记录,所以就报No data found错误.
     
      解决方法: 先添加一条ZHS的记录,运行autoconfig 让其成功生成dbc文件,再次进入系统,把主语言改回英语,然后再到数据库中把添加的ZHS记录删除,恢复原状.

   b) javakey文件生成失败,原因是 期望的applprod.txt格式不符合要求,这个错误比较少见,google及metalink 均无类似参考.
      这个错误也导致adadmin运行失败.

      解决方法:把applprod.tmp 覆盖 applprod.txt

3) adadmin 运行报 动态库缺失.

      解决方法:在$INST_TOP/appl/admin/SID_HOST.xml 中增加 LD_LIBRARY_PATH 的路径/d01/oracle/VIS/apps/tech_st/10.1.3/lib,然后autoconfig以下,再把$APPL_TOP/APPSSID_HOSTNAME.env source一下即可.

4) 打中文语言包Patch :

     4.1 打中文语言包Patch时发现, 共30000多任务中前面8000个任务很快, 基本上1.5小时就完成了,但后来就慢了,大概每小时能完成1000个任务, 这些任务都是XLIFFImporter.class 任务.  查Iostat , vmstat ,top 发现CPU, 内存,硬盘IO 在xliffimporter.class执行时都是很空闲的,完全没有被利用起来, 运行了30多个小时才搞完, 太慢了,感觉是Oracle的一个bug   . google搜索 XLIFFImporter.class + long Time 得到Oracle Metalink Document id : [ID 839978.1] 讲到了原因, 说是因为 java任务在获取数据库连接时花费了太长时间,已经提供了一个1.5M 的Patch来解决 . 

     在周五晚上, 准备重新打中文语言patch, 为了加快速度,这次把[ID 839978.1]中讲到的patch先给打了, 然后再给虚拟机加强配置: cpu 由原先的4核(逻辑cpu) 增加到8核(逻辑); 内训由原来的4G增加到6G,结果整个patching过程只耗时 2个多小时.  差别真是太大了.

     请看证据:

[applmgr@syfdemo 6678700_ZHS]$ more /d01/oracle/VIS/apps/apps_st/appl/admin/VIS/log/adpatch.log

************* Start of AutoPatch session *************
AutoPatch version: 12.0.0
AutoPatch started at: Fri Aug 13 2010 21:24:34

APPL_TOP is set to /d01/oracle/VIS/apps/apps_st/appl

NLS_LANG value from the environment is    : American_America.AL32UTF8
NLS_LANG value for this AD utility run is : AMERICAN_AMERICA.AL32UTF8

You can be notified by email if a failure occurs.
Do you wish to activate this feature [No] ? No

……
……
STOP_TASK: [AutoPatch post-driver logic] [] [Fri Aug 13 2010 23:25:52]
Log and Info File sync point:
  Fri Aug 13 2010 23:25:52
  AutoPatch is exiting successfully.

sqlplus -s APPS/***** @/d01/oracle/VIS/apps/apps_st/appl/ad/12.0.0/sql/adtimrpt.sql 544216 adt544216

……

AutoPatch is complete.

AutoPatch may have written informational messages to the file
/d01/oracle/VIS/apps/apps_st/appl/admin/VIS/log/adpatch.lgi

Errors and warnings are listed in the log file
/d01/oracle/VIS/apps/apps_st/appl/admin/VIS/log/adpatch.log

and in other log files in the same directory.

     总结:  1  要加快语言包的patch , [ID 839978.1]中提到的预patch绝对是非常重要的.

                 2 cpu强劲在打中文语言patch时发挥得作用还是应该肯定的, 但非关键, IO 是主要瓶颈. 内存大很关键,虚拟机所在硬盘使用sata 接口的7200转硬盘(装载光驱位或者esata口) 

     

      4.2  Demo环境打中文语言包的时候在xliffimporter.class执行阶段剩下最后30多个任务的时候,有个worker失败,无法继续,使用adctrl重启垓worker无效, 但可使用adctrl的隐藏选项8略过此失败的worker. 可使中文语言的patch继续.

5) 服务器数据库,APP 脚本启动都正常,但访问应用服务器时,Apache有响应,但随即出现http 500错误,无法继续访问. ( 也许是服务器IP地址变更后引起的)

     解决方法: 关闭应用服务器,执行autoconfig 后再次启动应用服务器.

招聘 oracle retail 开发人员

Consultant / Senior Developer with Oracle Retail System experience. This candidate will also include production support, on call batch support, bug fixing, enhancement and customization for projects.
Skills Necessary for this job include –
* Oracle Retail (RMS, SIM, ReIM, RPM, RDW, RESA, ORS-Oracle Retail Scheduling, RIB) with UC4
* Oracle Development Skills – Forms and Reports
* Programming languages like Pro*C, PL/SQL, SQL
* UNIX/LINUX Shell Scripting
* Oracle 9i/10g/11g experience
* Retail Industry experience
* 5 + Years of Design, Coding, Testing, Installing and Maintaining complex software programs
有意者可以加我msn:whkl008@live.cn或发简历到邮箱 sunnyzhang1984@163.com