# KubeSphere应用部署
mysql、redis、minio、nginx、nacos等服务的安装: Linux系统上安装,请参考运维平台文档 (opens new window) KuberSphere容器平台上安装,请参考:KubeSphere中间件安装 (opens new window)
# 1 数据库初始化
数据库初始化可以使用软件包中的/hos-app/tools/HeidiSQL_12.5_64bit_Portable.7z软件,直接解压,免安装使用。
# 1.1 HOS门户系统
提示
门户系统、统一用户、统一认证使用同一个数据库。
# 1.1.1 新建数据库
- 数据库名:
hos_open_portal
- 字符集:
utf8mb4
- 排序规则:
utf8mb4_0900_ai_ci
然后导入hos_open_portal.sql
。
# 1.1.2 执行应用初始化sql
根据端口规划的应用地址,替换应用初始化sql中的“统一用户前端地址”和“门户引擎前端地址”,并在统一用户/统一认证数据库中执行。
提示
- 所有的访问地址都需要带http或https,例如:rear_server_url = 'http://192.168.1.1:8001/api'。
- 如果是集群部署,替换的地址使用负载地址。
- 如果该地址替换失误,将导致无法登录应用
该初始化sql适用于2.5.0之后的版本,如果要部署2.5.0之前的版本请联系HOS开发人员。
# 1.更新应用表的服务地址字段
UPDATE hos_system_app SET rear_server_url = '统一用户前端地址/api' WHERE id = '154611b4c12878ac8f6434f935ea6157';
UPDATE hos_system_app SET access_url = '门户引擎前端地址', rear_server_url = '门户引擎前端地址/api' WHERE id = '1009852153d621a680d5886cde2311f9';
# 2.更新应用认证管理表的回调地址字段
UPDATE hos_iam_auth_oauth2 SET redirect_urls = '统一用户前端地址/api/security/login/oauth2/code/messaging-client-oidc' WHERE id = 'aa47df7b2bf2ca6af0abff3c05dde2d1';
UPDATE hos_iam_auth_oauth2 SET redirect_urls = '门户引擎前端地址/api/security/login/oauth2/code/messaging-client-oidc' WHERE id = 'bb764cfa411dd87c3e902c1bae15de94';
# 3.更新openapi接口信息表的url字段
UPDATE hos_sys_openapi_info SET url = '统一用户前端地址/api/openApi/uum/account/pull-account' WHERE id = '2e5875a488431eb03578e4fe2c111111';
UPDATE hos_sys_openapi_info SET url = '统一用户前端地址/api/openApi/uum/role/pullRole' WHERE id = '2e5875a488431eb03578e4fe2c222222';
UPDATE hos_sys_openapi_info SET url = '统一用户前端地址/api/openApi/uum/postRole/pullPostRole' WHERE id = '2e5875a488431eb03578e4fe2c333333';
UPDATE hos_sys_openapi_info SET url = '统一用户前端地址/api/openApi/uum/resources/pull' WHERE id = '2e5875a488431eb03578e4fe2c444444';
UPDATE hos_sys_openapi_info SET url = '统一用户前端地址/api/openApi/uum/scope-data/pull' WHERE id = '2e5875a488431eb03578e4fe2c555555';
UPDATE hos_sys_openapi_info SET url = '统一用户前端地址/api/openApi/uum/interface/pull' WHERE id = '2e5875a488431eb03578e4fe2c666666';
UPDATE hos_sys_openapi_info SET url = '统一用户前端地址/api/openApi/uum/page-preset/pull' WHERE id = '2e5875a488431eb03578e4fe2c777777';
UPDATE hos_sys_openapi_info SET url = '统一用户前端地址/api/openApi/uum/perms/pull' WHERE id = '2e5875a488431eb03578e4fe2c888888';
# 4.更新系统配置的ip端口
UPDATE hos_iam_system_config SET value = '统一用户前端地址/api/openApi/auth/license/state' WHERE id = 'ce887ad7613c7bcfbabc4ba93f402371';
UPDATE hos_iam_system_config SET value = '统一用户前端地址/lisenceInstall' WHERE id = 'cy587ad7613c7bcfbabc4ba93f403321';
UPDATE hos_iam_system_config SET value = '门户引擎前端地址/api/openApi/auth/license/state' WHERE id = '9fa39d98a5a11fcf5c19e90c8f1174cb';
UPDATE hos_iam_system_config SET value = '门户引擎前端地址/lisenceInstall' WHERE id = '222fab9f1c83f32e8dd92ddb09630d2f';
# 1.2 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 应用安装
提示
- 以下流程适用于单机部署和集群部署,在部署操作时选择副本数量。
- 必须先部署统一认证应用后端,并保证统一认证后端正常启动,才能部署统一门户和统一用户,否则将导致基础平台、统一门户和统一用户部署报错。
# 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地址,或者独立的负载均衡设备地址。
- 统一门户、统一认证、统一用户、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证书】。
上传后的前端服务器目录参考4.1 目录规划
# 2.2 部署流程
首先,确认各微服务后端配置文件已经根据实际环境修改完成。如未修改,参考6.1 门户系统后端配置
需要部署的服务包含(因有依赖关系,部署时需要按照以下顺序操作):
- ibip-gateway:微服务网关
- hos-auth-server:统一认证服务
- ipip-security:认证服务(不是统一认证)
- hos-app:基础服务
- hos-appmanager:应用管理
- hos-uum:统一用户
- hos-portal:门户系统
- hos-sentinel:限流熔断系统
使用kubesphere部署各服务方式类似,具体流程参考以下分别进行部署操作:
# 2.2.1 Nacos配置
1.首先在Nacos中创建命名空间,例如ibip,以下示例使用该命名空间:
2.进入nacos-配置管理-配置列表中,点击导入配置:
选择nacos_config_export_xxx.zip,导入即可。
3.修改配置:修改各系统配置文件中的数据库、缓存、访问地址、统一认证等配置,修改为实际环境信息。
# 2.2.2 创建配置
按照以下流程将各系统配置文件导入容器平台:
进入项目-配置-配置字典,点击创建:
输入要部署的系统名称:
下一步,点击添加数据:
其中,键
为配置文件名称,值
为配置文件内容,请根据各系统配置文件添加,可能部分系统有多个配置文件,添加多条数据即可。
点击创建,完成配置添加。按照以上流程将各系统的配置文件都添加到容器平台中。
# 2.2.3 应用安装
进入项目-应用负载-服务页面,点击创建服务,选择无状态服务:
输入服务名称等信息:
下一步配置容器组,点击添加容器,选择harbor镜像仓库,输入上一步制作的镜像地址和名称:
下拉进入端口设置,输入端口信息(为应用程序内部设置监听的端口):
下拉到最下面,选中同步主机时区,保存:
下一步存储卷设置,点击挂载配置文件:
选择上面步骤创建的配置字典,选择只读模式、挂载路径:
下一步然后进入高级设置,配置外部访问:
点击创建,完成配置。
# 2.2.4 负载均衡配置
注意
因容器平台一般要求多台服务器,其上部署的应用系统,不管是单机或集群方式部署,都提供多个访问入口,所以都要配置负载均衡。
在容器平台服务器中任选2台,安装nginx+keepalived集群,并配置VIP,具体部署参考:Nginx集群环境安装 (opens new window)
在2台服务器的/etc/nginx/conf.d/中新建hos.conf配置文件,输入以下内容:
gzip on;
gzip_static on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.";
client_max_body_size 100m;
upstream hos-ms-open-portal-web {
server 10.241.12.10:30782;
server 10.241.12.11:30782;
}
upstream hos-ms-gateway {
server 10.241.12.10:31214;
server 10.241.12.11:31214;
}
upstream hos-ms-auth-web {
server 10.241.12.10:30804;
server 10.241.12.11:30804;
}
upstream hos-ms-auth {
server 10.241.12.10:32025;
server 10.241.12.11:32025;
}
upstream hos-ms-job {
server 10.241.12.10:30426;
server 10.241.12.11:30426;
}
# 文件存储minio api服务
upstream hos-minio {
least_conn;
server 10.241.12.3:9000;
server 10.241.12.4:9000;
server 10.241.12.5:9000;
server 10.241.12.6:9000;
}
# 文件存储minio console服务
upstream hos-minio-console {
least_conn;
server 10.241.12.3:9001;
server 10.241.12.4:9001;
server 10.241.12.5:9001;
server 10.241.12.6:9001;
}
server {
listen 8000 ssl http2;
server_name localhost;
ssl_certificate /home/ssl/hos/hos.crt;
ssl_certificate_key /home/ssl/hos/hos.key;
location /portal/ {
proxy_pass http://hos-ms-open-portal-web/portal/;
}
location /portal/api/ {
proxy_pass http://hos-ms-gateway/api/portal/;
}
location /portal/api/security/ {
proxy_pass http://hos-ms-gateway/api/security/;
}
}
# 统一认证前端
server {
listen 8001 ssl http2;
server_name localhost;
ssl_certificate /home/ssl/hos/hos.crt;
ssl_certificate_key /home/ssl/hos/hos.key;
location / {
proxy_pass http://hos-ms-auth-web/;
}
location /api/ {
proxy_pass http://hos-ms-auth/api/;
}
}
# 任务平台
server {
listen 8002 ssl http2;
server_name localhost;
ssl_certificate /home/ssl/hos/hos.crt;
ssl_certificate_key /home/ssl/hos/hos.key;
location / {
proxy_pass http://hos-ms-job/;
}
}
# 文件存储minio服务
server {
listen 9000 ssl http2;
server_name localhost;
ssl_certificate /home/ssl/hos/hos.crt;
ssl_certificate_key /home/ssl/hos/hos.key;
ignore_invalid_headers off;
client_max_body_size 0;
proxy_buffering off;
proxy_request_buffering off;
location / {
proxy_pass http://hos-minio;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 300;
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;
}
}
# 文件存储minio console服务
server {
listen 9001 ssl http2;
server_name localhost;
ssl_certificate /home/ssl/hos/hos.crt;
ssl_certificate_key /home/ssl/hos/hos.key;
ignore_invalid_headers off;
client_max_body_size 0;
proxy_buffering off;
proxy_request_buffering off;
location / {
proxy_pass http://hos-minio-console;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
proxy_connect_timeout 300;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
chunked_transfer_encoding off;
}
}
其中需要修改的内容如下:
1.upstream中各个服务的访问地址,IP地址在容器集群中任选2台服务器的ip即可,端口可以在容器平台-应用负载-服务中获取端口号:
2.server中的端口号,根据准备工作中的部署规划修改。
# 3 服务访问验证
# 3.1 访问方式
访问地址:https://负载均衡服务器的VIP地址:端口
# 3.2 验证
提示
系统需要许可授权激活后方可登录使用,参考:系统许可申请与激活
访问门户系统、统一用户前端地址:
← Linux系统应用部署 灵雀云应用部署 →