feat(ops): add deployment configuration and actuator dependency
Some checks failed
Java CI with Maven / build (11) (push) Has been cancelled
Java CI with Maven / build (17) (push) Has been cancelled
Java CI with Maven / build (8) (push) Has been cancelled

This commit is contained in:
lzh
2026-01-15 16:30:15 +08:00
parent 4a8c4d744c
commit c8010e06d2
4 changed files with 210 additions and 4 deletions

11
Jenkinsfile vendored
View File

@@ -22,7 +22,7 @@ pipeline {
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'
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'
@@ -1000,7 +1000,8 @@ def sortServicesByDependency(def services) {
'viewsh-module-system-server',
'viewsh-module-infra-server',
'viewsh-module-iot-server',
'viewsh-module-iot-gateway'
'viewsh-module-iot-gateway',
'viewsh-module-ops-server'
]
return services.sort { a, b ->
@@ -1016,7 +1017,8 @@ def getContainerNameForService(String service) {
'viewsh-module-system-server': 'aiot-system-server',
'viewsh-module-infra-server': 'aiot-infra-server',
'viewsh-module-iot-server': 'aiot-iot-server',
'viewsh-module-iot-gateway': 'aiot-iot-gateway'
'viewsh-module-iot-gateway': 'aiot-iot-gateway',
'viewsh-module-ops-server': 'aiot-ops-server'
]
return map.get(service, "aiot-${service}")
}
@@ -1029,7 +1031,8 @@ def getModulePathForService(String service) {
'viewsh-module-system-server': 'viewsh-module-system/viewsh-module-system-server',
'viewsh-module-infra-server': 'viewsh-module-infra/viewsh-module-infra-server',
'viewsh-module-iot-server': 'viewsh-module-iot/viewsh-module-iot-server',
'viewsh-module-iot-gateway': 'viewsh-module-iot/viewsh-module-iot-gateway'
'viewsh-module-iot-gateway': 'viewsh-module-iot/viewsh-module-iot-gateway',
'viewsh-module-ops-server': 'viewsh-module-ops/viewsh-module-ops-server'
]
return map.get(service, service)
}

View File

@@ -208,3 +208,40 @@ services:
depends_on:
- viewsh-module-iot-server
viewsh-module-ops-server:
image: ${REGISTRY_HOST:-localhost:5000}/viewsh-module-ops-server:${IMAGE_TAG:-latest}
container_name: aiot-ops-server
restart: on-failure:5
ports:
- "48092:48092"
environment:
TZ: Asia/Shanghai
SPRING_PROFILES_ACTIVE: prod
JAVA_OPTS: "-Xms512m -Xmx1024m -XX:+UseContainerSupport -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/app/logs"
NACOS_USERNAME: nacos
NACOS_PASSWORD: 9oDxX~}e7DeP
NACOS_ADDR: 172.17.16.14:8848
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_USERNAME: root
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_PASSWORD: "65p^VTPi9Qd+"
SPRING_DATA_REDIS_HOST: 172.17.16.14
SPRING_DATA_REDIS_PASSWORD: "9kHXcZ1ojFsD"
ROCKETMQ_NAME_SERVER: 172.17.16.14:9876
volumes:
- app-logs:/app/logs
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:48092/actuator/health"]
interval: 10s
timeout: 5s
retries: 12
start_period: 120s
depends_on:
viewsh-module-iot-server:
condition: service_healthy

View File

@@ -0,0 +1,19 @@
## AdoptOpenJDK 停止发布 OpenJDK 二进制,而 Eclipse Temurin 是它的延伸,提供更好的稳定性
## 感谢复旦核博士的建议!灰子哥,牛皮!
FROM eclipse-temurin:21-jre
## 创建目录,并使用它作为工作目录
RUN mkdir -p /viewsh-module-ops-server
WORKDIR /viewsh-module-ops-server
## 将后端项目的 Jar 文件,复制到镜像中
COPY ./target/viewsh-module-ops-server.jar app.jar
## 设置 TZ 时区
## 设置 JAVA_OPTS 环境变量,可通过 docker run -e "JAVA_OPTS=" 进行覆盖
ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms512m -Xmx512m"
## 暴露后端项目的 48092 端口
EXPOSE 48092
## 启动后端项目
CMD java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar app.jar

View File

@@ -0,0 +1,147 @@
--- #################### 注册中心 + 配置中心相关配置 ####################
spring:
cloud:
nacos:
server-addr: ${NACOS_ADDR:127.0.0.1:8848} # Nacos 服务器地址
username: ${NACOS_USERNAME:nacos} # Nacos 账号
password: ${NACOS_PASSWORD:nacos} # Nacos 密码
discovery: # 【配置中心】配置项
namespace: ${NACOS_DISCOVERY_NAMESPACE:public} # 命名空间
group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
metadata:
version: 1.0.0 # 服务实例的版本号,可用于灰度发布
config: # 【注册中心】配置项
namespace: ${NACOS_CONFIG_NAMESPACE:public} # 命名空间
group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
--- #################### 数据库相关配置 ####################
spring:
# 数据源配置项
autoconfigure:
# noinspection SpringBootApplicationYaml
exclude:
- com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
datasource:
druid: # Druid 【监控】相关的全局配置
web-stat-filter:
enabled: true
stat-view-servlet:
enabled: true
allow: # 设置白名单,不填则允许所有访问
url-pattern: /druid/*
login-username: # 控制台管理用户名和密码
login-password:
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 # 配置获取连接等待超时的时间单位毫秒1 分钟)
time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测检测需要关闭的空闲连接单位毫秒1 分钟)
min-evictable-idle-time-millis: 600000 # 配置一个连接在池中最小生存的时间单位毫秒10 分钟)
max-evictable-idle-time-millis: 1800000 # 配置一个连接在池中最大生存的时间单位毫秒30 分钟)
validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
test-while-idle: true
test-on-borrow: false
test-on-return: false
pool-prepared-statements: true # 是否开启 PreparedStatement 缓存
max-pool-prepared-statement-per-connection-size: 20 # 每个连接缓存的 PreparedStatement 数量
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}
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}}
# 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} # 密码
--- #################### MQ 消息队列相关配置 ####################
# rocketmq 配置项,对应 RocketMQProperties 配置类
rocketmq:
name-server: ${ROCKETMQ_NAME_SERVER:127.0.0.1:9876} # RocketMQ Namesrv
spring:
# RabbitMQ 配置项,对应 RabbitProperties 配置类
rabbitmq:
host: ${SPRING_RABBITMQ_HOST:127.0.0.1} # RabbitMQ 服务的地址
port: ${SPRING_RABBITMQ_PORT:5672} # RabbitMQ 服务的端口
username: ${SPRING_RABBITMQ_USERNAME:guest} # RabbitMQ 服务的账号
password: ${SPRING_RABBITMQ_PASSWORD:guest} # RabbitMQ 服务的密码
# Kafka 配置项,对应 KafkaProperties 配置类
kafka:
bootstrap-servers: ${SPRING_KAFKA_BOOTSTRAP_SERVERS:127.0.0.1:9092} # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔
--- #################### 定时任务相关配置 ####################
xxl:
job:
enabled: true
admin:
addresses: ${XXL_JOB_ADMIN_ADDRESSES:http://127.0.0.1:9090/xxl-job-admin} # 调度中心部署跟地址
--- #################### 服务保障相关配置 ####################
# Lock4j 配置项
lock4j:
acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒
expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒
--- #################### 监控相关配置 ####################
# Actuator 监控端点的配置项
management:
endpoints:
web:
base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator
exposure:
include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
# Spring Boot Admin 配置项
spring:
boot:
admin:
# Spring Boot Admin Client 客户端的相关配置
client:
instance:
service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME]
username: ${SPRING_BOOT_ADMIN_CLIENT_USERNAME:admin}
password: ${SPRING_BOOT_ADMIN_CLIENT_PASSWORD:admin}
# 日志文件配置
logging:
level:
# 配置自己写的 MyBatis Mapper 打印日志
com.viewsh.module.ops.dal.mysql: info # 生产环境建议 info
org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿先禁用Spring Boot 3.X 存在部分错误的 WARN 提示
--- #################### 芋道相关配置 ####################
# 芋道配置项,设置当前项目所有自定义的配置
viewsh:
env: # 多环境的配置项
tag: ${HOSTNAME}
security:
mock-enable: false # 生产环境禁用 mock
access-log: # 访问日志的配置项
enable: true # 生产环境开启访问日志