# Linux系统环境

主要说明如何在Linux操作系统上安装部署,分为单机环境和集群环境,默认的安装目录为:/hos/app

以下以CentOS Linux release 7.9.2009版本系统为例的操作流程,其他系统根据实际版本不同可能有所区别。

查看系统版本命令:

cat /etc/os-release

cat /etc/redhat-release

# 1 数据库

# 1.1 连接数据库

选择部署openGauss

数据库初始化可以使用软件包中的/hos-app/tools/dbeaver.zip,直接解压使用,该软件支持管理mysql和openGauss。

sql-001.png

创建连接,填写默认数据库“postgres”

sql-002.png

点击测试连接,如提示没有驱动,可下载或者配置驱动,如果有外网可直接下载,如果只有内网,可根据下列操作配置驱动。

sql-005.png

删除全部的在线驱动

sql-006.png

添加文件夹和文件,驱动文件在 \dbeaver\qd\下

sql-007.png

sql-008.png

点击确定后,再点击测试连接,即可成功。

创建成功后如下:

sql-003.png

选择部署mysql

数据库初始化可以使用软件包中的/hos-app/tools/HeidiSQL_12.5_64bit_Portable.7z,直接解压使用,该软件支持管理mysql。

# 1.2 创建数据库

选择部署openGauss

执行sql语句创建数据库

注意

  • 必须使用语句创建数据库,如使用界面创建,会使用默认PG兼容性,会导致sql导入失败
-- 创建数据库名为hos_open_portal,兼容性为A(oracle),编码格式为UTF8格式的数据库
CREATE DATABASE hos_open_portal DBCOMPATIBILITY 'A' ENCODING 'UTF8' template = template0;

sql-009.png

执行完后,刷新数据库即可看到新创建的hos_open_portal数据库。

sql-010.png

数据库创建好之后,导入数据库脚本hos_open_portal_2.6.1.0_wrought_opengauss_xxx.sql

选择部署mysql

新建数据库:hos_open_portal,字符集:utf8mb4,排序规则:utf8mb4_0900_ai_ci

数据库创建好之后,导入数据库脚本hos_open_portal_2.6.1.0_wrought_mysql_xxx.sql

如数据库名称发生变化,需要改动本文门户系统后端配置里的配置。

# 1.3 执行应用初始化sql

根据端口规划的应用地址,替换应用初始化sql中的“一体化前端”,并在数据库中执行。

提示

  • 所有的访问地址都需要带http或https,例如:rear_server_url = 'http://192.168.1.1:8001/api'。
  • 如果是集群部署,替换的地址使用负载地址。
  • 如果该地址替换失误,将导致无法登录应用
该初始化sql适用于2.6.10之后的版本,如果要部署2.6.10之前的版本请联系HOS开发人员。
-- 1.更新应用表的服务地址字段
UPDATE hos_system_app SET access_url = '一体化前端ip:port', rear_server_url = '一体化前端ip:port/api' WHERE id = '1009852153d621a680d5886cde2311f9';

-- 2.更新应用认证管理表的回调地址字段
UPDATE hos_iam_auth_oauth2 SET redirect_urls = '一体化前端ip:port/api/security/login/oauth2/code/messaging-client-oidc' WHERE id = 'bb764cfa411dd87c3e902c1bae15de94';

-- 3.更新openapi接口信息表的url字段
UPDATE hos_sys_openapi_info SET url = '一体化前端ip:port/api/openApi/uum/account/pull-account' WHERE id = '2e5875a488431eb03578e4fe2c111111';
UPDATE hos_sys_openapi_info SET url = '一体化前端ip:port/api/openApi/uum/role/pullRole' WHERE id = '2e5875a488431eb03578e4fe2c222222';
UPDATE hos_sys_openapi_info SET url = '一体化前端ip:port/api/openApi/uum/postRole/pullPostRole' WHERE id = '2e5875a488431eb03578e4fe2c333333';
UPDATE hos_sys_openapi_info SET url = '一体化前端ip:port/api/openApi/uum/resources/pull' WHERE id = '2e5875a488431eb03578e4fe2c444444';
UPDATE hos_sys_openapi_info SET url = '一体化前端ip:port/api/openApi/uum/scope-data/pull' WHERE id = '2e5875a488431eb03578e4fe2c555555';
UPDATE hos_sys_openapi_info SET url = '一体化前端ip:port/api/openApi/uum/interface/pull' WHERE id = '2e5875a488431eb03578e4fe2c666666';
UPDATE hos_sys_openapi_info SET url = '一体化前端ip:port/api/openApi/uum/page-preset/pull' WHERE id = '2e5875a488431eb03578e4fe2c777777';
UPDATE hos_sys_openapi_info SET url = '一体化前端ip:port/api/openApi/uum/perms/pull' WHERE id = '2e5875a488431eb03578e4fe2c888888';

-- 4.更新系统配置的ip端口
UPDATE hos_iam_system_config SET value = '一体化前端ip:port/api/openApi/auth/license/state' WHERE id = '9fa39d98a5a11fcf5c19e90c8f1174cb';
UPDATE hos_iam_system_config SET value = '一体化前端ip:port/lisenceInstall' WHERE id = '222fab9f1c83f32e8dd92ddb09630d2f';

# 1.4 数据库备份

# 1.4.1 mysql数据库备份

# 1.4.1.1 修改备份脚本

数据库备份脚本在hos-app安装包tools目录中,mysql-backup.sh。

#!/bin/bash

#设置mysql的登录地址、用户名和密码
mysql_host="172.10.10.1"
mysql_port="3306"
mysql_user="root"
mysql_password="password"

#备份文件保存路径
backup_dir=/hos/backup/mysql

#备份子目录,按照日期时间命名
backup_time=`date +%Y%m%d%H%M`

#不备份的库列表
db_exclude="Database|information_schema|mysql|performance_schema|sys"

#是否删除过期数据、过期时间(天)
expire_backup_delete="ON"
expire_days=3

#创建备份目录
if [ ! -d "$backup_dir/$backup_time" ]; then
  mkdir -p "$backup_dir/$backup_time"
fi

# get db list
dbs=`mysql -e "show databases;" -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password| grep -Ev "$db_exclude"`
echo "db list:$dbs"

echo "===============backup start================"
for db in $dbs
do
  echo $db
  mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -B $db > $backup_dir/$backup_time/$db.sql
done
echo "===============backup end================"

#删除过期数据
if [ "$expire_backup_delete" == "ON" -a  "$backup_dir" != "" ];then
        `find $backup_dir/ -type d -mtime +$expire_days | xargs rm -rf`
        echo "Expired backup data delete complete!"
fi

其中,需要修改的内容:

  • mysql的地址、账号密码
  • 备份文件保存路径:backup_dir
  • 备份文件保存时间:expire_days
# 1.4.1.2 创建备份目录并拷贝脚本文件:

在数据库服务器创建备份目录,如果是集群部署,最好在两个数据库服务器都进行创建并备份。

#创建目录
mkdir -p /hos/backup/mysql

#将修改后的脚本拷贝到该目录
cp mysql-backup.sh /hos/backup/mysql/

#添加执行权限
chmod +x /hos/backup/mysql/mysql-backup.sh
# 1.4.1.3 测试备份
sh /hos/backup/mysql/mysql-backup.sh

查看备份后的目录和文件,/hos/backup/mysql目录中会生成日期命名的备份目录,结构类似如下:

img_3.png

# 1.4.1.4 配置linux系统设置定时任务
crontab -e

# 增加一行,其中:
# 00 03 * * *为每日凌晨3点执行备份
# /hos/backup/mysql/mysql-backup.sh是备份脚本路径;
# /hos/backup/mysql/mysql-backup.log是脚本执行日志;
00 03 * * * sh /hos/backup/mysql/mysql-backup.sh >> /hos/backup/mysql/mysql-backup.log 2>&1

# :wq保存即可

# 2 应用安装

提示

  • 以下流程适用于单机部署和集群部署。
  • 集群部署时,后端服务需要在所有后端服务器部署,前端服务需要在所有前端服务器部署。
  • 必须先部署统一认证应用后端,并保证统一认证后端正常启动,才能部署HOS门户系统,否则将导致HOS门户系统部署报错。

下载安装包并使用xftp等工具上传至服务器并解压,建议安装目录:/hos/app/。

# 2.1 ssl证书导入

目前公司要求所有项目的部署环境必须使用https协议,所以需要提前准备ssl证书。

  • 客户(医院)如果提供ssl证书,那我们直接使用即可。
  • 如果想使用CA机构颁发SSL证书,请参考具体参考:CA机构颁发SSL证书
  • 客户(医院)如果未提供ssl证书,我们可以准备自签名证书

# 2.1.1 自签名SSL证书

内网域名或者使用IP地址的场景,使用自签名ssl证书。证书制作流程如下:

证书制作工具在hos-app安装包的tools目录下:ssl文件夹,上传到后端服务器/hos/app/目录下,如果是集群部署,只上传其中一个服务器即可,授权:

cd ssl
chmod +x ssl.sh

ssl.sh是制作证书的脚本,证书有效期默认20年,可以根据需要修改脚本内的-days参数:

openssl x509 -req \
    -days 7300 \
    -in $name.csr \
    -signkey $name.key \
    -out $name.crt \
    -extensions req_ext \
    -extfile ssl.conf

执行ssl.sh,根据提示输入以下信息,其他选项保持默认即可:

  • IP地址:客户提供的域名或者负载均衡服务器IP地址;
  • 证书名称:自定义,可以是应用系统的英文名称或缩写。

注意

关于需要输入的IP地址说明:

  • 如果客户(医院)提供了域名,则这里输入域名即可;
  • 如果为单机环境,那么这里输入前端服务器IP地址;
  • 如果为集群环境,这里输入前端服务器虚拟VIP地址,或者独立的负载均衡设备地址。
  • HOS门户系统、统一认证、统一用户、minIO地址IP是一样的,所以只需要一个ssl证书即可。

img.png

执行完成后,所有证书文件会保存到当前目录下以证书名称命名的目录内。

hos.crt
hos.csr
hos.der
hos.key
hos.pem
hos.pfx
ssl.conf

其中,xxx.crt、xxx.key是配置https需要用到的证书文件。

将整个ssl文件夹下载到本地,后续部署应用需要用到。

# 2.1.2 前端服务器ssl文件上传

因为nginx配置文件中配置ssl证书,所以前端服务器需要上传ssl证书文件,如不上传,刷新nginx配置文件会报错,如果是集群部署,所有的前端服务器都需要上传ssl证书文件。

进入前端服务器,创建目录。

#创建目录
mkdir -p /hos/app

通过xftp工具将本文2.1.1中下载到本地的ssl文件夹全部上传到/hos/app/目录下,如没有ssl证书,请参考本文前一步骤 【2.1.1 自签名SSL证书】。

上传后的前端服务器目录参考目录规划

# 2.1.3 后端服务器jre导入证书

后端java服务在访问不受信任的HTTPS网站(如自签名ssl证书)时,可能会报错如下:

PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

这是由于JVM (Java Virtual Machine) 默认信任证书不包含该目标网站的SSL证书,导致无法建立有效的信任链。

解决方案有多个,由于我们是内网,而且是是HOS内部调用,所以直接将我们生成的HOS自制证书导入jre即可解决该问题,如果是集群部署,所有的后端服务器都需要导入ssl证书。

1.进入后端服务器,创建目录

#创建目录
mkdir -p /hos/app

2.上传HOS证书文件到后端服务器

通过xftp工具将本文2.1.1中下载到本地的ssl文件夹全部上传到/hos/app目录下,如没有ssl证书,请参考本文前一步骤 【2.1.1 自签名SSL证书】。

3.后端服务器导入证书

# 在我们的后端服务器上执行,注意根据实际修改其中部分参数:
/hos/app/jdk/jre/bin/keytool -import -trustcacerts -storepass changeit -alias hos -file /hos/app/ssl/hos/hos.crt -keystore /hos/app/jdk/jre/lib/security/cacerts

其中需要修改的各项参数说明:

  • /hos/app/jdk/jre/bin/keytool:JDK提供的证书工具,修改为实际的jdk路径;
  • -alias hos:自定义证书名称,可以随意指定,不能和之前导入的证书名称重复;
  • -file /hos/app/ssl/hos/hos.crt:ssl证书中的crt或者cer文件路径;
  • -keystore /hos/app/jdk/jre/lib/security/cacerts:JVM所有受信任证书的保存文件,修改为实际的jdk路径

执行后会提示是否确认导入,输入y(有的系统可能需要输入yes)即可:

img.png

# 2.2 统一认证后端服务

创建后端日志目录

mkdir -p /hos/logs/supervisor

确认后端服务配置文件hos-authserver/config/application-prod.yml已经修改,如未修改,参考统一认证后端配置

通过xftp工具将软件包中的 /程序版本/2.5.1中的hos-authserver文件夹上传到后端服务器/hos/app/目录下,如是集群部署,所有后端服务器都需要上传。

上传后具体目录情况,请参考本文中的目录规划

进入统一认证文件目录:hos-authserver/,将应用启动文件拷贝到supervisor配置目录:

cd /hos/app/hos-authserver
cp hos-authserver.ini /etc/supervisord.d/

#启动服务:
supervisorctl reread
supervisorctl update

#查看状态:
supervisorctl status

#重启方式:
supervisorctl restart hos-authserver

后端服务启动验证:

浏览器页面输入:http://后端服务器ip:统一认证后端端口/api/doc.html

提示

  • 是http,不是https,直接访问后端服务器ip,不要访问负载地址
  • 端口使用统一认证后端端口,即后端配置文件中配置的端口,不要使用前端端口
  • 如果是集群部署,两个后端服务器需要分别验证,必须都能正常显示,才能进行下一步步骤

验证负载地址 如果是集群部署,还需要验证负载地址是否成功: 浏览器页面输入:https://负载ip:统一认证前端端口/api/doc.html

提示

  • 是https,不是http,访问负载地址
  • 端口使用统一认证前端端口,会通过nginx代理到后端端口

如统一认证安装成功,将显示如下界面:

linux-1.png

如未成功显示,请检查统一认证后端配置是否配置正确,数据库是否能正常访问。

# 2.3 前端及负载均衡服务

# 2.3.1 上传前端文件到前端服务器

通过xftp工具将软件包中的 /程序版本/2.6.10/中的hos-open-portal文件夹、和hos-authserver文件夹上传到前端服务器/hos/app/目录下,如是集群部署,所有前端服务器都需要上传。

提示

  • 上传文件夹只是为了部署方便,实际前端服务器只使用三个文件夹中的 .tgz文件。

上传后具体目录情况,请参考本文中的目录规划

进入统一认证文件目录:hos-authserver/,解压前端文件:

cd /hos/app/hos-authserver

# 解压前端应用压缩包
tar -xzvf hos-authserver-web.tgz

进入HOS门户系统文件目录:hos-open-portal/,解压前端文件:

cd /hos/app/hos-open-portal

# 解压前端应用压缩包
tar -xzvf hos-open-portal-web.tgz

# 2.3.2 负载nginx配置与启动

确认nginx配置文件/hos-app/nginx/hos-app.conf已经修改,如未修改,参考nginx配置文件

将软件包的 /hos-app/nginx/hos-app.conf 文件上传到前端服务器中的 /etc/nginx下,如果是集群部署,所有的前端服务器都需要上传

前端服务的nginx配置文件为nginx/hos-app.conf,将其拷贝到nginx配置目录即可:

# 备份nginx默认配置文件(初次使用时操作)
mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak

# 加载配置
nginx -s reload

# 2.4 门户系统后端服务

如果没创建日志存放目录,创建目录

mkdir -p /hos/logs/supervisor

确认后端服务配置文件hos-open-portal/config/application-prod.yml已经修改,如未修改,参考门户系统后端配置

通过xftp工具将软件包中的 /程序版本/2.6.10/hos-open-portal中的文件上传到后端服务器/hos/app/目录下,如是集群部署,所有后端服务器都需要上传。

上传后具体目录情况,请参考本文中的目录规划

进入门户系统文件目录:hos-open-portal/,将启动文件拷贝到supervisor配置目录:

cd /hos/app/hos-open-portal
cp hos-open-portal.ini /etc/supervisord.d/

启动服务:
supervisorctl reread
supervisorctl update

查看状态:
supervisorctl status

重启方式:
supervisorctl restart hos-open-portal

注意

  • HOS门户后端启动前统一认证后端、统一认证前端和负载需要部署好,因为门户后端启动时,需要验证统一认证地址。

后端服务启动验证:

浏览器页面输入:http://后端服务器ip:HOS门户系统后端端口/api/doc.html

提示

  • 是http,不是https,直接访问后端服务器ip,不要访问负载地址
  • 端口使用HOS门户系统后端端口,即后端配置文件中配置的端口,不要使用前端端口
  • 如果是集群部署,两个后端服务器需要分别验证

如HOS门户系统安装成功,将显示如下界面:

linux-1.png

# 2.5 任务调度平台

确认后端服务配置文件hos-framework-job-admin/config/application-prod.yml已经修改,如未修改,参考任务平台配置

通过xftp工具将软件包中的 /hos-app/hos-framework-job-admin 中的文件上传到后端服务器/hos/app/目录下,如是集群部署,所有后端服务器都需要上传。

上传后具体目录情况,请参考本文中的目录规划

进入调度平台文件目录:hos-framework-job-admin/,将应用启动文件拷贝到supervisor配置目录:

cd /hos/app/hos-framework-job-admin
cp hos-framework-job-admin.ini /etc/supervisord.d/


#启动服务:
supervisorctl reread
supervisorctl update

#查看状态:
supervisorctl status

#重启方式:
supervisorctl restart hos-framework-job-admin

# 2.6 应用安装验证

分别访问统一认证前端访问地址和HOS门户系统的前端访问地址,如果能出现登录页面,而且没有报错,即说明HOS前后端应用都安装成功。

hos-login.png