# 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目录中会生成日期命名的备份目录,结构类似如下:
# 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证书即可。
执行完成后,所有证书文件会保存到当前目录下以证书名称命名的目录内。
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-配置管理-配置列表中,点击导入配置:
选择选择安装包中的/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代理到后端端口
如统一认证安装成功,将显示如下界面:
如未成功显示,请查看应用系统日志/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,不要访问负载地址
- 端口使用统一门户后端端口,即后端配置文件中配置的端口,不要使用前端端口
- 如果是集群部署,两个后端服务器需要分别验证
如统一门户安装成功,将显示如下界面:
# 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前后端应用都安装成功。