# Linux系统应用部署

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

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

查看系统版本命令:

cat /etc/os-release

cat /etc/redhat-release

# 1 数据库初始化

数据库初始化可以使用软件包中的/hos-app/tools/HeidiSQL_12.5_64bit_Portable.7z软件,直接解压,免安装使用。

# 1.1 HOS门户系统

新建数据库:hos_open_portal,字符集:utf8mb4,排序规则:utf8mb4_0900_ai_ci,然后导入hos_portal_base_orgdict_all.sql

如数据库名称发生变化,需要改动后端镜像。

# 1.2 执行应用初始化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.3 HOS任务调度平台

新建数据库:hos_xxl_job,字符集:utf8mb4,排序规则:utf8mb4_0900_ai_ci,导入sql:init_xxl_job.sql

如数据库名称发生变化,需要改动后端镜像。

# 1.4 数据库备份

# 1.4.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.2 创建备份目录并拷贝脚本文件:

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

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

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

#添加执行权限
chmod +x /hos/backup/mysql/mysql-backup.sh

# 1.4.3 测试备份

sh /hos/backup/mysql/mysql-backup.sh

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

img_3.png

# 1.4.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 应用安装

提示

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

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

# 2.1 ssl证书导入

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

  • 客户(医院)如果提供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地址,或者独立的负载均衡设备地址。
  • 统一门户、统一认证、统一用户、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.2 Nacos配置

1.首先在Nacos中创建命名空间,例如ibip,以下示例使用该命名空间:

2.进入nacos-配置管理-配置列表中,点击导入配置:

img.png

img_1.png

选择选择安装包中的/nacos/nacos_config_export_xxx.zip,导入即可。

3.修改配置:修改各系统配置文件中的数据库、缓存、访问地址、统一认证等配置,修改为实际环境信息。

# 2.3 统一认证后端服务

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

2.修改后端服务配置文件hos-auth-server/config/application-prod.yml,根据实际环境修改数据库配置、redis配置、统一认证的前端地址/后端地址等内容:

####################################################
## 根据实际环境和部署规划修改以下信息             ##
####################################################
#服务端口
hos-server-port: 80

#数据库msyql配置信息
mysql-host: 10.3.11.26
mysql-port: 8011
mysql-username: root
mysql-password: password
mysql-dataname: hos_open_portal        #mysql数据库名称,默认hos_open_portal,可根据实际情况更改

#redis集群ip和端口,集群环境使用
redis-nodes: 10.3.11.30:6379,10.3.11.30:6380,10.3.11.40:6379,10.3.11.40:6380,10.3.11.46:6379,10.3.11.46:6380
#redis的ip地址,单机环境使用
redis-host: 
#redis的端口,单机环境使用
redis-port: 
#redis密码,单机或集群都需要配置
redis-password: JPqCp%s9cUW3

#统一用户门户一体化前端地址(iBIP模式)
hos-pull-password-ip: https://82.156.112.230:8000/portal

#统一认证前端地址
hos-authserver-address: https://82.156.112.230:8001

#日志保存路径
log-path: /hos/logs/hos/
####################################################

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

cd /hos/app/hos-auth-server
cp hos-auth-server.ini /etc/supervisord.d/

#启动服务:
supervisorctl update

#查看状态:
supervisorctl status

#重启方式:
supervisorctl restart hos-auth-server

4.后端服务启动验证:

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

提示

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

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

提示

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

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

linux-1.png

如未成功显示,请查看应用系统日志/hos/logs/hos、hos/logs/supervisor。

# 2.4 微服务部署启动

# 2.4.2 上传程序包

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

  • ibip-gateway:微服务网关
  • ipip-security:认证服务(不是统一认证)
  • hos-app:基础服务
  • hos-appmanager:应用管理
  • hos-uum:统一用户
  • hos-portal:门户系统

# 2.4.2 修改配置文件

分别进入各服务的config目录中,根据实际环境修改bootstrap-prod.yml配置文件,包括nacos的地址、命名空间、组信息、账号密码等,如果部署了sentinel,则还需要修改sentinel的地址、保存配置的nacos的namespace等:

spring:
  cloud:
    nacos:
      config:
        file-extension: yml
        prefix: ibip-gateway
        group: ibip
        server-addr: nacos-server.imedway-hos.svc.cluster.local:8848
        namespace: ibip
        username: ibip
        password: password
      discovery:
        group: ibip
        server-addr: nacos-server.imedway-hos.svc.cluster.local:8848
        namespace: ibip
        username: ibip
        password: password
    # sentinel 相关配置
    sentinel:
      eager: true
      transport:
        # sentinel-dashboard 控制台地址
        dashboard: hos-sentinel
        # 本应用(sentinel应用客户端)与 sentinel-dashboard 的交互端口,默认8719,如果被占用会自动加1
        port: 8806
      # 本应用监听nacos上的sentinel规则
      datasource:
        # 流控--dsl-flow允许自定义,没有固定要求,主要是里面的配置
        dsl-flow:
          # 持久化规则,从nacos中获取
          nacos:
            # nacos 地址,默认和项目Nacos配置中心一致
            server-addr: ${spring.cloud.nacos.config.server-addr}
            # nacos用户名,必须有下面namespace命名空间的只读权限,这需要在nacos上配置权限
            username: ${spring.cloud.nacos.config.username}
            password: ${spring.cloud.nacos.config.password}
            # 持久化规则文件在nacos上的命名空间,要和sentinel-dashboard配置一致
            namespace: ${ENV_DIS_NAMESPACE:sentinel}
            # 持久化规则文件在nacos上的分组,不可修改,这是固定的
            groupId: SENTINEL_GROUP
            # 持久化规则文件在nacos上的名称,必须是应用名-flow-rules
            dataId: ${spring.application.name}-flow-rules
            # 持久化规则文件在nacos上的文件格式
            data-type: json
            # 规则类型 flow-流控控制
            rule-type: flow
# ...不需要修改的内容省略

# 2.4.3 服务启动

分别进入到各服务的文件夹中,将ini启动文件拷贝到supervisor配置目录:

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

启动服务:
supervisorctl update

查看状态:
supervisorctl status

重启方式:
supervisorctl restart hos-xxx

# 2.4.4 后端服务启动验证

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

提示

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

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

linux-1.png

# 2.5 任务调度平台

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

2.修改后端服务配置文件hos-framework-job-admin/config/application-prod.yml中的端口、数据库配置:

#服务端口
hos-server-port: 8007

#数据库msyql配置信息
mysql-host: ip
mysql-port: port
mysql-username: root
mysql-password: password

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

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

#启动服务:
supervisorctl update

#查看状态:
supervisorctl status

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

# 2.6 前端及负载均衡服务

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

通过xftp工具将软件包中的微服务/Linux方式/中的前端目录:

  • 统一认证前端:hos-auth-server-web
  • 门户前端(门户和统一用户已合并):hos-open-portal-web 上传到前端服务器的/hos/app/目录下,如果是集群部署,所有前端服务器都需要上传。

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

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

cd /hos/app/hos-auth-server-web

# 解压前端应用压缩包
tar -xzvf hos-auth-server-web.zip

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

cd /hos/app/hos-open-portal-web

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

# 2.6.2 负载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.7 应用安装验证

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

hos-login.png