Files
aiot-platform-cloud/docker-compose.core.yml
lzh b7664f7dd0
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
fix: 修复健康检查和配置问题
- 修复健康检查 IP 地址 (172.17.16.14 -> localhost)
  - 禁用微信自动配置避免 appid 错误
  - 添加服务依赖关系和启动顺序
  - 优化 Jenkinsfile 部署流程
  - 添加 Quartz 优雅关闭配置
  - 注释 XXL-JOB Admin 配置(暂不部署)
2026-01-13 19:13:30 +08:00

306 lines
11 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

version: '3.8'
# ============================================
# AIOT Platform - 核心服务部署配置 (方案 A)
# 连接到 1Panel 已安装的中间件
# 总内存占用: ~4.5GB (仅应用服务)
# ============================================
networks:
aiot-network:
driver: bridge
volumes:
app-logs:
services:
# ============ 应用服务 ============
# 注意: 中间件MySQL, Redis, Nacos, RocketMQ已通过 1Panel 安装
# 应用服务通过环境变量配置连接到宿主机的中间件
viewsh-gateway:
image: ${REGISTRY_HOST}/viewsh-gateway:${IMAGE_TAG}
container_name: aiot-gateway
restart: unless-stopped
network_mode: host # 使用宿主机网络,直接访问 1Panel 中间件
environment:
JAVA_OPTS: "-Xms${GATEWAY_JVM_XMS} -Xmx${GATEWAY_JVM_XMX} ${JVM_COMMON_OPTS}"
SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE}
SPRING_AUTOCONFIGURE_EXCLUDE: com.binarywang.spring.starter.wxjava.mp.config.WxMpServiceAutoConfiguration,com.binarywang.spring.starter.wxjava.mp.config.WxMpAutoConfiguration
NACOS_SERVER_ADDR: ${NACOS_HOST}:${NACOS_PORT}
REDIS_HOST: ${REDIS_HOST}
REDIS_PORT: ${REDIS_PORT}
REDIS_PASSWORD: ${REDIS_PASSWORD}
REDIS_DATABASE: ${REDIS_DATABASE:-0}
TZ: ${TZ}
volumes:
- app-logs:/app/logs
deploy:
resources:
limits:
memory: ${GATEWAY_MEMORY_LIMIT}
cpus: '1.0'
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:48080/actuator/health"]
interval: 30s
timeout: 10s
retries: 5
start_period: 90s
viewsh-module-system-server:
image: ${REGISTRY_HOST}/viewsh-module-system-server:${IMAGE_TAG}
container_name: aiot-system-server
restart: unless-stopped
network_mode: host
environment:
JAVA_OPTS: "-Xms${SYSTEM_JVM_XMS} -Xmx${SYSTEM_JVM_XMX} ${JVM_COMMON_OPTS}"
SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE}
SPRING_AUTOCONFIGURE_EXCLUDE: com.binarywang.spring.starter.wxjava.mp.config.WxMpServiceAutoConfiguration
NACOS_SERVER_ADDR: ${NACOS_HOST}:${NACOS_PORT}
MYSQL_HOST: ${MYSQL_HOST}
MYSQL_PORT: ${MYSQL_PORT}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
REDIS_HOST: ${REDIS_HOST}
REDIS_PORT: ${REDIS_PORT}
REDIS_PASSWORD: ${REDIS_PASSWORD}
REDIS_DATABASE: ${REDIS_DATABASE:-0}
TZ: ${TZ}
volumes:
- app-logs:/app/logs
deploy:
resources:
limits:
memory: ${SYSTEM_MEMORY_LIMIT}
cpus: '1.0'
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:48081"]
interval: 30s
timeout: 10s
retries: 5
start_period: 90s
depends_on:
viewsh-gateway:
condition: service_healthy
viewsh-module-infra-server:
image: ${REGISTRY_HOST}/viewsh-module-infra-server:${IMAGE_TAG}
container_name: aiot-infra-server
restart: unless-stopped
network_mode: host
environment:
JAVA_OPTS: "-Xms${INFRA_JVM_XMS} -Xmx${INFRA_JVM_XMX} ${JVM_COMMON_OPTS}"
SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE}
SPRING_AUTOCONFIGURE_EXCLUDE: com.binarywang.spring.starter.wxjava.mp.config.WxMpServiceAutoConfiguration
# XXL-JOB 配置(暂时注释,等部署 XXL-JOB Admin 后启用)
# XXL_JOB_ADMIN_ADDRESSES: ${XXL_JOB_ADMIN_ADDRESSES:-http://127.0.0.1:9090/xxl-job-admin}
# XXL_JOB_ACCESS_TOKEN: ${XXL_JOB_ACCESS_TOKEN:-default_token}
NACOS_SERVER_ADDR: ${NACOS_HOST}:${NACOS_PORT}
MYSQL_HOST: ${MYSQL_HOST}
MYSQL_PORT: ${MYSQL_PORT}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
REDIS_HOST: ${REDIS_HOST}
REDIS_PORT: ${REDIS_PORT}
REDIS_PASSWORD: ${REDIS_PASSWORD}
REDIS_DATABASE: ${REDIS_DATABASE:-0}
TZ: ${TZ}
volumes:
- app-logs:/app/logs
deploy:
resources:
limits:
memory: ${INFRA_MEMORY_LIMIT}
cpus: '1.0'
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:48082"]
interval: 30s
timeout: 10s
retries: 5
start_period: 90s
depends_on:
viewsh-module-system-server:
condition: service_healthy
viewsh-module-iot-server:
image: ${REGISTRY_HOST}/viewsh-module-iot-server:${IMAGE_TAG}
container_name: aiot-iot-server
restart: unless-stopped
network_mode: host
environment:
JAVA_OPTS: "-Xms${IOT_SERVER_JVM_XMS} -Xmx${IOT_SERVER_JVM_XMX} ${JVM_COMMON_OPTS}"
SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE}
SPRING_AUTOCONFIGURE_EXCLUDE: com.binarywang.spring.starter.wxjava.mp.config.WxMpServiceAutoConfiguration
NACOS_SERVER_ADDR: ${NACOS_HOST}:${NACOS_PORT}
MYSQL_HOST: ${MYSQL_HOST}
MYSQL_PORT: ${MYSQL_PORT}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
REDIS_HOST: ${REDIS_HOST}
REDIS_PORT: ${REDIS_PORT}
REDIS_PASSWORD: ${REDIS_PASSWORD}
REDIS_DATABASE: ${REDIS_DATABASE:-0}
ROCKETMQ_NAMESRV_ADDR: ${ROCKETMQ_NAMESRV_HOST}:${ROCKETMQ_NAMESRV_PORT}
TZ: ${TZ}
volumes:
- app-logs:/app/logs
deploy:
resources:
limits:
memory: ${IOT_SERVER_MEMORY_LIMIT}
cpus: '1.5'
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:48083"]
interval: 30s
timeout: 10s
retries: 5
start_period: 90s
depends_on:
viewsh-module-infra-server:
condition: service_healthy
viewsh-module-iot-gateway:
image: ${REGISTRY_HOST}/viewsh-module-iot-gateway:${IMAGE_TAG}
container_name: aiot-iot-gateway
restart: unless-stopped
network_mode: host
environment:
JAVA_OPTS: "-Xms${IOT_GATEWAY_JVM_XMS} -Xmx${IOT_GATEWAY_JVM_XMX} ${JVM_COMMON_OPTS}"
SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE}
SPRING_AUTOCONFIGURE_EXCLUDE: com.binarywang.spring.starter.wxjava.mp.config.WxMpServiceAutoConfiguration
# Nacos 配置
NACOS_SERVER_ADDR: ${NACOS_HOST}:${NACOS_PORT}
NACOS_USERNAME: ${NACOS_USERNAME}
NACOS_PASSWORD: ${NACOS_PASSWORD}
NACOS_NAMESPACE: ${NACOS_NAMESPACE}
NACOS_GROUP: DEFAULT_GROUP
# Redis 配置
REDIS_HOST: ${REDIS_HOST}
REDIS_PORT: ${REDIS_PORT}
REDIS_PASSWORD: ${REDIS_PASSWORD}
REDIS_DATABASE: ${REDIS_DATABASE}
REDIS_TIMEOUT: 30000ms
# RocketMQ 配置
ROCKETMQ_NAMESRV_ADDR: ${ROCKETMQ_NAMESRV_HOST}:${ROCKETMQ_NAMESRV_PORT}
# IoT 消息总线配置
IOT_MESSAGE_BUS_TYPE: ${IOT_MESSAGE_BUS_TYPE}
# 设备 RPC 配置
IOT_RPC_URL: ${IOT_RPC_URL}
IOT_RPC_CONNECT_TIMEOUT: ${IOT_RPC_CONNECT_TIMEOUT}
IOT_RPC_READ_TIMEOUT: ${IOT_RPC_READ_TIMEOUT}
# 设备 Token 配置
IOT_TOKEN_SECRET: ${IOT_TOKEN_SECRET}
IOT_TOKEN_EXPIRATION: ${IOT_TOKEN_EXPIRATION}
# HTTP 协议配置
IOT_HTTP_ENABLED: ${IOT_HTTP_ENABLED}
IOT_HTTP_PORT: ${IOT_HTTP_PORT}
# MQTT 协议配置
IOT_MQTT_ENABLED: ${IOT_MQTT_ENABLED}
IOT_MQTT_PORT: ${IOT_MQTT_PORT}
IOT_MQTT_MAX_MESSAGE_SIZE: ${IOT_MQTT_MAX_MESSAGE_SIZE}
IOT_MQTT_CONNECT_TIMEOUT: ${IOT_MQTT_CONNECT_TIMEOUT}
IOT_MQTT_SSL_ENABLED: ${IOT_MQTT_SSL_ENABLED}
# TCP 协议配置
IOT_TCP_ENABLED: ${IOT_TCP_ENABLED}
IOT_TCP_PORT: ${IOT_TCP_PORT}
IOT_TCP_KEEPALIVE_TIMEOUT: ${IOT_TCP_KEEPALIVE_TIMEOUT}
IOT_TCP_MAX_CONNECTIONS: ${IOT_TCP_MAX_CONNECTIONS}
IOT_TCP_SSL_ENABLED: ${IOT_TCP_SSL_ENABLED}
# EMQX 协议配置
IOT_EMQX_ENABLED: ${IOT_EMQX_ENABLED}
IOT_EMQX_HTTP_PORT: ${IOT_EMQX_HTTP_PORT}
IOT_EMQX_MQTT_HOST: ${IOT_EMQX_MQTT_HOST}
IOT_EMQX_MQTT_PORT: ${IOT_EMQX_MQTT_PORT}
IOT_EMQX_MQTT_USERNAME: ${IOT_EMQX_MQTT_USERNAME}
IOT_EMQX_MQTT_PASSWORD: ${IOT_EMQX_MQTT_PASSWORD}
IOT_EMQX_MQTT_CLIENT_ID: ${IOT_EMQX_MQTT_CLIENT_ID}
IOT_EMQX_MQTT_SSL: ${IOT_EMQX_MQTT_SSL}
IOT_EMQX_TRUST_ALL: ${IOT_EMQX_TRUST_ALL}
IOT_EMQX_WILL_ENABLED: ${IOT_EMQX_WILL_ENABLED}
# 日志配置
LOG_FILE_PATH: /app/logs
LOG_LEVEL_IOT_GATEWAY: ${LOG_LEVEL_IOT_GATEWAY}
LOG_LEVEL_EMQX: ${LOG_LEVEL_EMQX}
LOG_LEVEL_HTTP: ${LOG_LEVEL_HTTP}
LOG_LEVEL_MQTT: ${LOG_LEVEL_MQTT}
TZ: ${TZ}
volumes:
- app-logs:/app/logs
deploy:
resources:
limits:
memory: ${IOT_GATEWAY_MEMORY_LIMIT}
cpus: '1.5'
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:48084"]
interval: 30s
timeout: 10s
retries: 5
start_period: 90s
depends_on:
viewsh-module-iot-server:
condition: service_healthy
viewsh-module-ops-server:
image: ${REGISTRY_HOST}/viewsh-module-ops-server:${IMAGE_TAG}
container_name: aiot-ops-server
restart: unless-stopped
network_mode: host
environment:
JAVA_OPTS: "-Xms${OPS_JVM_XMS} -Xmx${OPS_JVM_XMX} ${JVM_COMMON_OPTS}"
SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE}
SPRING_AUTOCONFIGURE_EXCLUDE: com.binarywang.spring.starter.wxjava.mp.config.WxMpServiceAutoConfiguration
NACOS_SERVER_ADDR: ${NACOS_HOST}:${NACOS_PORT}
MYSQL_HOST: ${MYSQL_HOST}
MYSQL_PORT: ${MYSQL_PORT}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
REDIS_HOST: ${REDIS_HOST}
REDIS_PORT: ${REDIS_PORT}
REDIS_PASSWORD: ${REDIS_PASSWORD}
TZ: ${TZ}
volumes:
- app-logs:/app/logs
deploy:
resources:
limits:
memory: ${OPS_MEMORY_LIMIT}
cpus: '0.5'
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:48085"]
interval: 30s
timeout: 10s
retries: 5
start_period: 90s
depends_on:
viewsh-module-infra-server:
condition: service_healthy
# ============ XXL-JOB Admin (可选,暂时注释) ============
# 如需部署 XXL-JOB Admin取消以下注释
# xxl-job-admin:
# image: xuxueli/xxl-job-admin:2.4.0
# container_name: aiot-xxl-job-admin
# restart: unless-stopped
# network_mode: host
# environment:
# TZ: ${TZ}
# PARAMS: >
# --spring.datasource.url=jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/${MYSQL_DATABASE}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
# --spring.datasource.username=${MYSQL_USER}
# --spring.datasource.password=${MYSQL_PASSWORD}
# --xxl.job.accessToken=${XXL_JOB_ACCESS_TOKEN:-default_token}
# volumes:
# - app-logs:/data/applogs
# healthcheck:
# test: ["CMD", "curl", "-f", "http://localhost:9090/xxl-job-admin"]
# interval: 30s
# timeout: 10s
# retries: 5
# start_period: 60s