Browse Source

增加多环境的配置

YunaiV 4 years ago
parent
commit
32be92c6f3

+ 163 - 0
bin/deploy.sh

@@ -0,0 +1,163 @@
+#!/bin/bash
+set -e
+
+# 基础
+# export JAVA_HOME=/work/programs/jdk/jdk1.8.0_181
+# export PATH=PATH=$PATH:$JAVA_HOME/bin
+# export CLASSPATH=$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
+
+DATE=$(date +%Y%m%d%H%M)
+# 基础路径
+BASE_PATH=/work/projects/dashboard
+# 编译后 jar 的地址。部署时,Jenkins 会上传 jar 包到该目录下
+SOURCE_PATH=$BASE_PATH/build
+# 服务名称。同时约定部署服务的 jar 包名字也为它。
+SERVER_NAME=dashboard
+# 环境
+PROFILES_ACTIVE=dev
+# 健康检查 URL
+HEALTH_CHECK_URL=http://127.0.0.1:48080/actuator/health/
+
+# heapError 存放路径
+HEAP_ERROR_PATH=$BASE_PATH/heapError
+# JVM 参数
+JAVA_OPS="-Xms512m -Xmx512m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$HEAP_ERROR_PATH"
+
+# SkyWalking Agent 配置
+export SW_AGENT_NAME=$SERVER_NAME
+export SW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.0.84:11800
+export JAVA_AGENT=-javaagent:/work/skywalking/apache-skywalking-apm-bin/agent/skywalking-agent.jar
+
+# 备份
+function backup() {
+    # 如果不存在,则无需备份
+    if [ ! -f "$BASE_PATH/$SERVER_NAME.jar" ]; then
+        echo "[backup] $BASE_PATH/$SERVER_NAME.jar 不存在,跳过备份"
+    # 如果存在,则备份到 backup 目录下,使用时间作为后缀
+    else
+        echo "[backup] 开始备份 $SERVER_NAME ..."
+        cp $BASE_PATH/$SERVER_NAME.jar $BASE_PATH/backup/$SERVER_NAME-$DATE.jar
+        echo "[backup] 备份 $SERVER_NAME 完成"
+    fi
+}
+
+# 最新构建代码 移动到项目环境
+function transfer() {
+    echo "[transfer] 开始转移 $SERVER_NAME.jar"
+
+    # 删除原 jar 包
+    if [ ! -f "$BASE_PATH/$SERVER_NAME.jar" ]; then
+        echo "[transfer] $BASE_PATH/$SERVER_NAME.jar 不存在,跳过删除"
+    else
+        echo "[transfer] 移除 $BASE_PATH/$SERVER_NAME.jar 完成"
+        rm $BASE_PATH/$SERVER_NAME.jar
+    fi
+
+    # 复制新 jar 包
+    echo "[transfer] 从 $SOURCE_PATH 中获取 $SERVER_NAME.jar 并迁移至 $BASE_PATH ...."
+    cp $SOURCE_PATH/$SERVER_NAME.jar $BASE_PATH
+
+    echo "[transfer] 转移 $SERVER_NAME.jar 完成"
+}
+
+# 停止
+function stop() {
+    echo "[stop] 开始停止 $BASE_PATH/$SERVER_NAME"
+    PID=$(ps -ef | grep $BASE_PATH/$SERVER_NAME | grep -v "grep" | awk '{print $2}')
+    # 如果 Java 服务启动中,则进行关闭
+    if [ -n "$PID" ]; then
+        # 正常关闭
+        echo "[stop] $BASE_PATH/$SERVER_NAME 运行中,开始 kill [$PID]"
+        kill -15 $PID
+        # 等待最大 60 秒,直到关闭完成。
+        for ((i = 0; i < 60; i++))
+            do
+                sleep 1
+                PID=$(ps -ef | grep $BASE_PATH/$SERVER_NAME | grep -v "grep" | awk '{print $2}')
+                if [ -n "$PID" ]; then
+                    echo -e ".\c"
+                else
+                    echo '[stop] 停止 $BASE_PATH/$SERVER_NAME 成功'
+                    break
+                fi
+		    done
+
+        # 如果正常关闭失败,那么进行强制 kill -9 进行关闭
+        if [ -n "$PID" ]; then
+            echo "[stop] $BASE_PATH/$SERVER_NAME 失败,强制 kill -9 $PID"
+            kill -9 $PID
+        fi
+    # 如果 Java 服务未启动,则无需关闭
+    else
+        echo "[stop] $BASE_PATH/$SERVER_NAME 未启动,无需停止"
+    fi
+}
+
+# 启动
+function start() {
+    # 开启启动前,打印启动参数
+    echo "[start] 开始启动 $BASE_PATH/$SERVER_NAME"
+    echo "[start] JAVA_OPS: $JAVA_OPS"
+    echo "[start] JAVA_AGENT: $JAVA_AGENT"
+    echo "[start] PROFILES: $PROFILES_ACTIVE"
+
+    # 开始启动
+    BUILD_ID=dontKillMe nohup java -server $JAVA_OPS $JAVA_AGENT -jar $BASE_PATH/$SERVER_NAME.jar --spring.profiles.active=$PROFILES_ACTIVE &
+    echo "[start] 启动 $BASE_PATH/$SERVER_NAME 完成"
+}
+
+# 健康检查
+function healthCheck() {
+    # 如果配置健康检查,则进行健康检查
+    if [ -n "$HEALTH_CHECK_URL" ]; then
+        # 健康检查最大 60 秒,直到健康检查通过
+        echo "[healthCheck] 开始通过 $HEALTH_CHECK_URL 地址,进行健康检查";
+        for ((i = 0; i < 60; i++))
+            do
+                # 请求健康检查地址,只获取状态码。
+                result=`curl -I -m 10 -o /dev/null -s -w %{http_code} $HEALTH_CHECK_URL || echo "000"`
+                # 如果状态码为 200,则说明健康检查通过
+                if [ "$result" == "200" ]; then
+                    echo "[healthCheck] 健康检查通过";
+                    break
+                # 如果状态码非 200,则说明未通过。sleep 1 秒后,继续重试
+                else
+                    echo -e ".\c"
+                    sleep 1
+                fi
+            done
+
+        # 健康检查未通过,则异常退出 shell 脚本,不继续部署。
+        if [ ! "$result" == "200" ]; then
+            echo "[healthCheck] 健康检查不通过,可能部署失败。查看日志,自行判断是否启动成功";
+            tail -n 10 nohup.out
+            exit 1;
+        # 健康检查通过,打印最后 10 行日志,可能部署的人想看下日志。
+        else
+            tail -n 10 nohup.out
+        fi
+    # 如果未配置健康检查,则 slepp 60 秒,人工看日志是否部署成功。
+    else
+        echo "[healthCheck] HEALTH_CHECK_URL 未配置,开始 sleep 60 秒";
+        sleep 60
+        echo "[healthCheck] sleep 60 秒完成,查看日志,自行判断是否启动成功";
+        tail -n 50 nohup.out
+    fi
+}
+
+# 部署
+function deploy() {
+    cd $BASE_PATH
+    # 备份原 jar
+    backup
+    # 停止 Java 服务
+    stop
+    # 部署新 jar
+    transfer
+    # 启动 Java 服务
+    start
+    # 健康检查
+    healthCheck
+}
+
+deploy

+ 1 - 1
ruoyi-ui/vue.config.js

@@ -34,7 +34,7 @@ module.exports = {
     proxy: {
       // detail: https://cli.vuejs.org/config/#devserver-proxy
       [process.env.VUE_APP_BASE_API]: {
-        target: `http://localhost:8080`,
+        target: `http://localhost:48080`,
         changeOrigin: true,
         pathRewrite: {
           ['^' + process.env.VUE_APP_BASE_API]: ''

+ 112 - 0
src/main/resources/application-dev.yaml

@@ -0,0 +1,112 @@
+server:
+  port: 48080
+
+--- #################### 数据库相关配置 ####################
+
+spring:
+  # 数据源配置项 TODO 多数据源;TODO 监控配置
+  datasource:
+    name: ruoyi-vue-pro
+    url: jdbc:mysql://400-infra.server.iocoder.cn:3306/${spring.datasource.name}?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT
+    driver-class-name: com.mysql.jdbc.Driver
+    username: root
+    password: 3WLiVUBEwTbvAfsh
+
+  # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
+  redis:
+    host: 400-infra.server.iocoder.cn # 地址
+    port: 6379 # 端口
+    database: 1 # 数据库索引
+
+--- #################### 定时任务相关配置 ####################
+
+# Quartz 配置项,对应 QuartzProperties 配置类
+spring:
+  quartz:
+    scheduler-name: schedulerName # Scheduler 名字。默认为 schedulerName
+    job-store-type: jdbc # Job 存储器类型。默认为 memory 表示内存,可选 jdbc 使用数据库。
+    wait-for-jobs-to-complete-on-shutdown: true # 应用关闭时,是否等待定时任务执行完成。默认为 false ,建议设置为 true
+    properties: # 添加 Quartz Scheduler 附加属性,更多可以看 http://www.quartz-scheduler.org/documentation/2.4.0-SNAPSHOT/configuration.html 文档
+      org:
+        quartz:
+          # Scheduler 相关配置
+          scheduler:
+            instanceName: schedulerName
+            instanceId: AUTO # 自动生成 instance ID
+          # JobStore 相关配置
+          jobStore:
+            class: org.quartz.impl.jdbcjobstore.JobStoreTX # JobStore 实现类
+            isClustered: true # 是集群模式
+            clusterCheckinInterval: 15000 # 集群检查频率,单位:毫秒。默认为 15000,即 15 秒
+            misfireThreshold: 60000 # misfire 阀值,单位:毫秒。
+          # 线程池相关配置
+          threadPool:
+            threadCount: 25 # 线程池大小。默认为 10 。
+            threadPriority: 5 # 线程优先级
+            class: org.quartz.simpl.SimpleThreadPool # 线程池类型
+    jdbc: # 使用 JDBC 的 JobStore 的时候,JDBC 的配置
+      initialize-schema: NEVER # 是否自动使用 SQL 初始化 Quartz 表结构。这里设置成 never ,我们手动创建表结构。
+
+--- #################### 配置中心相关配置 ####################
+
+# Apollo 配置中心
+apollo:
+  bootstrap:
+    enabled: true # 设置 Apollo 在启动阶段生效
+    eagerLoad:
+      enabled: true # 设置 Apollo 在日志初始化前生效,可以实现日志的动态级别配置
+  jdbc: # 自定义的 JDBC 配置项,用于数据库的地址
+    url: ${spring.datasource.url}
+    username: ${spring.datasource.username}
+    password: ${spring.datasource.password}
+
+--- #################### 监控相关配置 ####################
+
+# Actuator 监控端点的配置项
+management:
+  endpoints:
+    web:
+      exposure:
+        include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
+
+# Spring Boot Admin 配置项
+spring:
+  boot:
+    admin:
+      # Spring Boot Admin Client 客户端的相关配置
+      client:
+        url: http://127.0.0.1:8080/${spring.boot.admin.context-path} # 设置 Spring Boot Admin Server 地址
+      # Spring Boot Admin Server 服务端的相关配置
+      context-path: /admin # 配置 Spring
+
+--- #################### 芋道相关配置 ####################
+
+# 芋道配置项,设置当前项目所有自定义的配置
+yudao:
+  info:
+    version: 1.0.0
+    base-package: cn.iocoder.dashboard
+  web:
+    api-prefix: /api
+    controller-package: ${yudao.info.base-package}
+  security:
+    token-header: Authorization
+    token-secret: abcdefghijklmnopqrstuvwxyz
+    token-timeout: 1d
+    session-timeout: 30m
+    mock-enable: true
+    mock-secret: test
+  swagger:
+    title: 管理后台
+    description: 提供管理员管理的所有功能
+    version: ${yudao.info.base-package}
+    base-package: ${yudao.info.base-package}.modules
+  captcha:
+    timeout: 5m
+    width: 160
+    height: 60
+  file:
+    base-path: http://127.0.0.1:${server.port}/${yudao.web.api-prefix}/file/get/
+  codegen:
+    base-package: ${yudao.info.base-package}.modules
+    db-schemas: ${spring.datasource.name}

+ 112 - 0
src/main/resources/application-local.yaml

@@ -0,0 +1,112 @@
+server:
+  port: 48080
+
+--- #################### 数据库相关配置 ####################
+
+spring:
+  # 数据源配置项 TODO 多数据源;TODO 监控配置
+  datasource:
+    name: ruoyi-vue-pro
+    url: jdbc:mysql://127.0.1:33061/${spring.datasource.name}?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT
+    driver-class-name: com.mysql.jdbc.Driver
+    username: root
+    password: 123456
+
+  # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
+  redis:
+    host: 127.0.0.1 # 地址
+    port: 6379 # 端口
+    database: 0 # 数据库索引
+
+--- #################### 定时任务相关配置 ####################
+
+# Quartz 配置项,对应 QuartzProperties 配置类
+spring:
+  quartz:
+    scheduler-name: schedulerName # Scheduler 名字。默认为 schedulerName
+    job-store-type: jdbc # Job 存储器类型。默认为 memory 表示内存,可选 jdbc 使用数据库。
+    wait-for-jobs-to-complete-on-shutdown: true # 应用关闭时,是否等待定时任务执行完成。默认为 false ,建议设置为 true
+    properties: # 添加 Quartz Scheduler 附加属性,更多可以看 http://www.quartz-scheduler.org/documentation/2.4.0-SNAPSHOT/configuration.html 文档
+      org:
+        quartz:
+          # Scheduler 相关配置
+          scheduler:
+            instanceName: schedulerName
+            instanceId: AUTO # 自动生成 instance ID
+          # JobStore 相关配置
+          jobStore:
+            class: org.quartz.impl.jdbcjobstore.JobStoreTX # JobStore 实现类
+            isClustered: true # 是集群模式
+            clusterCheckinInterval: 15000 # 集群检查频率,单位:毫秒。默认为 15000,即 15 秒
+            misfireThreshold: 60000 # misfire 阀值,单位:毫秒。
+          # 线程池相关配置
+          threadPool:
+            threadCount: 25 # 线程池大小。默认为 10 。
+            threadPriority: 5 # 线程优先级
+            class: org.quartz.simpl.SimpleThreadPool # 线程池类型
+    jdbc: # 使用 JDBC 的 JobStore 的时候,JDBC 的配置
+      initialize-schema: NEVER # 是否自动使用 SQL 初始化 Quartz 表结构。这里设置成 never ,我们手动创建表结构。
+
+--- #################### 配置中心相关配置 ####################
+
+# Apollo 配置中心
+apollo:
+  bootstrap:
+    enabled: true # 设置 Apollo 在启动阶段生效
+    eagerLoad:
+      enabled: true # 设置 Apollo 在日志初始化前生效,可以实现日志的动态级别配置
+  jdbc: # 自定义的 JDBC 配置项,用于数据库的地址
+    url: ${spring.datasource.url}
+    username: ${spring.datasource.username}
+    password: ${spring.datasource.password}
+
+--- #################### 监控相关配置 ####################
+
+# Actuator 监控端点的配置项
+management:
+  endpoints:
+    web:
+      exposure:
+        include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
+
+# Spring Boot Admin 配置项
+spring:
+  boot:
+    admin:
+      # Spring Boot Admin Client 客户端的相关配置
+      client:
+        url: http://127.0.0.1:8080/${spring.boot.admin.context-path} # 设置 Spring Boot Admin Server 地址
+      # Spring Boot Admin Server 服务端的相关配置
+      context-path: /admin # 配置 Spring
+
+--- #################### 芋道相关配置 ####################
+
+# 芋道配置项,设置当前项目所有自定义的配置
+yudao:
+  info:
+    version: 1.0.0
+    base-package: cn.iocoder.dashboard
+  web:
+    api-prefix: /api
+    controller-package: ${yudao.info.base-package}
+  security:
+    token-header: Authorization
+    token-secret: abcdefghijklmnopqrstuvwxyz
+    token-timeout: 1d
+    session-timeout: 30m
+    mock-enable: true
+    mock-secret: test
+  swagger:
+    title: 管理后台
+    description: 提供管理员管理的所有功能
+    version: ${yudao.info.base-package}
+    base-package: ${yudao.info.base-package}.modules
+  captcha:
+    timeout: 5m
+    width: 160
+    height: 60
+  file:
+    base-path: http://127.0.0.1:${server.port}/${yudao.web.api-prefix}/file/get/
+  codegen:
+    base-package: ${yudao.info.base-package}.modules
+    db-schemas: ${spring.datasource.name}

+ 3 - 110
src/main/resources/application.yaml

@@ -2,6 +2,9 @@ spring:
   application:
     name: dashboard
 
+  profiles:
+    active: dev
+
   # Servlet 配置
   servlet:
     # 文件上传相关配置项
@@ -29,113 +32,3 @@ mybatis-plus:
       logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
   mapper-locations: classpath*:mapper/*.xml
   type-aliases-package: ${yudao.info.base-package}.modules.*.dal.dataobject
-
---- #################### 数据库相关配置 ####################
-
-spring:
-  # 数据源配置项 TODO 多数据源;TODO 监控配置
-  datasource:
-    name: ruoyi-vue-pro
-    url: jdbc:mysql://127.0.1:33061/${spring.datasource.name}?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT
-    driver-class-name: com.mysql.jdbc.Driver
-    username: root
-    password: 123456
-
-  # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
-  redis:
-    host: 127.0.0.1 # 地址
-    port: 6379 # 端口
-    database: 0 # 数据库索引
-
---- #################### 定时任务相关配置 ####################
-
-# Quartz 配置项,对应 QuartzProperties 配置类
-spring:
-  quartz:
-    scheduler-name: schedulerName # Scheduler 名字。默认为 schedulerName
-    job-store-type: jdbc # Job 存储器类型。默认为 memory 表示内存,可选 jdbc 使用数据库。
-    wait-for-jobs-to-complete-on-shutdown: true # 应用关闭时,是否等待定时任务执行完成。默认为 false ,建议设置为 true
-    properties: # 添加 Quartz Scheduler 附加属性,更多可以看 http://www.quartz-scheduler.org/documentation/2.4.0-SNAPSHOT/configuration.html 文档
-      org:
-        quartz:
-          # Scheduler 相关配置
-          scheduler:
-            instanceName: schedulerName
-            instanceId: AUTO # 自动生成 instance ID
-          # JobStore 相关配置
-          jobStore:
-            class: org.quartz.impl.jdbcjobstore.JobStoreTX # JobStore 实现类
-            isClustered: true # 是集群模式
-            clusterCheckinInterval: 15000 # 集群检查频率,单位:毫秒。默认为 15000,即 15 秒
-            misfireThreshold: 60000 # misfire 阀值,单位:毫秒。
-          # 线程池相关配置
-          threadPool:
-            threadCount: 25 # 线程池大小。默认为 10 。
-            threadPriority: 5 # 线程优先级
-            class: org.quartz.simpl.SimpleThreadPool # 线程池类型
-    jdbc: # 使用 JDBC 的 JobStore 的时候,JDBC 的配置
-      initialize-schema: NEVER # 是否自动使用 SQL 初始化 Quartz 表结构。这里设置成 never ,我们手动创建表结构。
-
---- #################### 配置中心相关配置 ####################
-
-# Apollo 配置中心
-apollo:
-  bootstrap:
-    enabled: true # 设置 Apollo 在启动阶段生效
-    eagerLoad:
-      enabled: true # 设置 Apollo 在日志初始化前生效,可以实现日志的动态级别配置
-  jdbc: # 自定义的 JDBC 配置项,用于数据库的地址
-    url: ${spring.datasource.url}
-    username: ${spring.datasource.username}
-    password: ${spring.datasource.password}
-
---- #################### 监控相关配置 ####################
-
-# Actuator 监控端点的配置项
-management:
-  endpoints:
-    web:
-      exposure:
-        include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
-
-# Spring Boot Admin 配置项
-spring:
-  boot:
-    admin:
-      # Spring Boot Admin Client 客户端的相关配置
-      client:
-        url: http://127.0.0.1:8080/${spring.boot.admin.context-path} # 设置 Spring Boot Admin Server 地址
-      # Spring Boot Admin Server 服务端的相关配置
-      context-path: /admin # 配置 Spring
-
---- #################### 芋道相关配置 ####################
-
-# 芋道配置项,设置当前项目所有自定义的配置
-yudao:
-  info:
-    version: 1.0.0
-    base-package: cn.iocoder.dashboard
-  web:
-    api-prefix: /api
-    controller-package: ${yudao.info.base-package}
-  security:
-    token-header: Authorization
-    token-secret: abcdefghijklmnopqrstuvwxyz
-    token-timeout: 1d
-    session-timeout: 30m
-    mock-enable: true
-    mock-secret: test
-  swagger:
-    title: 管理后台
-    description: 提供管理员管理的所有功能
-    version: ${yudao.info.base-package}
-    base-package: ${yudao.info.base-package}.modules
-  captcha:
-    timeout: 5m
-    width: 160
-    height: 60
-  file:
-    base-path: http://127.0.0.1:${server.port}/${yudao.web.api-prefix}/file/get/
-  codegen:
-    base-package: ${yudao.info.base-package}.modules
-    db-schemas: ${spring.datasource.name}