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