首页 > HZERO安装部署 > HZERO PaaS平台组装笔记(六)前端应用服务部署

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

2025年11月5日

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

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

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

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

六、前端应用部署

直接把编译完成的前端工程dist.zip 放到front目录,解压缩;

配置ngnix:

1、修改默认站点配置文件:

cd /etc/nginx/sites-available
cp default default.bak.20250702
nano default

内容:

# Default server configuration

#

server {

    listen 80 default_server;

    listen [::]:80 default_server;

    root /d02/hzero/front/dist;

    # Add index.php to the list if you are using PHP

    index index.html index.htm index.nginx-debian.html;

    server_name _;

    location ~ \/[a-z.0-9]+\.(js|css|gif|png|jpg)$ {

        expires 7d;

    }

    location / {

        root /d02/hzero/front/dist;  

        index index.html index.htm;

        try_files $uri /index.html;

    }

    error_page 500 502 503 504 /50x.html;

        location = /50x.html {

        root /d02/hzero/front/dist;

    }

}

2、修改主配置文件:

cd /etc/nginx/

nano nginx.conf

把默认的server 部分配置注释掉:避免跟默认站点配置default中的Server配置冲突,添加主配置中没有的HTTP参数

# 仅添加主配置中没有的HTTP参数
log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for”‘;
access_log /var/log/nginx/access.log main;

gzip_buffers 32 4k;
gzip_comp_level 6;
gzip_min_length 200;
gzip_types text/css text/xml application/javascript;

# server {
#        listen       80;
#        # server_name  localhost;
#        location / {
#          root /hzero/hzero-front/html;
#          try_files $uri $uri/ /index.html;
#        }
#  }

Nginx默认用户是www-data,要使得这个用户对root 的目录有权限

sudo chown -R www-data:www-data /d02/hzero/front/dist

sudo chmod -R 755 /d02/hzero/front/dist

改完,重启Nginx

sudo systemctl restart nginx

拷贝过来的前端工程里面有很多占位符号需要替换,有个脚本可以替换

#!/bin/bash

# 获取时间戳

TIME_ID=$(date +%s)

# 定义替换函数

replace_in_files() {

  local pattern=$1

  local replacement=$2

  local ext=$3

  find dist -type f -name “*.$ext” | while IFS= read -r file; do

    sed -i “s|$pattern|$replacement|g” “$file”

  done

}

# 开始替换

replace_in_files “BUILD_BUILD_ENV_ID” “$TIME_ID” “js”

replace_in_files “BUILD_BUILD_ENV_ID” “$TIME_ID” “html”

replace_in_files “BUILD_BUILD_ENV_ID” “$TIME_ID” “json”

replace_in_files “BUILD_BASE_PATH” “/” “js”

replace_in_files “/BUILD_PUBLIC_URL/” “/” “js”

replace_in_files “/BUILD_PUBLIC_URL/” “/” “css”

replace_in_files “/BUILD_PUBLIC_URL/” “/” “html”

replace_in_files “/BUILD_PUBLIC_URL/” “/” “json”

replace_in_files “BUILD_API_HOST” “http://dev.hzero.org:8080” “js”

replace_in_files “BUILD_API_HOST” “http://dev.hzero.org:8080” “html”

replace_in_files “BUILD_AIGC_STREAM_PRINT_FLAG” “false” “js”

replace_in_files “BUILD_AIGC_STREAM_PRINT_STEP” “3” “js”

replace_in_files “BUILD_AIGC_STORAGE_CODE” “KMS” “js”

replace_in_files “BUILD_CLIENT_ID” “hzero-front-uat” “js”

replace_in_files “BUILD_WEBSOCKET_HOST” “http://dev.hzero.org:8080/hpfm/sock-js” “js”

replace_in_files “BUILD_CUSTOMIZE_ICON_NAME” “customize-icon” “js”

replace_in_files “BUILD_MULTIPLE_SKIN_ENABLE” “true” “js”

replace_in_files “BUILD_TOP_MENU_UNION_LABEL” “true” “js”

replace_in_files “BUILD_TOP_MENU_LABELS” “DEFAULT” “js”

replace_in_files “BUILD_SVG_ICON_ENABLE” “true” “js”

这个脚本是根据产品组给的脚本改的,原来哪个脚本估计是centOS上的,直接在ubuntu上运行没起作用,让豆包和元宝改得都有问题,这是让chatgpt改的,可以成功运行。

改了之后,在浏览器访问http://dev.hzero.com.cn

在更多工具/开发人员工具/应用程序,把本地存储、会话存储、cookie都清空

为了使用无痕模式,需要启用https访问:

在ngnix的default站点配置里面启用SSL

# SSL configuration

    #

    listen 443 ssl default_server;

    listen [::]:443 ssl default_server;

    #

    # Note: You should disable gzip for SSL traffic.

    # See: https://bugs.debian.org/773332

    #

    # Read up on ssl_ciphers to ensure a secure configuration.

    # See: https://bugs.debian.org/765782

    #

    # Self signed certs generated by the ssl-cert package

    # Don’t use them in a production server!

    #

    include snippets/snakeoil.conf;

snakeoil.conf 里面是引用了证书和Key,默认不存在,可以安装证书生成工具来生成:

# 安装证书生成工具

root@desktop-jacksen:/d02/hzero/project/ps-license# sudo apt-get install ssl-cert  

# 生成默认自签名证书

root@desktop-jacksen:/etc/ssl# sudo make-ssl-cert generate-default-snakeoil root@desktop-jacksen:/etc/ssl# ll root@desktop-jacksen:/etc/ssl/certs# ls -l /etc/ssl/certs/ssl-cert-snakeoil.pem ls -l /etc/ssl/private/ssl-cert-snakeoil.key -rw-r–r– 1 root root 1119 Jul 3 16:50 /etc/ssl/certs/ssl-cert-snakeoil.pem -rw-r—– 1 root ssl-cert 1704 Jul 3 16:50 /etc/ssl/private/ssl-cert-snakeoil.key

.pem文件就是证书文件,可以拷贝改下扩展名成为.cer文件导入浏览器,让浏览器信任站点(如果不进行信任认证,浏览器会拒绝对该站点的https访问)

root@desktop-jacksen:/etc/ssl/certs# sudo cp /etc/ssl/certs/ssl-cert-snakeoil.pem /d02/hzero/ssl-cert-snakeoil-hzero.cer

在 Chrome 和 Edge 浏览器中手动将自签名证书添加到信任列表的方法如下:

Chrome 浏览器6

  1. 首先获取自签名证书文件,确保其为.cer格式。如果没有,可以在含有该证书的页面上,点击地址栏左侧的锁形图标,选择 “证书信息”,在 “详细信息” 选项卡中点击 “复制到文件”,按照证书导出向导,将其保存为 DER 编码的二进制 X.509(.CER)格式。
  2. 打开 Chrome 浏览器,进入设置页面,在搜索栏中输入 “证书”,找到 “安全性” 中的 “管理证书” 选项并点击。
  3. 在弹出的 “证书” 窗口中,选择 “受信任的根证书颁发机构” 标签。
  4. 点击 “导入” 按钮,启动证书导入向导,点击 “下一步”。
  5. 选择之前保存好的自签名证书文件,然后点击 “下一步”。
  6. 确认将证书存储在 “受信任的根证书颁发机构”,点击 “下一步”,最后点击 “完成”。
  • 重启 Chrome 浏览器,此时自签名证书已被添加到信任列表中,访问相关网站时将不再提示证书不信任错误。

Edge 浏览器1

  1. 同样先获取自签名证书的.cer文件,方法可参考 Chrome 浏览器相关步骤。
  2. 点击 Edge 浏览器右上角的三个点图标,选择 “设置”。
  3. 进入设置页面后,点击左侧菜单栏中的 “隐私、搜索和服务”,然后在右侧找到 “安全性”,打开 “证书管理”。
  4. 在 “证书” 窗口中,选择 “受信任的证书颁发机构”,点击 “导入”。
  5. 在证书导入向导页面点击 “下一步”,选择已准备好的证书文件,再点击 “下一步”。
  6. 保持证书存储区域为默认的 “受信任的根证书颁发机构”,点击 “下一步”,最后点击 “完成”。
  7. 重启 Edge 浏览器,即可使证书生效,浏览器将信任该自签名证书。

访问:https://dev.hzero.com.cn,报了下面的错误,看起来还有BUILD_BASE_PATH 没有被替换成功。

看了下,原来的脚本只是替换了所有js文件中的改占位符,需要把html中的也替换以下,脚本另外单独执行针对该占位符,替换html的动作。

BUILD_CLIENT_ID 替换不彻底,在run-front.sh中只替换了js ,没有替换html

单独执行,替换html

直接http://dev.hzero.com.cn 访问,会自动重定向到网关调用oauth 服务的登录界面:

登录后出错:

这是个重定向错误,实际是通过认证已经获得了Token,因为你直接用重定向的地址访问是OK的:

我们来分析下原因

在网关服务的yml配置中把这个静态资源加入的skippath之后这个错误没有了,不过他依然不会自动重定向到目标地址。

直接打开http://dev.hzero.com.cn , 刷新页面,检查前端错误,发现有一系列api调用失败,其中有4条是跟hmsg有关的,用微软的copliet分析,并查网关的后台日志,抛给腾讯元宝分析后给的提议是:

查网关的yml配置,发现这个配置是有的,不过目录层级错了; – id 跟routes在同一层级了,应该- id 在routes的下一层,修改后重启。

重启问题依旧

后来又查资料说,可能网关取了自定义的动态路由数据,这个层级高于网关yml中的静态路由设置,就是下面这条:

于是就把它设置成False , 并且把其他几个合并的服务的路由的开头路径也在路由配置中执行hzero-lite服务;

重启网关后,发现问题更大了,主菜单都显示不了;

大模型说可能是缓存没更新,于是就把redis缓存全部删除,(重启Lite服务可以重建这些缓存)

删除缓存,启lite服务后,看到hadm下的路由规则全部执行hzero-lite 了,可是网关日志中看到:对应 /hmsg/**的请求的permission检查还是去数据库的iam_permission中查询服务名=hzero-message 的记录,

可由于服务做了合并,messagei相关的服务路由的服务名在数据库中都变成hzero-lite ,自然permission检查就失败了;

所以对于那些报错的关键问题是要让网关在permission和路由转发的时候都使用hzero-lite作为新的服务名,为此我们在网关中做了各种映射配置,但都没起作用,因为 动态路由规则优先,所以在配置中关闭了动态路由规则获取,但也报错,而且看hzero-admin的日志,对于hmsg/**相关的服务,它就是要去找hzero-message ,怎么改配置,清缓存,更新缓存都无济于事。

 

 

关于作者:

昵称:Jack.shang
档案信息:jack.shang 程序员->项目经理->技术总监->项目总监->部门总监->事业部总经理->子公司总经理->集团产品运营支持
联系方式:你可以通过syfvb@hotmail.com联系作者
点击查看发表过的所有文章...
本文永久链接: http://blog.retailsolution.cn/archives/4479

 

 

对本文的评价:

 

 

分类: HZERO安装部署 标签:
本文的评论功能被关闭了.