refactor(deploy): 迁移CI/CD至双服务器架构
- Jenkinsfile: Registry改为Infra内网172.17.16.7:5000,部署目标改为Prod内网172.17.16.14 - docker-compose: 镜像源改为172.17.16.7:5000,MySQL改为172.17.16.8,Redis改为172.17.16.13,RocketMQ改为腾讯云TDMQ - 所有模块application-prod.yaml: 统一更新MySQL/Redis/RocketMQ默认连接地址 - deploy.sh: Registry地址同步更新 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
8
Jenkinsfile
vendored
8
Jenkinsfile
vendored
@@ -17,15 +17,15 @@ pipeline {
|
|||||||
}
|
}
|
||||||
|
|
||||||
environment {
|
environment {
|
||||||
// 镜像仓库配置
|
// 镜像仓库配置(Infra 服务器内网地址,Prod 服务器可通过内网拉取)
|
||||||
REGISTRY = 'localhost:5000'
|
REGISTRY = '172.17.16.7:5000'
|
||||||
DEPS_IMAGE = "${REGISTRY}/aiot-deps:latest"
|
DEPS_IMAGE = "${REGISTRY}/aiot-deps:latest"
|
||||||
|
|
||||||
// 服务配置
|
// 服务配置
|
||||||
CORE_SERVICES = 'viewsh-gateway,viewsh-module-system-server,viewsh-module-infra-server,viewsh-module-iot-server,viewsh-module-iot-gateway,viewsh-module-ops-server'
|
CORE_SERVICES = 'viewsh-gateway,viewsh-module-system-server,viewsh-module-infra-server,viewsh-module-iot-server,viewsh-module-iot-gateway,viewsh-module-ops-server'
|
||||||
|
|
||||||
// 部署配置
|
// 部署配置(Prod 服务器内网地址)
|
||||||
DEPLOY_HOST = '172.19.0.1'
|
DEPLOY_HOST = '172.17.16.14'
|
||||||
DEPLOY_PATH = '/opt/aiot-platform-cloud'
|
DEPLOY_PATH = '/opt/aiot-platform-cloud'
|
||||||
SSH_KEY = '/var/jenkins_home/.ssh/id_rsa'
|
SSH_KEY = '/var/jenkins_home/.ssh/id_rsa'
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ volumes:
|
|||||||
|
|
||||||
services:
|
services:
|
||||||
viewsh-gateway:
|
viewsh-gateway:
|
||||||
image: ${REGISTRY_HOST:-localhost:5000}/viewsh-gateway:${IMAGE_TAG:-latest}
|
image: ${REGISTRY_HOST:-172.17.16.7:5000}/viewsh-gateway:${IMAGE_TAG:-latest}
|
||||||
container_name: aiot-gateway
|
container_name: aiot-gateway
|
||||||
restart: on-failure:5
|
restart: on-failure:5
|
||||||
ports:
|
ports:
|
||||||
@@ -31,9 +31,9 @@ services:
|
|||||||
NACOS_CONFIG_NAMESPACE: "8efd6d96-de7f-4664-b28e-c2788ffa1395"
|
NACOS_CONFIG_NAMESPACE: "8efd6d96-de7f-4664-b28e-c2788ffa1395"
|
||||||
|
|
||||||
# ===== Redis 配置 =====
|
# ===== Redis 配置 =====
|
||||||
SPRING_DATA_REDIS_HOST: 172.17.16.14
|
SPRING_DATA_REDIS_HOST: 172.17.16.13
|
||||||
SPRING_DATA_REDIS_PORT: 6379
|
SPRING_DATA_REDIS_PORT: 6379
|
||||||
SPRING_DATA_REDIS_PASSWORD: "9kHXcZ1ojFsD"
|
SPRING_DATA_REDIS_PASSWORD: "HkVZkVnn1"
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
- app-logs:/app/logs
|
- app-logs:/app/logs
|
||||||
@@ -50,7 +50,7 @@ services:
|
|||||||
start_period: 120s
|
start_period: 120s
|
||||||
|
|
||||||
viewsh-module-system-server:
|
viewsh-module-system-server:
|
||||||
image: ${REGISTRY_HOST:-localhost:5000}/viewsh-module-system-server:${IMAGE_TAG:-latest}
|
image: ${REGISTRY_HOST:-172.17.16.7:5000}/viewsh-module-system-server:${IMAGE_TAG:-latest}
|
||||||
container_name: aiot-system-server
|
container_name: aiot-system-server
|
||||||
restart: on-failure:5
|
restart: on-failure:5
|
||||||
ports:
|
ports:
|
||||||
@@ -68,13 +68,13 @@ services:
|
|||||||
NACOS_CONFIG_NAMESPACE: "8efd6d96-de7f-4664-b28e-c2788ffa1395"
|
NACOS_CONFIG_NAMESPACE: "8efd6d96-de7f-4664-b28e-c2788ffa1395"
|
||||||
|
|
||||||
# 数据库
|
# 数据库
|
||||||
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_URL: jdbc:mysql://172.17.16.14:3306/aiot-platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_URL: jdbc:mysql://172.17.16.8:3306/aiot-platform-test?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
||||||
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_USERNAME: root # TODO: 填入数据库用户名
|
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_USERNAME: root # TODO: 填入数据库用户名
|
||||||
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_PASSWORD: "65p^VTPi9Qd+" # TODO: 填入数据库密码
|
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_PASSWORD: "tKi8rfUJjVrf@" # TODO: 填入数据库密码
|
||||||
|
|
||||||
# Redis
|
# Redis
|
||||||
SPRING_DATA_REDIS_HOST: 172.17.16.14
|
SPRING_DATA_REDIS_HOST: 172.17.16.13
|
||||||
SPRING_DATA_REDIS_PASSWORD: "9kHXcZ1ojFsD" # TODO: 填入 Redis 密码
|
SPRING_DATA_REDIS_PASSWORD: "HkVZkVnn1" # TODO: 填入 Redis 密码
|
||||||
|
|
||||||
# 微信配置 (解决 appid 不能为 null)
|
# 微信配置 (解决 appid 不能为 null)
|
||||||
WX_MP_APP_ID: "wx5b23ba7a5589ecbb"
|
WX_MP_APP_ID: "wx5b23ba7a5589ecbb"
|
||||||
@@ -103,7 +103,7 @@ services:
|
|||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
|
|
||||||
viewsh-module-infra-server:
|
viewsh-module-infra-server:
|
||||||
image: ${REGISTRY_HOST:-localhost:5000}/viewsh-module-infra-server:${IMAGE_TAG:-latest}
|
image: ${REGISTRY_HOST:-172.17.16.7:5000}/viewsh-module-infra-server:${IMAGE_TAG:-latest}
|
||||||
container_name: aiot-infra-server
|
container_name: aiot-infra-server
|
||||||
restart: on-failure:5
|
restart: on-failure:5
|
||||||
ports:
|
ports:
|
||||||
@@ -119,12 +119,12 @@ services:
|
|||||||
NACOS_DISCOVERY_NAMESPACE: "8efd6d96-de7f-4664-b28e-c2788ffa1395"
|
NACOS_DISCOVERY_NAMESPACE: "8efd6d96-de7f-4664-b28e-c2788ffa1395"
|
||||||
NACOS_CONFIG_NAMESPACE: "8efd6d96-de7f-4664-b28e-c2788ffa1395"
|
NACOS_CONFIG_NAMESPACE: "8efd6d96-de7f-4664-b28e-c2788ffa1395"
|
||||||
|
|
||||||
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_URL: jdbc:mysql://172.17.16.14:3306/aiot-platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_URL: jdbc:mysql://172.17.16.8:3306/aiot-platform-test?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
||||||
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_USERNAME: root
|
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_USERNAME: root
|
||||||
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_PASSWORD: "65p^VTPi9Qd+"
|
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_PASSWORD: "tKi8rfUJjVrf@"
|
||||||
|
|
||||||
SPRING_DATA_REDIS_HOST: 172.17.16.14
|
SPRING_DATA_REDIS_HOST: 172.17.16.13
|
||||||
SPRING_DATA_REDIS_PASSWORD: "9kHXcZ1ojFsD"
|
SPRING_DATA_REDIS_PASSWORD: "HkVZkVnn1"
|
||||||
|
|
||||||
# XXL-Job 调度中心地址
|
# XXL-Job 调度中心地址
|
||||||
XXL_JOB_ADMIN_ADDRESSES: http://172.17.16.14:19090/xxl-job-admin
|
XXL_JOB_ADMIN_ADDRESSES: http://172.17.16.14:19090/xxl-job-admin
|
||||||
@@ -142,7 +142,7 @@ services:
|
|||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
|
|
||||||
viewsh-module-iot-server:
|
viewsh-module-iot-server:
|
||||||
image: ${REGISTRY_HOST:-localhost:5000}/viewsh-module-iot-server:${IMAGE_TAG:-latest}
|
image: ${REGISTRY_HOST:-172.17.16.7:5000}/viewsh-module-iot-server:${IMAGE_TAG:-latest}
|
||||||
container_name: aiot-iot-server
|
container_name: aiot-iot-server
|
||||||
restart: on-failure:5
|
restart: on-failure:5
|
||||||
ports:
|
ports:
|
||||||
@@ -158,14 +158,14 @@ services:
|
|||||||
NACOS_DISCOVERY_NAMESPACE: "8efd6d96-de7f-4664-b28e-c2788ffa1395"
|
NACOS_DISCOVERY_NAMESPACE: "8efd6d96-de7f-4664-b28e-c2788ffa1395"
|
||||||
NACOS_CONFIG_NAMESPACE: "8efd6d96-de7f-4664-b28e-c2788ffa1395"
|
NACOS_CONFIG_NAMESPACE: "8efd6d96-de7f-4664-b28e-c2788ffa1395"
|
||||||
|
|
||||||
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_URL: jdbc:mysql://172.17.16.14:3306/aiot-platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_URL: jdbc:mysql://172.17.16.8:3306/aiot-platform-test?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
||||||
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_USERNAME: root
|
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_USERNAME: root
|
||||||
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_PASSWORD: "65p^VTPi9Qd+"
|
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_PASSWORD: "tKi8rfUJjVrf@"
|
||||||
|
|
||||||
SPRING_DATA_REDIS_HOST: 172.17.16.14
|
SPRING_DATA_REDIS_HOST: 172.17.16.13
|
||||||
SPRING_DATA_REDIS_PASSWORD: "9kHXcZ1ojFsD"
|
SPRING_DATA_REDIS_PASSWORD: "HkVZkVnn1"
|
||||||
|
|
||||||
ROCKETMQ_NAME_SERVER: 172.17.16.14:9876
|
ROCKETMQ_NAME_SERVER: rmq-4wd73bxpv.rocketmq.sh.qcloud.tencenttdmq.com:8080
|
||||||
|
|
||||||
# TDengine
|
# TDengine
|
||||||
TDENGINE_HOST: 172.17.16.14
|
TDENGINE_HOST: 172.17.16.14
|
||||||
@@ -194,7 +194,7 @@ services:
|
|||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
|
|
||||||
viewsh-module-iot-gateway:
|
viewsh-module-iot-gateway:
|
||||||
image: ${REGISTRY_HOST:-localhost:5000}/viewsh-module-iot-gateway:${IMAGE_TAG:-latest}
|
image: ${REGISTRY_HOST:-172.17.16.7:5000}/viewsh-module-iot-gateway:${IMAGE_TAG:-latest}
|
||||||
container_name: aiot-iot-gateway
|
container_name: aiot-iot-gateway
|
||||||
restart: on-failure:5
|
restart: on-failure:5
|
||||||
ports:
|
ports:
|
||||||
@@ -207,10 +207,10 @@ services:
|
|||||||
SPRING_PROFILES_ACTIVE: prod
|
SPRING_PROFILES_ACTIVE: prod
|
||||||
JAVA_OPTS: "-Xms1024m -Xmx2048m -XX:+UseContainerSupport -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/app/logs"
|
JAVA_OPTS: "-Xms1024m -Xmx2048m -XX:+UseContainerSupport -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/app/logs"
|
||||||
|
|
||||||
SPRING_DATA_REDIS_HOST: 172.17.16.14
|
SPRING_DATA_REDIS_HOST: 172.17.16.13
|
||||||
SPRING_DATA_REDIS_PASSWORD: "9kHXcZ1ojFsD"
|
SPRING_DATA_REDIS_PASSWORD: "HkVZkVnn1"
|
||||||
|
|
||||||
ROCKETMQ_NAME_SERVER: 172.17.16.14:9876
|
ROCKETMQ_NAME_SERVER: rmq-4wd73bxpv.rocketmq.sh.qcloud.tencenttdmq.com:8080
|
||||||
# 添加这一行
|
# 添加这一行
|
||||||
VIEWSH_IOT_GATEWAY_RPC_URL: "http://aiot-iot-server:48091"
|
VIEWSH_IOT_GATEWAY_RPC_URL: "http://aiot-iot-server:48091"
|
||||||
volumes:
|
volumes:
|
||||||
@@ -224,7 +224,7 @@ services:
|
|||||||
- viewsh-module-iot-server
|
- viewsh-module-iot-server
|
||||||
|
|
||||||
viewsh-module-ops-server:
|
viewsh-module-ops-server:
|
||||||
image: ${REGISTRY_HOST:-localhost:5000}/viewsh-module-ops-server:${IMAGE_TAG:-latest}
|
image: ${REGISTRY_HOST:-172.17.16.7:5000}/viewsh-module-ops-server:${IMAGE_TAG:-latest}
|
||||||
container_name: aiot-ops-server
|
container_name: aiot-ops-server
|
||||||
restart: on-failure:5
|
restart: on-failure:5
|
||||||
ports:
|
ports:
|
||||||
@@ -240,14 +240,14 @@ services:
|
|||||||
NACOS_DISCOVERY_NAMESPACE: "8efd6d96-de7f-4664-b28e-c2788ffa1395"
|
NACOS_DISCOVERY_NAMESPACE: "8efd6d96-de7f-4664-b28e-c2788ffa1395"
|
||||||
NACOS_CONFIG_NAMESPACE: "8efd6d96-de7f-4664-b28e-c2788ffa1395"
|
NACOS_CONFIG_NAMESPACE: "8efd6d96-de7f-4664-b28e-c2788ffa1395"
|
||||||
|
|
||||||
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_URL: jdbc:mysql://172.17.16.14:3306/aiot-platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_URL: jdbc:mysql://172.17.16.8:3306/aiot-platform-test?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
||||||
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_USERNAME: root
|
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_USERNAME: root
|
||||||
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_PASSWORD: "65p^VTPi9Qd+"
|
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_PASSWORD: "tKi8rfUJjVrf@"
|
||||||
|
|
||||||
SPRING_DATA_REDIS_HOST: 172.17.16.14
|
SPRING_DATA_REDIS_HOST: 172.17.16.13
|
||||||
SPRING_DATA_REDIS_PASSWORD: "9kHXcZ1ojFsD"
|
SPRING_DATA_REDIS_PASSWORD: "HkVZkVnn1"
|
||||||
|
|
||||||
ROCKETMQ_NAME_SERVER: 172.17.16.14:9876
|
ROCKETMQ_NAME_SERVER: rmq-4wd73bxpv.rocketmq.sh.qcloud.tencenttdmq.com:8080
|
||||||
|
|
||||||
# XXL-Job 调度中心地址
|
# XXL-Job 调度中心地址
|
||||||
XXL_JOB_ADMIN_ADDRESSES: http://172.17.16.14:19090/xxl-job-admin
|
XXL_JOB_ADMIN_ADDRESSES: http://172.17.16.14:19090/xxl-job-admin
|
||||||
|
|||||||
@@ -1,230 +1,230 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# ============================================
|
# ============================================
|
||||||
# AIOT Platform - 部署脚本
|
# AIOT Platform - 部署脚本
|
||||||
# 滚动更新部署,支持健康检查和自动回滚
|
# 滚动更新部署,支持健康检查和自动回滚
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# 颜色输出
|
# 颜色输出
|
||||||
RED='\033[0;31m'
|
RED='\033[0;31m'
|
||||||
GREEN='\033[0;32m'
|
GREEN='\033[0;32m'
|
||||||
YELLOW='\033[1;33m'
|
YELLOW='\033[1;33m'
|
||||||
NC='\033[0m' # No Color
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
# 配置
|
# 配置
|
||||||
COMPOSE_FILE="docker-compose.core.yml"
|
COMPOSE_FILE="docker-compose.core.yml"
|
||||||
REGISTRY="localhost:5000"
|
REGISTRY="172.17.16.7:5000"
|
||||||
HEALTH_CHECK_TIMEOUT=120
|
HEALTH_CHECK_TIMEOUT=120
|
||||||
HEALTH_CHECK_INTERVAL=5
|
HEALTH_CHECK_INTERVAL=5
|
||||||
|
|
||||||
# 日志函数
|
# 日志函数
|
||||||
log_info() {
|
log_info() {
|
||||||
echo -e "${GREEN}[INFO]${NC} $1"
|
echo -e "${GREEN}[INFO]${NC} $1"
|
||||||
}
|
}
|
||||||
|
|
||||||
log_warn() {
|
log_warn() {
|
||||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||||
}
|
}
|
||||||
|
|
||||||
log_error() {
|
log_error() {
|
||||||
echo -e "${RED}[ERROR]${NC} $1"
|
echo -e "${RED}[ERROR]${NC} $1"
|
||||||
}
|
}
|
||||||
|
|
||||||
# 检查服务健康状态
|
# 检查服务健康状态
|
||||||
check_health() {
|
check_health() {
|
||||||
local service=$1
|
local service=$1
|
||||||
local container_name="aiot-${service}"
|
local container_name="aiot-${service}"
|
||||||
local elapsed=0
|
local elapsed=0
|
||||||
|
|
||||||
log_info "等待 ${service} 健康检查..."
|
log_info "等待 ${service} 健康检查..."
|
||||||
|
|
||||||
while [ $elapsed -lt $HEALTH_CHECK_TIMEOUT ]; do
|
while [ $elapsed -lt $HEALTH_CHECK_TIMEOUT ]; do
|
||||||
if docker inspect --format='{{.State.Health.Status}}' "$container_name" 2>/dev/null | grep -q "healthy"; then
|
if docker inspect --format='{{.State.Health.Status}}' "$container_name" 2>/dev/null | grep -q "healthy"; then
|
||||||
log_info "${service} 健康检查通过 ✓"
|
log_info "${service} 健康检查通过 ✓"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
sleep $HEALTH_CHECK_INTERVAL
|
sleep $HEALTH_CHECK_INTERVAL
|
||||||
elapsed=$((elapsed + HEALTH_CHECK_INTERVAL))
|
elapsed=$((elapsed + HEALTH_CHECK_INTERVAL))
|
||||||
echo -n "."
|
echo -n "."
|
||||||
done
|
done
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
log_error "${service} 健康检查超时 ✗"
|
log_error "${service} 健康检查超时 ✗"
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
# 备份当前运行的镜像标签
|
# 备份当前运行的镜像标签
|
||||||
backup_current_tags() {
|
backup_current_tags() {
|
||||||
log_info "备份当前镜像标签..."
|
log_info "备份当前镜像标签..."
|
||||||
|
|
||||||
docker-compose -f "$COMPOSE_FILE" config --services | while read service; do
|
docker-compose -f "$COMPOSE_FILE" config --services | while read service; do
|
||||||
local current_image=$(docker inspect "aiot-${service}" --format='{{.Config.Image}}' 2>/dev/null || echo "")
|
local current_image=$(docker inspect "aiot-${service}" --format='{{.Config.Image}}' 2>/dev/null || echo "")
|
||||||
if [ -n "$current_image" ]; then
|
if [ -n "$current_image" ]; then
|
||||||
echo "${service}=${current_image}" >> .deploy_backup
|
echo "${service}=${current_image}" >> .deploy_backup
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
log_info "备份完成: .deploy_backup"
|
log_info "备份完成: .deploy_backup"
|
||||||
}
|
}
|
||||||
|
|
||||||
# 部署单个服务
|
# 部署单个服务
|
||||||
deploy_service() {
|
deploy_service() {
|
||||||
local service=$1
|
local service=$1
|
||||||
|
|
||||||
log_info "========================================="
|
log_info "========================================="
|
||||||
log_info "部署服务: ${service}"
|
log_info "部署服务: ${service}"
|
||||||
log_info "========================================="
|
log_info "========================================="
|
||||||
|
|
||||||
# 拉取最新镜像
|
# 拉取最新镜像
|
||||||
log_info "拉取最新镜像..."
|
log_info "拉取最新镜像..."
|
||||||
if ! docker-compose -f "$COMPOSE_FILE" pull "$service"; then
|
if ! docker-compose -f "$COMPOSE_FILE" pull "$service"; then
|
||||||
log_error "拉取镜像失败"
|
log_error "拉取镜像失败"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 启动新容器
|
# 启动新容器
|
||||||
log_info "启动新容器..."
|
log_info "启动新容器..."
|
||||||
if ! docker-compose -f "$COMPOSE_FILE" up -d "$service"; then
|
if ! docker-compose -f "$COMPOSE_FILE" up -d "$service"; then
|
||||||
log_error "启动容器失败"
|
log_error "启动容器失败"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 健康检查
|
# 健康检查
|
||||||
if ! check_health "$service"; then
|
if ! check_health "$service"; then
|
||||||
log_error "${service} 部署失败,准备回滚..."
|
log_error "${service} 部署失败,准备回滚..."
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log_info "${service} 部署成功 ✓"
|
log_info "${service} 部署成功 ✓"
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
# 回滚服务
|
# 回滚服务
|
||||||
rollback_service() {
|
rollback_service() {
|
||||||
local service=$1
|
local service=$1
|
||||||
|
|
||||||
log_warn "回滚服务: ${service}"
|
log_warn "回滚服务: ${service}"
|
||||||
|
|
||||||
# 从备份文件读取之前的镜像
|
# 从备份文件读取之前的镜像
|
||||||
if [ -f .deploy_backup ]; then
|
if [ -f .deploy_backup ]; then
|
||||||
local backup_image=$(grep "^${service}=" .deploy_backup | cut -d'=' -f2)
|
local backup_image=$(grep "^${service}=" .deploy_backup | cut -d'=' -f2)
|
||||||
|
|
||||||
if [ -n "$backup_image" ]; then
|
if [ -n "$backup_image" ]; then
|
||||||
log_info "回滚到镜像: ${backup_image}"
|
log_info "回滚到镜像: ${backup_image}"
|
||||||
|
|
||||||
docker-compose -f "$COMPOSE_FILE" stop "$service"
|
docker-compose -f "$COMPOSE_FILE" stop "$service"
|
||||||
docker tag "$backup_image" "${REGISTRY}/${service}:latest"
|
docker tag "$backup_image" "${REGISTRY}/${service}:latest"
|
||||||
docker-compose -f "$COMPOSE_FILE" up -d "$service"
|
docker-compose -f "$COMPOSE_FILE" up -d "$service"
|
||||||
|
|
||||||
if check_health "$service"; then
|
if check_health "$service"; then
|
||||||
log_info "${service} 回滚成功 ✓"
|
log_info "${service} 回滚成功 ✓"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log_error "${service} 回滚失败 ✗"
|
log_error "${service} 回滚失败 ✗"
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
# 主部署流程
|
# 主部署流程
|
||||||
main() {
|
main() {
|
||||||
log_info "========================================="
|
log_info "========================================="
|
||||||
log_info "AIOT Platform 部署开始"
|
log_info "AIOT Platform 部署开始"
|
||||||
log_info "========================================="
|
log_info "========================================="
|
||||||
|
|
||||||
# 检查 .env 文件
|
# 检查 .env 文件
|
||||||
if [ ! -f .env ]; then
|
if [ ! -f .env ]; then
|
||||||
log_error ".env 文件不存在,请先复制 .env.example 并配置"
|
log_error ".env 文件不存在,请先复制 .env.example 并配置"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 加载环境变量
|
# 加载环境变量
|
||||||
source .env
|
source .env
|
||||||
|
|
||||||
# 备份当前状态
|
# 备份当前状态
|
||||||
rm -f .deploy_backup
|
rm -f .deploy_backup
|
||||||
backup_current_tags
|
backup_current_tags
|
||||||
|
|
||||||
# 获取要部署的服务列表
|
# 获取要部署的服务列表
|
||||||
local services_to_deploy=""
|
local services_to_deploy=""
|
||||||
|
|
||||||
if [ $# -eq 0 ]; then
|
if [ $# -eq 0 ]; then
|
||||||
# 部署所有核心服务
|
# 部署所有核心服务
|
||||||
services_to_deploy=$(docker-compose -f "$COMPOSE_FILE" config --services | grep -v -E "mysql|redis|nacos|rocketmq")
|
services_to_deploy=$(docker-compose -f "$COMPOSE_FILE" config --services | grep -v -E "mysql|redis|nacos|rocketmq")
|
||||||
else
|
else
|
||||||
# 部署指定服务
|
# 部署指定服务
|
||||||
services_to_deploy="$@"
|
services_to_deploy="$@"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log_info "待部署服务: ${services_to_deploy}"
|
log_info "待部署服务: ${services_to_deploy}"
|
||||||
|
|
||||||
# 部署服务
|
# 部署服务
|
||||||
local failed_services=""
|
local failed_services=""
|
||||||
|
|
||||||
for service in $services_to_deploy; do
|
for service in $services_to_deploy; do
|
||||||
if ! deploy_service "$service"; then
|
if ! deploy_service "$service"; then
|
||||||
failed_services="${failed_services} ${service}"
|
failed_services="${failed_services} ${service}"
|
||||||
|
|
||||||
# 尝试回滚
|
# 尝试回滚
|
||||||
rollback_service "$service"
|
rollback_service "$service"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# 清理旧镜像
|
# 清理旧镜像
|
||||||
log_info "清理悬空镜像..."
|
log_info "清理悬空镜像..."
|
||||||
docker image prune -f
|
docker image prune -f
|
||||||
|
|
||||||
# 部署结果
|
# 部署结果
|
||||||
echo ""
|
echo ""
|
||||||
log_info "========================================="
|
log_info "========================================="
|
||||||
if [ -z "$failed_services" ]; then
|
if [ -z "$failed_services" ]; then
|
||||||
log_info "所有服务部署成功 ✓"
|
log_info "所有服务部署成功 ✓"
|
||||||
log_info "========================================="
|
log_info "========================================="
|
||||||
rm -f .deploy_backup
|
rm -f .deploy_backup
|
||||||
exit 0
|
exit 0
|
||||||
else
|
else
|
||||||
log_error "以下服务部署失败: ${failed_services}"
|
log_error "以下服务部署失败: ${failed_services}"
|
||||||
log_error "========================================="
|
log_error "========================================="
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# 显示帮助
|
# 显示帮助
|
||||||
show_help() {
|
show_help() {
|
||||||
cat << EOF
|
cat << EOF
|
||||||
用法: $0 [服务名...]
|
用法: $0 [服务名...]
|
||||||
|
|
||||||
部署 AIOT Platform 服务到生产环境
|
部署 AIOT Platform 服务到生产环境
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
无参数 部署所有应用服务
|
无参数 部署所有应用服务
|
||||||
服务名... 部署指定的服务
|
服务名... 部署指定的服务
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
$0 # 部署所有服务
|
$0 # 部署所有服务
|
||||||
$0 viewsh-gateway # 仅部署 gateway
|
$0 viewsh-gateway # 仅部署 gateway
|
||||||
$0 viewsh-module-iot-server viewsh-module-iot-gateway # 部署多个服务
|
$0 viewsh-module-iot-server viewsh-module-iot-gateway # 部署多个服务
|
||||||
|
|
||||||
服务列表:
|
服务列表:
|
||||||
- viewsh-gateway
|
- viewsh-gateway
|
||||||
- viewsh-module-system-server
|
- viewsh-module-system-server
|
||||||
- viewsh-module-infra-server
|
- viewsh-module-infra-server
|
||||||
- viewsh-module-iot-server
|
- viewsh-module-iot-server
|
||||||
- viewsh-module-iot-gateway
|
- viewsh-module-iot-gateway
|
||||||
- viewsh-module-ops-server
|
- viewsh-module-ops-server
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
# 参数处理
|
# 参数处理
|
||||||
if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
|
if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
|
||||||
show_help
|
show_help
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 执行主流程
|
# 执行主流程
|
||||||
main "$@"
|
main "$@"
|
||||||
|
|||||||
@@ -1,75 +1,75 @@
|
|||||||
--- #################### 注册中心 + 配置中心相关配置 ####################
|
--- #################### 注册中心 + 配置中心相关配置 ####################
|
||||||
|
|
||||||
spring:
|
spring:
|
||||||
cloud:
|
cloud:
|
||||||
nacos:
|
nacos:
|
||||||
server-addr: ${NACOS_ADDR:127.0.0.1:8848}
|
server-addr: ${NACOS_ADDR:127.0.0.1:8848}
|
||||||
username: ${NACOS_USERNAME:nacos}
|
username: ${NACOS_USERNAME:nacos}
|
||||||
password: ${NACOS_PASSWORD:nacos}
|
password: ${NACOS_PASSWORD:nacos}
|
||||||
discovery:
|
discovery:
|
||||||
namespace: ${NACOS_DISCOVERY_NAMESPACE:prod}
|
namespace: ${NACOS_DISCOVERY_NAMESPACE:prod}
|
||||||
group: DEFAULT_GROUP
|
group: DEFAULT_GROUP
|
||||||
metadata:
|
metadata:
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
config:
|
config:
|
||||||
namespace: ${NACOS_CONFIG_NAMESPACE:prod}
|
namespace: ${NACOS_CONFIG_NAMESPACE:prod}
|
||||||
group: DEFAULT_GROUP
|
group: DEFAULT_GROUP
|
||||||
file-extension: yaml
|
file-extension: yaml
|
||||||
refresh-enabled: true
|
refresh-enabled: true
|
||||||
|
|
||||||
--- #################### Redis 配置 ####################
|
--- #################### Redis 配置 ####################
|
||||||
spring:
|
spring:
|
||||||
data:
|
data:
|
||||||
redis:
|
redis:
|
||||||
host: 127.0.0.1
|
host: 172.17.16.13
|
||||||
port: 6379
|
port: 6379
|
||||||
database: 0
|
database: 0
|
||||||
password: ""
|
password: ""
|
||||||
timeout: 5000ms
|
timeout: 5000ms
|
||||||
lettuce:
|
lettuce:
|
||||||
pool:
|
pool:
|
||||||
max-active: 8
|
max-active: 8
|
||||||
max-wait: -1ms
|
max-wait: -1ms
|
||||||
max-idle: 8
|
max-idle: 8
|
||||||
min-idle: 0
|
min-idle: 0
|
||||||
|
|
||||||
--- #################### 服务保障相关配置 ####################
|
--- #################### 服务保障相关配置 ####################
|
||||||
|
|
||||||
lock4j:
|
lock4j:
|
||||||
acquire-timeout: 3000
|
acquire-timeout: 3000
|
||||||
expire: 30000
|
expire: 30000
|
||||||
|
|
||||||
--- #################### 监控相关配置 ####################
|
--- #################### 监控相关配置 ####################
|
||||||
|
|
||||||
management:
|
management:
|
||||||
endpoints:
|
endpoints:
|
||||||
web:
|
web:
|
||||||
base-path: /actuator
|
base-path: /actuator
|
||||||
exposure:
|
exposure:
|
||||||
include: '*'
|
include: '*'
|
||||||
|
|
||||||
spring:
|
spring:
|
||||||
boot:
|
boot:
|
||||||
admin:
|
admin:
|
||||||
client:
|
client:
|
||||||
instance:
|
instance:
|
||||||
service-host-type: IP
|
service-host-type: IP
|
||||||
username: ${SPRING_BOOT_ADMIN_USERNAME:admin}
|
username: ${SPRING_BOOT_ADMIN_USERNAME:admin}
|
||||||
password: ${SPRING_BOOT_ADMIN_PASSWORD:admin}
|
password: ${SPRING_BOOT_ADMIN_PASSWORD:admin}
|
||||||
|
|
||||||
logging:
|
logging:
|
||||||
level:
|
level:
|
||||||
root: INFO
|
root: INFO
|
||||||
com.viewsh: ${LOG_LEVEL:INFO}
|
com.viewsh: ${LOG_LEVEL:INFO}
|
||||||
org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR
|
org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR
|
||||||
file:
|
file:
|
||||||
name: ${LOG_FILE_PATH:/app/logs}/${spring.application.name}.log
|
name: ${LOG_FILE_PATH:/app/logs}/${spring.application.name}.log
|
||||||
|
|
||||||
--- #################### 芋道相关配置 ####################
|
--- #################### 芋道相关配置 ####################
|
||||||
|
|
||||||
viewsh:
|
viewsh:
|
||||||
demo: false
|
demo: false
|
||||||
env:
|
env:
|
||||||
tag: ${HOSTNAME:prod}
|
tag: ${HOSTNAME:prod}
|
||||||
security:
|
security:
|
||||||
mock-enable: false
|
mock-enable: false
|
||||||
|
|||||||
@@ -1,166 +1,166 @@
|
|||||||
--- #################### 注册中心 + 配置中心相关配置 ####################
|
--- #################### 注册中心 + 配置中心相关配置 ####################
|
||||||
|
|
||||||
spring:
|
spring:
|
||||||
cloud:
|
cloud:
|
||||||
nacos:
|
nacos:
|
||||||
server-addr: ${NACOS_ADDR:127.0.0.1:8848}
|
server-addr: ${NACOS_ADDR:127.0.0.1:8848}
|
||||||
username: ${NACOS_USERNAME:nacos}
|
username: ${NACOS_USERNAME:nacos}
|
||||||
password: ${NACOS_PASSWORD:nacos}
|
password: ${NACOS_PASSWORD:nacos}
|
||||||
discovery:
|
discovery:
|
||||||
namespace: ${NACOS_DISCOVERY_NAMESPACE:prod}
|
namespace: ${NACOS_DISCOVERY_NAMESPACE:prod}
|
||||||
group: DEFAULT_GROUP
|
group: DEFAULT_GROUP
|
||||||
metadata:
|
metadata:
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
config:
|
config:
|
||||||
namespace: ${NACOS_CONFIG_NAMESPACE:prod}
|
namespace: ${NACOS_CONFIG_NAMESPACE:prod}
|
||||||
group: DEFAULT_GROUP
|
group: DEFAULT_GROUP
|
||||||
file-extension: yaml
|
file-extension: yaml
|
||||||
refresh-enabled: true
|
refresh-enabled: true
|
||||||
lifecycle:
|
lifecycle:
|
||||||
timeout-per-shutdown-phase: 30s # 增加优雅关闭超时时间
|
timeout-per-shutdown-phase: 30s # 增加优雅关闭超时时间
|
||||||
|
|
||||||
--- #################### 数据库相关配置 ####################
|
--- #################### 数据库相关配置 ####################
|
||||||
spring:
|
spring:
|
||||||
datasource:
|
datasource:
|
||||||
druid:
|
druid:
|
||||||
web-stat-filter:
|
web-stat-filter:
|
||||||
enabled: true
|
enabled: true
|
||||||
stat-view-servlet:
|
stat-view-servlet:
|
||||||
enabled: true
|
enabled: true
|
||||||
url-pattern: /druid/*
|
url-pattern: /druid/*
|
||||||
login-username: ${DRUID_USERNAME:admin}
|
login-username: ${DRUID_USERNAME:admin}
|
||||||
login-password: ${DRUID_PASSWORD:admin}
|
login-password: ${DRUID_PASSWORD:admin}
|
||||||
filter:
|
filter:
|
||||||
stat:
|
stat:
|
||||||
enabled: true
|
enabled: true
|
||||||
log-slow-sql: true
|
log-slow-sql: true
|
||||||
slow-sql-millis: 100
|
slow-sql-millis: 100
|
||||||
merge-sql: true
|
merge-sql: true
|
||||||
wall:
|
wall:
|
||||||
config:
|
config:
|
||||||
multi-statement-allow: true
|
multi-statement-allow: true
|
||||||
dynamic:
|
dynamic:
|
||||||
druid:
|
druid:
|
||||||
initial-size: 5
|
initial-size: 5
|
||||||
min-idle: 10
|
min-idle: 10
|
||||||
max-active: 20
|
max-active: 20
|
||||||
max-wait: 60000
|
max-wait: 60000
|
||||||
time-between-eviction-runs-millis: 60000
|
time-between-eviction-runs-millis: 60000
|
||||||
min-evictable-idle-time-millis: 600000
|
min-evictable-idle-time-millis: 600000
|
||||||
max-evictable-idle-time-millis: 1800000
|
max-evictable-idle-time-millis: 1800000
|
||||||
validation-query: SELECT 1 FROM DUAL
|
validation-query: SELECT 1 FROM DUAL
|
||||||
test-while-idle: true
|
test-while-idle: true
|
||||||
test-on-borrow: false
|
test-on-borrow: false
|
||||||
test-on-return: false
|
test-on-return: false
|
||||||
pool-prepared-statements: true
|
pool-prepared-statements: true
|
||||||
max-pool-prepared-statement-per-connection-size: 20
|
max-pool-prepared-statement-per-connection-size: 20
|
||||||
primary: master
|
primary: master
|
||||||
datasource:
|
datasource:
|
||||||
master:
|
master:
|
||||||
url: jdbc:mysql://${MYSQL_HOST:127.0.0.1}:${MYSQL_PORT:3306}/${MYSQL_DATABASE:aiot_platform}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
url: jdbc:mysql://${MYSQL_HOST:172.17.16.8}:${MYSQL_PORT:3306}/${MYSQL_DATABASE:aiot-platform-test}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
||||||
username: ${MYSQL_USER:root}
|
username: ${MYSQL_USER:root}
|
||||||
password: ${MYSQL_PASSWORD:}
|
password: ${MYSQL_PASSWORD:}
|
||||||
slave:
|
slave:
|
||||||
lazy: true
|
lazy: true
|
||||||
url: jdbc:mysql://${MYSQL_SLAVE_HOST:${MYSQL_HOST:127.0.0.1}}:${MYSQL_SLAVE_PORT:${MYSQL_PORT:3306}}/${MYSQL_DATABASE:aiot_platform}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
url: jdbc:mysql://${MYSQL_SLAVE_HOST:${MYSQL_HOST:172.17.16.8}}:${MYSQL_SLAVE_PORT:${MYSQL_PORT:3306}}/${MYSQL_DATABASE:aiot-platform-test}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
||||||
username: ${MYSQL_SLAVE_USER:${MYSQL_USER:root}}
|
username: ${MYSQL_SLAVE_USER:${MYSQL_USER:root}}
|
||||||
password: ${MYSQL_SLAVE_PASSWORD:${MYSQL_PASSWORD:}}
|
password: ${MYSQL_SLAVE_PASSWORD:${MYSQL_PASSWORD:}}
|
||||||
|
|
||||||
data:
|
data:
|
||||||
redis:
|
redis:
|
||||||
host: ${REDIS_HOST:127.0.0.1}
|
host: ${REDIS_HOST:172.17.16.13}
|
||||||
port: ${REDIS_PORT:6379}
|
port: ${REDIS_PORT:6379}
|
||||||
database: ${REDIS_DATABASE:0}
|
database: ${REDIS_DATABASE:0}
|
||||||
password: ${REDIS_PASSWORD:}
|
password: ${REDIS_PASSWORD:}
|
||||||
timeout: 5000ms
|
timeout: 5000ms
|
||||||
lettuce:
|
lettuce:
|
||||||
pool:
|
pool:
|
||||||
max-active: 8
|
max-active: 8
|
||||||
max-wait: -1ms
|
max-wait: -1ms
|
||||||
max-idle: 8
|
max-idle: 8
|
||||||
min-idle: 0
|
min-idle: 0
|
||||||
|
|
||||||
--- #################### MQ 消息队列相关配置 ####################
|
--- #################### MQ 消息队列相关配置 ####################
|
||||||
|
|
||||||
rocketmq:
|
rocketmq:
|
||||||
name-server: ${ROCKETMQ_NAMESRV_ADDR:127.0.0.1:9876}
|
name-server: ${ROCKETMQ_NAMESRV_ADDR:rmq-4wd73bxpv.rocketmq.sh.qcloud.tencenttdmq.com:8080}
|
||||||
|
|
||||||
spring:
|
spring:
|
||||||
rabbitmq:
|
rabbitmq:
|
||||||
host: ${RABBITMQ_HOST:127.0.0.1}
|
host: ${RABBITMQ_HOST:127.0.0.1}
|
||||||
port: ${RABBITMQ_PORT:5672}
|
port: ${RABBITMQ_PORT:5672}
|
||||||
username: ${RABBITMQ_USERNAME:guest}
|
username: ${RABBITMQ_USERNAME:guest}
|
||||||
password: ${RABBITMQ_PASSWORD:guest}
|
password: ${RABBITMQ_PASSWORD:guest}
|
||||||
kafka:
|
kafka:
|
||||||
bootstrap-servers: ${KAFKA_BOOTSTRAP_SERVERS:127.0.0.1:9092}
|
bootstrap-servers: ${KAFKA_BOOTSTRAP_SERVERS:127.0.0.1:9092}
|
||||||
|
|
||||||
--- #################### 定时任务相关配置 ####################
|
--- #################### 定时任务相关配置 ####################
|
||||||
xxl:
|
xxl:
|
||||||
job:
|
job:
|
||||||
admin:
|
admin:
|
||||||
addresses: ${XXL_JOB_ADMIN_ADDRESSES:http://172.17.16.14:19090/xxl-job-admin}
|
addresses: ${XXL_JOB_ADMIN_ADDRESSES:http://172.17.16.14:19090/xxl-job-admin}
|
||||||
|
|
||||||
--- #################### 服务保障相关配置 ####################
|
--- #################### 服务保障相关配置 ####################
|
||||||
|
|
||||||
lock4j:
|
lock4j:
|
||||||
acquire-timeout: 3000
|
acquire-timeout: 3000
|
||||||
expire: 30000
|
expire: 30000
|
||||||
|
|
||||||
--- #################### 监控相关配置 ####################
|
--- #################### 监控相关配置 ####################
|
||||||
|
|
||||||
management:
|
management:
|
||||||
endpoints:
|
endpoints:
|
||||||
web:
|
web:
|
||||||
base-path: /actuator
|
base-path: /actuator
|
||||||
exposure:
|
exposure:
|
||||||
include: '*'
|
include: '*'
|
||||||
|
|
||||||
spring:
|
spring:
|
||||||
boot:
|
boot:
|
||||||
admin:
|
admin:
|
||||||
client:
|
client:
|
||||||
instance:
|
instance:
|
||||||
service-host-type: IP
|
service-host-type: IP
|
||||||
username: ${SPRING_BOOT_ADMIN_USERNAME:admin}
|
username: ${SPRING_BOOT_ADMIN_USERNAME:admin}
|
||||||
password: ${SPRING_BOOT_ADMIN_PASSWORD:admin}
|
password: ${SPRING_BOOT_ADMIN_PASSWORD:admin}
|
||||||
context-path: /admin # 配置 Spring
|
context-path: /admin # 配置 Spring
|
||||||
|
|
||||||
logging:
|
logging:
|
||||||
level:
|
level:
|
||||||
root: INFO
|
root: INFO
|
||||||
com.viewsh: ${LOG_LEVEL:INFO}
|
com.viewsh: ${LOG_LEVEL:INFO}
|
||||||
com.viewsh.module.infra.dal.mysql: debug
|
com.viewsh.module.infra.dal.mysql: debug
|
||||||
com.viewsh.module.infra.dal.mysql.logger.ApiErrorLogMapper: INFO
|
com.viewsh.module.infra.dal.mysql.logger.ApiErrorLogMapper: INFO
|
||||||
com.viewsh.module.infra.dal.mysql.file.FileConfigMapper: INFO
|
com.viewsh.module.infra.dal.mysql.file.FileConfigMapper: INFO
|
||||||
org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR
|
org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR
|
||||||
file:
|
file:
|
||||||
name: ${LOG_FILE_PATH:/app/logs}/${spring.application.name}.log
|
name: ${LOG_FILE_PATH:/app/logs}/${spring.application.name}.log
|
||||||
|
|
||||||
--- #################### 芋道相关配置 ####################
|
--- #################### 芋道相关配置 ####################
|
||||||
|
|
||||||
viewsh:
|
viewsh:
|
||||||
demo: false
|
demo: false
|
||||||
env:
|
env:
|
||||||
tag: ${HOSTNAME:prod}
|
tag: ${HOSTNAME:prod}
|
||||||
captcha:
|
captcha:
|
||||||
enable: true
|
enable: true
|
||||||
security:
|
security:
|
||||||
mock-enable: false
|
mock-enable: false
|
||||||
|
|
||||||
--- #################### Quartz 优雅关闭配置 ####################
|
--- #################### Quartz 优雅关闭配置 ####################
|
||||||
|
|
||||||
spring:
|
spring:
|
||||||
quartz:
|
quartz:
|
||||||
properties:
|
properties:
|
||||||
org:
|
org:
|
||||||
quartz:
|
quartz:
|
||||||
scheduler:
|
scheduler:
|
||||||
makeSchedulerThreadDaemon: true
|
makeSchedulerThreadDaemon: true
|
||||||
shutdownHook: clean_shutdown
|
shutdownHook: clean_shutdown
|
||||||
threadPool:
|
threadPool:
|
||||||
threadNamePrefix: QuartzSchedulerThread
|
threadNamePrefix: QuartzSchedulerThread
|
||||||
threadsInheritContextClassLoaderOfInitializingThread: true
|
threadsInheritContextClassLoaderOfInitializingThread: true
|
||||||
plugin:
|
plugin:
|
||||||
shutdownhook:
|
shutdownhook:
|
||||||
class: org.quartz.plugins.management.ShutdownHookPlugin
|
class: org.quartz.plugins.management.ShutdownHookPlugin
|
||||||
cleanShutdown: true
|
cleanShutdown: true
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ spring:
|
|||||||
# Redis 配置
|
# Redis 配置
|
||||||
data:
|
data:
|
||||||
redis:
|
redis:
|
||||||
host: ${REDIS_HOST:127.0.0.1}
|
host: ${REDIS_HOST:172.17.16.13}
|
||||||
port: ${REDIS_PORT:6379}
|
port: ${REDIS_PORT:6379}
|
||||||
database: ${REDIS_DATABASE:0}
|
database: ${REDIS_DATABASE:0}
|
||||||
password: ${REDIS_PASSWORD:}
|
password: ${REDIS_PASSWORD:}
|
||||||
@@ -19,7 +19,7 @@ spring:
|
|||||||
|
|
||||||
# rocketmq 配置项,对应 RocketMQProperties 配置类
|
# rocketmq 配置项,对应 RocketMQProperties 配置类
|
||||||
rocketmq:
|
rocketmq:
|
||||||
name-server: ${ROCKETMQ_NAMESRV_ADDR:127.0.0.1:9876}
|
name-server: ${ROCKETMQ_NAMESRV_ADDR:rmq-4wd73bxpv.rocketmq.sh.qcloud.tencenttdmq.com:8080}
|
||||||
# Producer 配置项
|
# Producer 配置项
|
||||||
producer:
|
producer:
|
||||||
group: ${spring.application.name}_PRODUCER
|
group: ${spring.application.name}_PRODUCER
|
||||||
|
|||||||
@@ -1,156 +1,156 @@
|
|||||||
--- #################### 注册中心 + 配置中心相关配置 ####################
|
--- #################### 注册中心 + 配置中心相关配置 ####################
|
||||||
|
|
||||||
spring:
|
spring:
|
||||||
cloud:
|
cloud:
|
||||||
nacos:
|
nacos:
|
||||||
server-addr: ${NACOS_ADDR:127.0.0.1:8848}
|
server-addr: ${NACOS_ADDR:127.0.0.1:8848}
|
||||||
username: ${NACOS_USERNAME:nacos}
|
username: ${NACOS_USERNAME:nacos}
|
||||||
password: ${NACOS_PASSWORD:nacos}
|
password: ${NACOS_PASSWORD:nacos}
|
||||||
discovery:
|
discovery:
|
||||||
namespace: ${NACOS_DISCOVERY_NAMESPACE:prod}
|
namespace: ${NACOS_DISCOVERY_NAMESPACE:prod}
|
||||||
group: DEFAULT_GROUP
|
group: DEFAULT_GROUP
|
||||||
metadata:
|
metadata:
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
config:
|
config:
|
||||||
namespace: ${NACOS_CONFIG_NAMESPACE:prod}
|
namespace: ${NACOS_CONFIG_NAMESPACE:prod}
|
||||||
group: DEFAULT_GROUP
|
group: DEFAULT_GROUP
|
||||||
file-extension: yaml
|
file-extension: yaml
|
||||||
refresh-enabled: true
|
refresh-enabled: true
|
||||||
|
|
||||||
--- #################### 数据库相关配置 ####################
|
--- #################### 数据库相关配置 ####################
|
||||||
spring:
|
spring:
|
||||||
datasource:
|
datasource:
|
||||||
druid:
|
druid:
|
||||||
web-stat-filter:
|
web-stat-filter:
|
||||||
enabled: true
|
enabled: true
|
||||||
stat-view-servlet:
|
stat-view-servlet:
|
||||||
enabled: true
|
enabled: true
|
||||||
url-pattern: /druid/*
|
url-pattern: /druid/*
|
||||||
login-username: ${DRUID_USERNAME:admin}
|
login-username: ${DRUID_USERNAME:admin}
|
||||||
login-password: ${DRUID_PASSWORD:admin}
|
login-password: ${DRUID_PASSWORD:admin}
|
||||||
filter:
|
filter:
|
||||||
stat:
|
stat:
|
||||||
enabled: true
|
enabled: true
|
||||||
log-slow-sql: true
|
log-slow-sql: true
|
||||||
slow-sql-millis: 100
|
slow-sql-millis: 100
|
||||||
merge-sql: true
|
merge-sql: true
|
||||||
wall:
|
wall:
|
||||||
config:
|
config:
|
||||||
multi-statement-allow: true
|
multi-statement-allow: true
|
||||||
dynamic:
|
dynamic:
|
||||||
druid:
|
druid:
|
||||||
initial-size: 5
|
initial-size: 5
|
||||||
min-idle: 10
|
min-idle: 10
|
||||||
max-active: 20
|
max-active: 20
|
||||||
max-wait: 60000
|
max-wait: 60000
|
||||||
time-between-eviction-runs-millis: 60000
|
time-between-eviction-runs-millis: 60000
|
||||||
min-evictable-idle-time-millis: 600000
|
min-evictable-idle-time-millis: 600000
|
||||||
max-evictable-idle-time-millis: 1800000
|
max-evictable-idle-time-millis: 1800000
|
||||||
validation-query: SELECT 1 FROM DUAL
|
validation-query: SELECT 1 FROM DUAL
|
||||||
test-while-idle: true
|
test-while-idle: true
|
||||||
test-on-borrow: false
|
test-on-borrow: false
|
||||||
test-on-return: false
|
test-on-return: false
|
||||||
pool-prepared-statements: true
|
pool-prepared-statements: true
|
||||||
max-pool-prepared-statement-per-connection-size: 20
|
max-pool-prepared-statement-per-connection-size: 20
|
||||||
primary: master
|
primary: master
|
||||||
datasource:
|
datasource:
|
||||||
master:
|
master:
|
||||||
url: jdbc:mysql://${MYSQL_HOST:127.0.0.1}:${MYSQL_PORT:3306}/${MYSQL_DATABASE:aiot_platform}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
url: jdbc:mysql://${MYSQL_HOST:172.17.16.8}:${MYSQL_PORT:3306}/${MYSQL_DATABASE:aiot-platform-test}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
||||||
username: ${MYSQL_USER:root}
|
username: ${MYSQL_USER:root}
|
||||||
password: ${MYSQL_PASSWORD:}
|
password: ${MYSQL_PASSWORD:}
|
||||||
slave:
|
slave:
|
||||||
lazy: true
|
lazy: true
|
||||||
url: jdbc:mysql://${MYSQL_SLAVE_HOST:${MYSQL_HOST:127.0.0.1}}:${MYSQL_SLAVE_PORT:${MYSQL_PORT:3306}}/${MYSQL_DATABASE:aiot_platform}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
url: jdbc:mysql://${MYSQL_SLAVE_HOST:${MYSQL_HOST:172.17.16.8}}:${MYSQL_SLAVE_PORT:${MYSQL_PORT:3306}}/${MYSQL_DATABASE:aiot-platform-test}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
||||||
username: ${MYSQL_SLAVE_USER:${MYSQL_USER:root}}
|
username: ${MYSQL_SLAVE_USER:${MYSQL_USER:root}}
|
||||||
password: ${MYSQL_SLAVE_PASSWORD:${MYSQL_PASSWORD:}}
|
password: ${MYSQL_SLAVE_PASSWORD:${MYSQL_PASSWORD:}}
|
||||||
tdengine:
|
tdengine:
|
||||||
url: jdbc:TAOS-RS://${TDENGINE_HOST:172.17.16.14}:${TDENGINE_PORT:6041}/aiot_platform
|
url: jdbc:TAOS-RS://${TDENGINE_HOST:172.17.16.14}:${TDENGINE_PORT:6041}/aiot_platform
|
||||||
driver-class-name: com.taosdata.jdbc.rs.RestfulDriver
|
driver-class-name: com.taosdata.jdbc.rs.RestfulDriver
|
||||||
username: ${TDENGINE_USERNAME:root}
|
username: ${TDENGINE_USERNAME:root}
|
||||||
password: ${TDENGINE_PASSWORD:taosdata}
|
password: ${TDENGINE_PASSWORD:taosdata}
|
||||||
druid:
|
druid:
|
||||||
validation-query: SELECT SERVER_STATUS()
|
validation-query: SELECT SERVER_STATUS()
|
||||||
|
|
||||||
data:
|
data:
|
||||||
redis:
|
redis:
|
||||||
host: ${REDIS_HOST:127.0.0.1}
|
host: ${REDIS_HOST:172.17.16.13}
|
||||||
port: ${REDIS_PORT:6379}
|
port: ${REDIS_PORT:6379}
|
||||||
database: ${REDIS_DATABASE:0}
|
database: ${REDIS_DATABASE:0}
|
||||||
password: ${REDIS_PASSWORD:}
|
password: ${REDIS_PASSWORD:}
|
||||||
timeout: 5000ms
|
timeout: 5000ms
|
||||||
lettuce:
|
lettuce:
|
||||||
pool:
|
pool:
|
||||||
max-active: 8
|
max-active: 8
|
||||||
max-wait: -1ms
|
max-wait: -1ms
|
||||||
max-idle: 8
|
max-idle: 8
|
||||||
min-idle: 0
|
min-idle: 0
|
||||||
|
|
||||||
--- #################### MQ 消息队列相关配置 ####################
|
--- #################### MQ 消息队列相关配置 ####################
|
||||||
|
|
||||||
rocketmq:
|
rocketmq:
|
||||||
name-server: ${ROCKETMQ_NAMESRV_ADDR:127.0.0.1:9876}
|
name-server: ${ROCKETMQ_NAMESRV_ADDR:rmq-4wd73bxpv.rocketmq.sh.qcloud.tencenttdmq.com:8080}
|
||||||
|
|
||||||
spring:
|
spring:
|
||||||
# 禁用 RabbitMQ 自动配置(如果不需要 RabbitMQ,避免启动时连接失败)
|
# 禁用 RabbitMQ 自动配置(如果不需要 RabbitMQ,避免启动时连接失败)
|
||||||
autoconfigure:
|
autoconfigure:
|
||||||
exclude:
|
exclude:
|
||||||
- org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration
|
- org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration
|
||||||
# RabbitMQ 配置(已禁用自动配置,仅保留配置项供业务代码使用)
|
# RabbitMQ 配置(已禁用自动配置,仅保留配置项供业务代码使用)
|
||||||
# rabbitmq:
|
# rabbitmq:
|
||||||
# host: ${RABBITMQ_HOST:127.0.0.1}
|
# host: ${RABBITMQ_HOST:127.0.0.1}
|
||||||
# port: ${RABBITMQ_PORT:5672}
|
# port: ${RABBITMQ_PORT:5672}
|
||||||
# username: ${RABBITMQ_USERNAME:guest}
|
# username: ${RABBITMQ_USERNAME:guest}
|
||||||
# password: ${RABBITMQ_PASSWORD:guest}
|
# password: ${RABBITMQ_PASSWORD:guest}
|
||||||
kafka:
|
kafka:
|
||||||
bootstrap-servers: ${KAFKA_BOOTSTRAP_SERVERS:127.0.0.1:9092}
|
bootstrap-servers: ${KAFKA_BOOTSTRAP_SERVERS:127.0.0.1:9092}
|
||||||
|
|
||||||
--- #################### 定时任务相关配置 ####################
|
--- #################### 定时任务相关配置 ####################
|
||||||
xxl:
|
xxl:
|
||||||
job:
|
job:
|
||||||
admin:
|
admin:
|
||||||
addresses: ${XXL_JOB_ADMIN_ADDRESSES:http://172.17.16.14:19090/xxl-job-admin}
|
addresses: ${XXL_JOB_ADMIN_ADDRESSES:http://172.17.16.14:19090/xxl-job-admin}
|
||||||
|
|
||||||
--- #################### 服务保障相关配置 ####################
|
--- #################### 服务保障相关配置 ####################
|
||||||
|
|
||||||
lock4j:
|
lock4j:
|
||||||
acquire-timeout: 3000
|
acquire-timeout: 3000
|
||||||
expire: 30000
|
expire: 30000
|
||||||
|
|
||||||
--- #################### 监控相关配置 ####################
|
--- #################### 监控相关配置 ####################
|
||||||
|
|
||||||
management:
|
management:
|
||||||
endpoints:
|
endpoints:
|
||||||
web:
|
web:
|
||||||
base-path: /actuator
|
base-path: /actuator
|
||||||
exposure:
|
exposure:
|
||||||
include: '*'
|
include: '*'
|
||||||
|
|
||||||
spring:
|
spring:
|
||||||
boot:
|
boot:
|
||||||
admin:
|
admin:
|
||||||
client:
|
client:
|
||||||
instance:
|
instance:
|
||||||
service-host-type: IP
|
service-host-type: IP
|
||||||
username: ${SPRING_BOOT_ADMIN_USERNAME:admin}
|
username: ${SPRING_BOOT_ADMIN_USERNAME:admin}
|
||||||
password: ${SPRING_BOOT_ADMIN_PASSWORD:admin}
|
password: ${SPRING_BOOT_ADMIN_PASSWORD:admin}
|
||||||
|
|
||||||
logging:
|
logging:
|
||||||
level:
|
level:
|
||||||
root: INFO
|
root: INFO
|
||||||
com.viewsh: ${LOG_LEVEL:INFO}
|
com.viewsh: ${LOG_LEVEL:INFO}
|
||||||
com.viewsh.module.iot.dal.mysql: debug
|
com.viewsh.module.iot.dal.mysql: debug
|
||||||
com.viewsh.module.iot.dal.mysql.sms.SmsChannelMapper: INFO
|
com.viewsh.module.iot.dal.mysql.sms.SmsChannelMapper: INFO
|
||||||
org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR
|
org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR
|
||||||
file:
|
file:
|
||||||
name: ${LOG_FILE_PATH:/app/logs}/${spring.application.name}.log
|
name: ${LOG_FILE_PATH:/app/logs}/${spring.application.name}.log
|
||||||
|
|
||||||
--- #################### 芋道相关配置 ####################
|
--- #################### 芋道相关配置 ####################
|
||||||
|
|
||||||
viewsh:
|
viewsh:
|
||||||
demo: false
|
demo: false
|
||||||
env:
|
env:
|
||||||
tag: ${HOSTNAME:prod}
|
tag: ${HOSTNAME:prod}
|
||||||
captcha:
|
captcha:
|
||||||
enable: true
|
enable: true
|
||||||
security:
|
security:
|
||||||
mock-enable: false
|
mock-enable: false
|
||||||
|
|||||||
@@ -59,27 +59,27 @@ spring:
|
|||||||
primary: master
|
primary: master
|
||||||
datasource:
|
datasource:
|
||||||
master:
|
master:
|
||||||
url: ${SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_URL}
|
url: jdbc:mysql://${MYSQL_HOST:172.17.16.8}:${MYSQL_PORT:3306}/${MYSQL_DATABASE:aiot-platform-test}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
||||||
username: ${SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_USERNAME}
|
username: ${MYSQL_USER:root}
|
||||||
password: ${SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_PASSWORD}
|
password: ${MYSQL_PASSWORD:}
|
||||||
slave: # 模拟从库,可根据自己需要修改
|
slave: # 模拟从库,可根据自己需要修改
|
||||||
lazy: true # 开启懒加载,保证启动速度
|
lazy: true # 开启懒加载,保证启动速度
|
||||||
url: ${SPRING_DATASOURCE_DYNAMIC_DATASOURCE_SLAVE_URL:${SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_URL}}
|
url: jdbc:mysql://${MYSQL_SLAVE_HOST:${MYSQL_HOST:172.17.16.8}}:${MYSQL_SLAVE_PORT:${MYSQL_PORT:3306}}/${MYSQL_DATABASE:aiot-platform-test}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
||||||
username: ${SPRING_DATASOURCE_DYNAMIC_DATASOURCE_SLAVE_USERNAME:${SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_USERNAME}}
|
username: ${MYSQL_SLAVE_USER:${MYSQL_USER:root}}
|
||||||
password: ${SPRING_DATASOURCE_DYNAMIC_DATASOURCE_SLAVE_PASSWORD:${SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_PASSWORD}}
|
password: ${MYSQL_SLAVE_PASSWORD:${MYSQL_PASSWORD:}}
|
||||||
# Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
|
# Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
|
||||||
data:
|
data:
|
||||||
redis:
|
redis:
|
||||||
host: ${SPRING_DATA_REDIS_HOST:127.0.0.1} # 地址
|
host: ${REDIS_HOST:172.17.16.13} # 地址
|
||||||
port: ${SPRING_DATA_REDIS_PORT:6379} # 端口
|
port: ${REDIS_PORT:6379} # 端口
|
||||||
database: ${SPRING_DATA_REDIS_DATABASE:0} # 数据库索引
|
database: ${REDIS_DATABASE:0} # 数据库索引
|
||||||
password: ${SPRING_DATA_REDIS_PASSWORD} # 密码
|
password: ${REDIS_PASSWORD:} # 密码
|
||||||
|
|
||||||
--- #################### MQ 消息队列相关配置 ####################
|
--- #################### MQ 消息队列相关配置 ####################
|
||||||
|
|
||||||
# rocketmq 配置项,对应 RocketMQProperties 配置类
|
# rocketmq 配置项,对应 RocketMQProperties 配置类
|
||||||
rocketmq:
|
rocketmq:
|
||||||
name-server: ${ROCKETMQ_NAME_SERVER:127.0.0.1:9876} # RocketMQ Namesrv
|
name-server: ${ROCKETMQ_NAME_SERVER:rmq-4wd73bxpv.rocketmq.sh.qcloud.tencenttdmq.com:8080} # RocketMQ Namesrv
|
||||||
|
|
||||||
spring:
|
spring:
|
||||||
# RabbitMQ 配置项,对应 RabbitProperties 配置类
|
# RabbitMQ 配置项,对应 RabbitProperties 配置类
|
||||||
|
|||||||
@@ -1,206 +1,206 @@
|
|||||||
--- #################### 注册中心 + 配置中心相关配置 ####################
|
--- #################### 注册中心 + 配置中心相关配置 ####################
|
||||||
|
|
||||||
spring:
|
spring:
|
||||||
cloud:
|
cloud:
|
||||||
nacos:
|
nacos:
|
||||||
server-addr: ${NACOS_ADDR:127.0.0.1:8848}
|
server-addr: ${NACOS_ADDR:127.0.0.1:8848}
|
||||||
username: ${NACOS_USERNAME:nacos}
|
username: ${NACOS_USERNAME:nacos}
|
||||||
password: ${NACOS_PASSWORD:nacos}
|
password: ${NACOS_PASSWORD:nacos}
|
||||||
discovery:
|
discovery:
|
||||||
namespace: ${NACOS_DISCOVERY_NAMESPACE:prod}
|
namespace: ${NACOS_DISCOVERY_NAMESPACE:prod}
|
||||||
group: DEFAULT_GROUP
|
group: DEFAULT_GROUP
|
||||||
metadata:
|
metadata:
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
config:
|
config:
|
||||||
namespace: ${NACOS_CONFIG_NAMESPACE:prod}
|
namespace: ${NACOS_CONFIG_NAMESPACE:prod}
|
||||||
group: DEFAULT_GROUP
|
group: DEFAULT_GROUP
|
||||||
file-extension: yaml
|
file-extension: yaml
|
||||||
refresh-enabled: true
|
refresh-enabled: true
|
||||||
|
|
||||||
--- #################### 数据库相关配置 ####################
|
--- #################### 数据库相关配置 ####################
|
||||||
spring:
|
spring:
|
||||||
datasource:
|
datasource:
|
||||||
druid: # Druid 【监控】相关的全局配置
|
druid: # Druid 【监控】相关的全局配置
|
||||||
web-stat-filter:
|
web-stat-filter:
|
||||||
enabled: true
|
enabled: true
|
||||||
stat-view-servlet:
|
stat-view-servlet:
|
||||||
enabled: true
|
enabled: true
|
||||||
allow: # 设置白名单,不填则允许所有访问
|
allow: # 设置白名单,不填则允许所有访问
|
||||||
url-pattern: /druid/*
|
url-pattern: /druid/*
|
||||||
login-username: ${DRUID_USERNAME:admin}
|
login-username: ${DRUID_USERNAME:admin}
|
||||||
login-password: ${DRUID_PASSWORD:admin}
|
login-password: ${DRUID_PASSWORD:admin}
|
||||||
filter:
|
filter:
|
||||||
stat:
|
stat:
|
||||||
enabled: true
|
enabled: true
|
||||||
log-slow-sql: true # 慢 SQL 记录
|
log-slow-sql: true # 慢 SQL 记录
|
||||||
slow-sql-millis: 100
|
slow-sql-millis: 100
|
||||||
merge-sql: true
|
merge-sql: true
|
||||||
wall:
|
wall:
|
||||||
config:
|
config:
|
||||||
multi-statement-allow: true
|
multi-statement-allow: true
|
||||||
dynamic: # 多数据源配置
|
dynamic: # 多数据源配置
|
||||||
druid: # Druid 【连接池】相关的全局配置
|
druid: # Druid 【连接池】相关的全局配置
|
||||||
initial-size: 5
|
initial-size: 5
|
||||||
min-idle: 10
|
min-idle: 10
|
||||||
max-active: 20
|
max-active: 20
|
||||||
max-wait: 60000
|
max-wait: 60000
|
||||||
time-between-eviction-runs-millis: 60000
|
time-between-eviction-runs-millis: 60000
|
||||||
min-evictable-idle-time-millis: 600000
|
min-evictable-idle-time-millis: 600000
|
||||||
max-evictable-idle-time-millis: 1800000
|
max-evictable-idle-time-millis: 1800000
|
||||||
validation-query: SELECT 1 FROM DUAL
|
validation-query: SELECT 1 FROM DUAL
|
||||||
test-while-idle: true
|
test-while-idle: true
|
||||||
test-on-borrow: false
|
test-on-borrow: false
|
||||||
test-on-return: false
|
test-on-return: false
|
||||||
pool-prepared-statements: true
|
pool-prepared-statements: true
|
||||||
max-pool-prepared-statement-per-connection-size: 20
|
max-pool-prepared-statement-per-connection-size: 20
|
||||||
primary: master
|
primary: master
|
||||||
datasource:
|
datasource:
|
||||||
master:
|
master:
|
||||||
url: jdbc:mysql://127.0.0.1:3306/aiot_platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
url: jdbc:mysql://172.17.16.8:3306/aiot-platform-test?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
||||||
username: root
|
username: root
|
||||||
password: root
|
password: root
|
||||||
slave: # 从库配置(可选)
|
slave: # 从库配置(可选)
|
||||||
lazy: true
|
lazy: true
|
||||||
url: jdbc:mysql://127.0.0.1:3306/aiot_platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
url: jdbc:mysql://172.17.16.8:3306/aiot-platform-test?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
||||||
username: root
|
username: root
|
||||||
password: root
|
password: root
|
||||||
|
|
||||||
# Redis 配置
|
# Redis 配置
|
||||||
data:
|
data:
|
||||||
redis:
|
redis:
|
||||||
host: 127.0.0.1
|
host: 172.17.16.13
|
||||||
port: 6379
|
port: 6379
|
||||||
database: 0
|
database: 0
|
||||||
password: ""
|
password: ""
|
||||||
timeout: 5000ms
|
timeout: 5000ms
|
||||||
lettuce:
|
lettuce:
|
||||||
pool:
|
pool:
|
||||||
max-active: 8
|
max-active: 8
|
||||||
max-wait: -1ms
|
max-wait: -1ms
|
||||||
max-idle: 8
|
max-idle: 8
|
||||||
min-idle: 0
|
min-idle: 0
|
||||||
|
|
||||||
--- #################### MQ 消息队列相关配置 ####################
|
--- #################### MQ 消息队列相关配置 ####################
|
||||||
|
|
||||||
# rocketmq 配置项
|
# rocketmq 配置项
|
||||||
rocketmq:
|
rocketmq:
|
||||||
name-server: ${ROCKETMQ_NAMESRV_ADDR:127.0.0.1:9876}
|
name-server: ${ROCKETMQ_NAMESRV_ADDR:rmq-4wd73bxpv.rocketmq.sh.qcloud.tencenttdmq.com:8080}
|
||||||
|
|
||||||
spring:
|
spring:
|
||||||
# RabbitMQ 配置项(可选)
|
# RabbitMQ 配置项(可选)
|
||||||
rabbitmq:
|
rabbitmq:
|
||||||
host: ${RABBITMQ_HOST:127.0.0.1}
|
host: ${RABBITMQ_HOST:127.0.0.1}
|
||||||
port: ${RABBITMQ_PORT:5672}
|
port: ${RABBITMQ_PORT:5672}
|
||||||
username: ${RABBITMQ_USERNAME:guest}
|
username: ${RABBITMQ_USERNAME:guest}
|
||||||
password: ${RABBITMQ_PASSWORD:guest}
|
password: ${RABBITMQ_PASSWORD:guest}
|
||||||
# Kafka 配置项(可选)
|
# Kafka 配置项(可选)
|
||||||
kafka:
|
kafka:
|
||||||
bootstrap-servers: ${KAFKA_BOOTSTRAP_SERVERS:127.0.0.1:9092}
|
bootstrap-servers: ${KAFKA_BOOTSTRAP_SERVERS:127.0.0.1:9092}
|
||||||
|
|
||||||
--- #################### 定时任务相关配置 ####################
|
--- #################### 定时任务相关配置 ####################
|
||||||
xxl:
|
xxl:
|
||||||
job:
|
job:
|
||||||
admin:
|
admin:
|
||||||
addresses: ${XXL_JOB_ADMIN_ADDRESSES:http://172.17.16.14:19090/xxl-job-admin}
|
addresses: ${XXL_JOB_ADMIN_ADDRESSES:http://172.17.16.14:19090/xxl-job-admin}
|
||||||
|
|
||||||
--- #################### 服务保障相关配置 ####################
|
--- #################### 服务保障相关配置 ####################
|
||||||
|
|
||||||
# Lock4j 配置项
|
# Lock4j 配置项
|
||||||
lock4j:
|
lock4j:
|
||||||
acquire-timeout: 3000
|
acquire-timeout: 3000
|
||||||
expire: 30000
|
expire: 30000
|
||||||
|
|
||||||
--- #################### 监控相关配置 ####################
|
--- #################### 监控相关配置 ####################
|
||||||
|
|
||||||
# Actuator 监控端点的配置项
|
# Actuator 监控端点的配置项
|
||||||
management:
|
management:
|
||||||
endpoints:
|
endpoints:
|
||||||
web:
|
web:
|
||||||
base-path: /actuator
|
base-path: /actuator
|
||||||
exposure:
|
exposure:
|
||||||
include: '*'
|
include: '*'
|
||||||
|
|
||||||
# Spring Boot Admin 配置项
|
# Spring Boot Admin 配置项
|
||||||
spring:
|
spring:
|
||||||
boot:
|
boot:
|
||||||
admin:
|
admin:
|
||||||
client:
|
client:
|
||||||
instance:
|
instance:
|
||||||
service-host-type: IP
|
service-host-type: IP
|
||||||
username: ${SPRING_BOOT_ADMIN_USERNAME:admin}
|
username: ${SPRING_BOOT_ADMIN_USERNAME:admin}
|
||||||
password: ${SPRING_BOOT_ADMIN_PASSWORD:admin}
|
password: ${SPRING_BOOT_ADMIN_PASSWORD:admin}
|
||||||
|
|
||||||
# 日志文件配置
|
# 日志文件配置
|
||||||
logging:
|
logging:
|
||||||
level:
|
level:
|
||||||
root: INFO
|
root: INFO
|
||||||
com.viewsh: ${LOG_LEVEL:INFO}
|
com.viewsh: ${LOG_LEVEL:INFO}
|
||||||
file:
|
file:
|
||||||
name: ${LOG_FILE_PATH:/app/logs}/${spring.application.name}.log
|
name: ${LOG_FILE_PATH:/app/logs}/${spring.application.name}.log
|
||||||
|
|
||||||
--- #################### 微信公众号、小程序相关配置 ####################
|
--- #################### 微信公众号、小程序相关配置 ####################
|
||||||
wx:
|
wx:
|
||||||
mp: # 公众号配置(必填)
|
mp: # 公众号配置(必填)
|
||||||
app-id: ${WX_MP_APP_ID:wx5b23ba7a5589ecbb} # 优先环境变量,兜底默认值
|
app-id: ${WX_MP_APP_ID:wx5b23ba7a5589ecbb} # 优先环境变量,兜底默认值
|
||||||
secret: ${WX_MP_SECRET:2a7b3b20c537e52e74afd395eb85f61f}
|
secret: ${WX_MP_SECRET:2a7b3b20c537e52e74afd395eb85f61f}
|
||||||
config-storage:
|
config-storage:
|
||||||
type: RedisTemplate
|
type: RedisTemplate
|
||||||
key-prefix: wx
|
key-prefix: wx
|
||||||
http-client-type: HttpClient
|
http-client-type: HttpClient
|
||||||
miniapp: # 小程序配置(必填)
|
miniapp: # 小程序配置(必填)
|
||||||
appid: ${WX_MINIAPP_APPID:wxc4598c446f8a9cb3}
|
appid: ${WX_MINIAPP_APPID:wxc4598c446f8a9cb3}
|
||||||
secret: ${WX_MINIAPP_SECRET:4a1a04e07f6a4a0751b39c3064a92c8b}
|
secret: ${WX_MINIAPP_SECRET:4a1a04e07f6a4a0751b39c3064a92c8b}
|
||||||
config-storage:
|
config-storage:
|
||||||
type: RedisTemplate
|
type: RedisTemplate
|
||||||
key-prefix: wa
|
key-prefix: wa
|
||||||
http-client-type: HttpClient
|
http-client-type: HttpClient
|
||||||
|
|
||||||
--- #################### 芋道相关配置 ####################
|
--- #################### 芋道相关配置 ####################
|
||||||
|
|
||||||
viewsh:
|
viewsh:
|
||||||
demo: false # 生产环境关闭演示模式
|
demo: false # 生产环境关闭演示模式
|
||||||
env:
|
env:
|
||||||
tag: ${HOSTNAME:prod}
|
tag: ${HOSTNAME:prod}
|
||||||
captcha:
|
captcha:
|
||||||
enable: true # 生产环境开启验证码
|
enable: true # 生产环境开启验证码
|
||||||
security:
|
security:
|
||||||
mock-enable: false # 生产环境关闭 mock
|
mock-enable: false # 生产环境关闭 mock
|
||||||
access-log:
|
access-log:
|
||||||
enable: true
|
enable: true
|
||||||
wxa-code:
|
wxa-code:
|
||||||
env-version: release
|
env-version: release
|
||||||
wxa-subscribe-message:
|
wxa-subscribe-message:
|
||||||
miniprogram-state: formal
|
miniprogram-state: formal
|
||||||
|
|
||||||
justauth:
|
justauth:
|
||||||
enabled: true
|
enabled: true
|
||||||
type:
|
type:
|
||||||
DINGTALK: # 钉钉
|
DINGTALK: # 钉钉
|
||||||
client-id: dingvrnreaje3yqvzhxg
|
client-id: dingvrnreaje3yqvzhxg
|
||||||
client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI
|
client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI
|
||||||
ignore-check-redirect-uri: true
|
ignore-check-redirect-uri: true
|
||||||
WECHAT_ENTERPRISE: # 企业微信
|
WECHAT_ENTERPRISE: # 企业微信
|
||||||
client-id: wwd411c69a39ad2e54
|
client-id: wwd411c69a39ad2e54
|
||||||
client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw
|
client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw
|
||||||
agent-id: 1000004
|
agent-id: 1000004
|
||||||
ignore-check-redirect-uri: true
|
ignore-check-redirect-uri: true
|
||||||
# noinspection SpringBootApplicationYaml
|
# noinspection SpringBootApplicationYaml
|
||||||
WECHAT_MINI_PROGRAM: # 微信小程序
|
WECHAT_MINI_PROGRAM: # 微信小程序
|
||||||
client-id: ${wx.miniapp.appid}
|
client-id: ${wx.miniapp.appid}
|
||||||
client-secret: ${wx.miniapp.secret}
|
client-secret: ${wx.miniapp.secret}
|
||||||
ignore-check-redirect-uri: true
|
ignore-check-redirect-uri: true
|
||||||
ignore-check-state: true # 微信小程序,不会使用到 state,所以不进行校验
|
ignore-check-state: true # 微信小程序,不会使用到 state,所以不进行校验
|
||||||
WECHAT_MP: # 微信公众号
|
WECHAT_MP: # 微信公众号
|
||||||
client-id: ${wx.mp.app-id}
|
client-id: ${wx.mp.app-id}
|
||||||
client-secret: ${wx.mp.secret}
|
client-secret: ${wx.mp.secret}
|
||||||
ignore-check-redirect-uri: true
|
ignore-check-redirect-uri: true
|
||||||
ALIPAY: # 支付宝小程序
|
ALIPAY: # 支付宝小程序
|
||||||
client-id: xx
|
client-id: xx
|
||||||
client-secret: xx
|
client-secret: xx
|
||||||
alipay-public-key: xx
|
alipay-public-key: xx
|
||||||
ignore-check-redirect-uri: true
|
ignore-check-redirect-uri: true
|
||||||
ignore-check-state: true
|
ignore-check-state: true
|
||||||
cache:
|
cache:
|
||||||
type: REDIS
|
type: REDIS
|
||||||
prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE::
|
prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE::
|
||||||
timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟
|
timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟
|
||||||
|
|||||||
Reference in New Issue
Block a user