# 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目录中会生成日期命名的备份目录,结构类似如下:

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

提示

  • 以下流程适用于单机部署和集群部署,在部署操作时选择副本数量。
  • 必须先部署统一认证应用后端,并保证统一认证后端正常启动,才能部署统一门户和统一用户,否则将导致基础平台、统一门户和统一用户部署报错。

# 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证书即可。

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证书】。

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

# 2.2 部署流程

首先,确认各微服务后端配置文件已经根据实际环境修改完成。如未修改,参考6.1 门户系统后端配置

需要部署的服务包含(因有依赖关系,部署时需要按照以下顺序操作):

  1. ibip-gateway:微服务网关
  2. hos-auth-server:统一认证服务
  3. ipip-security:认证服务(不是统一认证)
  4. hos-app:基础服务
  5. hos-appmanager:应用管理
  6. hos-uum:统一用户
  7. hos-portal:门户系统
  8. hos-sentinel:限流熔断系统

使用kubesphere部署各服务方式类似,具体流程参考以下分别进行部署操作:

# 2.2.1 Nacos配置

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

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

img.png

img_1.png

选择nacos_config_export_xxx.zip,导入即可。

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

# 2.2.2 创建配置

按照以下流程将各系统配置文件导入容器平台:

进入项目-配置-配置字典,点击创建:

img.png

输入要部署的系统名称:

img_1.png

下一步,点击添加数据:

img_2.png

img_3.png

其中,为配置文件名称,为配置文件内容,请根据各系统配置文件添加,可能部分系统有多个配置文件,添加多条数据即可。

点击创建,完成配置添加。按照以上流程将各系统的配置文件都添加到容器平台中。

# 2.2.3 应用安装

进入项目-应用负载-服务页面,点击创建服务,选择无状态服务:

输入服务名称等信息:

img.png

下一步配置容器组,点击添加容器,选择harbor镜像仓库,输入上一步制作的镜像地址和名称:

img_1.png

下拉进入端口设置,输入端口信息(为应用程序内部设置监听的端口):

img_2.png

下拉到最下面,选中同步主机时区,保存:

img_3.png

下一步存储卷设置,点击挂载配置文件:

img.png

选择上面步骤创建的配置字典,选择只读模式、挂载路径:

img_1.png

下一步然后进入高级设置,配置外部访问:

img_4.png

点击创建,完成配置。

# 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即可,端口可以在容器平台-应用负载-服务中获取端口号:

img.png

2.server中的端口号,根据准备工作中的部署规划修改。

# 3 服务访问验证

# 3.1 访问方式

访问地址:https://负载均衡服务器的VIP地址:端口

# 3.2 验证

提示

系统需要许可授权激活后方可登录使用,参考:系统许可申请与激活

访问门户系统、统一用户前端地址: img.png