部署Java项目后端

部署环境

安装如下软件环境

  • OpenJDK: 1.8
  • Redis: 5.0+
  • Maven: 3.5
  • MySQL: 5.7
  • Git: 2.0.0+

配置域名及解析

天枢系统有三个模块需要配置泛域名解析,请提前准备

  • notebook,用于访问到不同的notebook
  • 云端部署, 用于访问到不同的serving服务
  • 云端部署网关, 用于按权重路由到对应的serving服务

示例如下:

*.notebook.dubhe.com 解析至Kubernetes master节点(IP)
*.serving.dubhe.com 解析至Kubernetes master节点(IP)
*.api.dubhe.com 解析至云端部署网关服务器(IP)

下载源码

首先拉取 Dubhe git 仓库最新源码至本地,再进入根目录;

#cd到根目录下
cd /
git clone https://gitee.com/zhijiangtianshu/Dubhe.git
# 进入项目根目录
cd /Dubhe/dubhe-server

创建 DB

在 MySQL 中依次执行项目根目录下sql文件:

sql/v1/00-Dubhe-DB.sql
sql/v1/01-Dubhe-DDL.sql
sql/v1/02-Dubhe-DML.sql
# 根据代码版本的不同,可能需要执行补丁sql文件09-Dubhe-Patch.sql
sql/v1/09-Dubhe-Patch.sql
# 初始管理员用户账号密码为:admin/admin,可登陆平台进行修改

创建 文件路径

如果环境名称为dubhe-prod,则在NFS服务器/nfs目录下创建如下路径:

# 数据集路径
/nfs/dubhe-prod/dataset/
# 算法文件路径
/nfs/dubhe-prod/algorithm-manage/
# 预置算法文件路径
/nfs/dubhe-prod/algorithm-manage/common/
# 训练文件路径
/nfs/dubhe-prod/train-manage/
# 模型文件路径
/nfs/dubhe-prod/model/
# 预置模型文件路径
/nfs/dubhe-prod/model/common/
# 模型优化文件路径
/nfs/dubhe-prod/model-opt/
# 上传文件临时路径
/nfs/dubhe-prod/upload-temp/
# 镜像文件路径
/nfs/dubhe-prod/upload-image/
# 云端部署文件路径
/nfs/dubhe-prod/serving/

安装NFS客户端并挂载共享目录(参考部署 NFS)

修改 docker 的配置文件 daemon.json 文件

# 在daemon.json 文件中添加harbor镜像推送配置
insecure-registries": ["https://${harbor域名}"]
# 修改完成后执行如下命令重新加载配置
systemctl daemon-reload

部署nacos

cd dubheDeployScriptfile/cloud
bash nacos_deploy.sh

   打开网页 http://{ip}:8848/nacos
   账号:nacos
   密码:nacos

修改yaml配置文件

  • admin.yaml
    dubhe-proxy:
    visual:
    keyword: visual
    server: ${ip}
    port: 9898
    refine:
    keyword: refine
    server: ${ip}
    port: 9797
  • common-biz.yaml
    redis:
    #数据库索引
    database: 6
    host: ${ip}
    datasource:
    druid:
    url: jdbc:log4jdbc:mysql://${ip}:3306/dubhe-cloud-prod?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&useInformationSchema=true&rewriteBatchedStatements=true
    username: root
    password: 123456
    storage:
    # 文件存储服务暴露的IP地址 如需测试需修改为合适的地址
    file-store: ${ip}
    minio:
    url: http://${ip}:9000/
    accessKey: admin
    secretKey: 123@abc.com
    bucketName: dubhe-prod
  • common-k8s.yaml

    k8s:
    # k8s集群配置文件
    kubeconfig: kubeconfig
    # nfs服务暴露的IP地址 如需测试需修改为合适的地址
    nfs: ${ip}
    #nfs服务端 共享目录
    nfs-root-path: /nfs/
    nfs-root-windows-path: "Z:"
    # 文件存储服务暴露的IP地址 如需测试需修改为合适的地址
    file-store: ${ip}
    # k8s ingress域名 如需测试需修改为合适的域名,注意:需要为此域名配置泛域名解析到 k8s集群master节点的ip
    host: ${域名}
    # k8s ingress-controller 对外port
    # 下面命令获取端口
    # kubectl get svc -n ingress-nginx|grep 'ingress-nginx-controller '|awk '{print $6}'|awk -F ':|/' '{print $2}'
    port: 30284
    # k8s ingress-controller 对外grpc port
    # kubectl get svc -n ingress-nginx|grep 'ingress-nginx-controller '|awk '{print $6}'|awk -F ':|/' '{print $4}'
    https-port: 30063
    elasticsearch:
    hostlist: ${eshostlist:${ip}:9200}
    pod:
    metrics:
    grafanaUrl: http://${ip}:30006/d/job/monitor?orgId=1&refresh=5s&kiosk&var-pod=
    prometheus:
    url: http://${ip}:30003/
    #配置harbor
    harbor:
    address: ${域名}
    username: admin
    password: Harbor12345
    model-name: train
  • dubhe-data.yaml
    ES服务地址及端口

    es:
    host: ${ip}
    serverPort: 9200
    transportPort: 9300
    clusterName: kubernetes-logging
    index: dataset_text
  • common-shardingjdbc.yaml

    spring:
    shardingsphere:
    datasource:
    name: master
    master:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
    url: jdbc:log4jdbc:mysql://${ip}:3306/dubhe-cloud-prod?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&useInformationSchema=true&rewriteBatchedStatements=true
    username: root
    password: 123456
  • dubhe-data-task.yaml

    dcm:
    host: ${ip}
    port: 8080
  • dubhe-serving.yaml

    k8s:
    prometheus:
    query-url: http://10.105.0.1:30003/api/v1/query
  • dubhe-serving-gateway.yaml

    serving:
    gateway:
    postfixUrl: .servingapi.dubhe.club

配置

note
  1. yml配置文件中,rsa加密传输配置,与前端配置文件src/settings.js中publicKey公钥加密搭配使用;推荐使用后端项目代码中genKeyPair方法重新生成

  2. 添加文件kubeconfig: 将k8s集群master下$HOME/.kube/config文件 复制到common-k8s的resources下 重命名为kubeconfig

    cp $HOME/.kube/config /Dubhe/dubhe-server/common-k8s/src/main/resources/kubeconfig
  3. 云端部署网关服务(dubhe-serving-gateway)需要在redis-client添加stream类型数据,执行命令

    XADD serving_stream * 0 0

构建

# 回到项目根目录,执行构建
cd /Dubhe/dubhe-server
# 构建,生成的jar包位于 ./dubhe-admin/target/dubhe-admin-1.0-exec.jar ./dubhe-task/target/dubhe-task-1.0.jar
mvn clean compile package
# 云端部署网关gateway模块构建,生成的jar包位于 ./dubhe-serving-gateway/target/dubhe-serving-gateway.jar
cd /Dubhe/dubhe-server/dubhe-serving-gateway
mvn clean compile package

启动

# 回到项目根目录,启动服务
cd /Dubhe/dubhe-server
# 启动应用服务端
nohup java -jar auth/target/auth-0.0.1-SNAPSHOT-exec.jar --spring.profiles.active=prod > /dev/null 2>&1 &
nohup java -jar admin/target/admin-0.0.1-SNAPSHOT-exec.jar --spring.profiles.active=prod > /dev/null 2>&1 &
nohup java -jar dubhe-algorithm/target/dubhe-algorithm-0.0.1-SNAPSHOT-exec.jar --spring.profiles.active=prod > /dev/null 2>&1 &
nohup java -jar dubhe-data/target/dubhe-data-0.0.1-SNAPSHOT-exec.jar --spring.profiles.active=prod > /dev/null 2>&1 &
nohup java -jar dubhe-data-dcm/target/dubhe-data-dcm-0.0.1-SNAPSHOT-exec.jar --spring.profiles.active=prod > /dev/null 2>&1 &
nohup java -jar dubhe-data-task/target/dubhe-data-task-0.0.1-SNAPSHOT-exec.jar --spring.profiles.active=prod > /dev/null 2>&1 &
nohup java -jar dubhe-image/target/dubhe-image-0.0.1-SNAPSHOT-exec.jar --spring.profiles.active=prod > /dev/null 2>&1 &
nohup java -jar dubhe-k8s/target/dubhe-k8s-0.0.1-SNAPSHOT-exec.jar --spring.profiles.active=prod > /dev/null 2>&1 &
nohup java -jar dubhe-measure/target/dubhe-measure-0.0.1-SNAPSHOT-exec.jar --spring.profiles.active=prod > /dev/null 2>&1 &
nohup java -jar dubhe-model/target/dubhe-model-0.0.1-SNAPSHOT-exec.jar --spring.profiles.active=prod > /dev/null 2>&1 &
nohup java -jar dubhe-notebook/target/dubhe-notebook-0.0.1-SNAPSHOT-exec.jar --spring.profiles.active=prod > /dev/null 2>&1 &
nohup java -jar dubhe-optimize/target/dubhe-optimize-0.0.1-SNAPSHOT-exec.jar --spring.profiles.active=prod > /dev/null 2>&1 &
nohup java -jar dubhe-serving/target/dubhe-serving-0.0.1-SNAPSHOT-exec.jar --spring.profiles.active=prod > /dev/null 2>&1 &
nohup java -jar dubhe-serving-gateway/target/dubhe-serving-gateway-0.0.1-SNAPSHOT-exec.jar --spring.profiles.active=prod > /dev/null 2>&1 &
nohup java -jar dubhe-train/target/dubhe-train-0.0.1-SNAPSHOT-exec.jar --spring.profiles.active=prod > /dev/null 2>&1 &
nohup java -jar dubhe-train/target/dubhe-tadl-0.0.1-SNAPSHOT-exec.jar --spring.profiles.active=prod > /dev/null 2>&1 &
nohup java -jar gateway/target/gateway-0.0.1-SNAPSHOT-exec.jar --spring.profiles.active=prod > /dev/null 2>&1 &

Spring boot 升级到cloud版本

1、部署nacos注册中心

2、上传配置文件,修改yaml配置文件

3、停止spring boot 项目

4、在 MySQL 中执行项目根目录下升级sql文件

sql/10-Dubhe-Boot-Update-Cloud.sql

5、启动spring cloud 项目

Last updated on