HZERO PaaS平台组装笔记(六)前端应用服务部署
本文是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
- 首先获取自签名证书文件,确保其为.cer格式。如果没有,可以在含有该证书的页面上,点击地址栏左侧的锁形图标,选择 “证书信息”,在 “详细信息” 选项卡中点击 “复制到文件”,按照证书导出向导,将其保存为 DER 编码的二进制 X.509(.CER)格式。
- 打开 Chrome 浏览器,进入设置页面,在搜索栏中输入 “证书”,找到 “安全性” 中的 “管理证书” 选项并点击。
- 在弹出的 “证书” 窗口中,选择 “受信任的根证书颁发机构” 标签。
- 点击 “导入” 按钮,启动证书导入向导,点击 “下一步”。
- 选择之前保存好的自签名证书文件,然后点击 “下一步”。
- 确认将证书存储在 “受信任的根证书颁发机构”,点击 “下一步”,最后点击 “完成”。
- 重启 Chrome 浏览器,此时自签名证书已被添加到信任列表中,访问相关网站时将不再提示证书不信任错误。
Edge 浏览器1
- 同样先获取自签名证书的.cer文件,方法可参考 Chrome 浏览器相关步骤。
- 点击 Edge 浏览器右上角的三个点图标,选择 “设置”。
- 进入设置页面后,点击左侧菜单栏中的 “隐私、搜索和服务”,然后在右侧找到 “安全性”,打开 “证书管理”。
- 在 “证书” 窗口中,选择 “受信任的证书颁发机构”,点击 “导入”。
- 在证书导入向导页面点击 “下一步”,选择已准备好的证书文件,再点击 “下一步”。
- 保持证书存储区域为默认的 “受信任的根证书颁发机构”,点击 “下一步”,最后点击 “完成”。
- 重启 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联系作者 点击查看Jack.shang发表过的所有文章... 本文永久链接: http://blog.retailsolution.cn/archives/4479 |
对本文的评价:
