2026-01-13 09:49:19 +08:00
|
|
|
|
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}
|
|
|
|
|
|
NACOS_SERVER_ADDR: ${NACOS_HOST}:${NACOS_PORT}
|
|
|
|
|
|
REDIS_HOST: ${REDIS_HOST}
|
|
|
|
|
|
REDIS_PORT: ${REDIS_PORT}
|
|
|
|
|
|
REDIS_PASSWORD: ${REDIS_PASSWORD}
|
2026-01-13 17:27:59 +08:00
|
|
|
|
REDIS_DATABASE: ${REDIS_DATABASE:-0}
|
2026-01-13 09:49:19 +08:00
|
|
|
|
TZ: ${TZ}
|
|
|
|
|
|
volumes:
|
|
|
|
|
|
- app-logs:/app/logs
|
|
|
|
|
|
deploy:
|
|
|
|
|
|
resources:
|
|
|
|
|
|
limits:
|
|
|
|
|
|
memory: ${GATEWAY_MEMORY_LIMIT}
|
|
|
|
|
|
cpus: '1.0'
|
|
|
|
|
|
healthcheck:
|
2026-01-13 18:12:44 +08:00
|
|
|
|
test: ["CMD", "sh", "-c", "wget --no-verbose --tries=1 --spider http://172.17.16.14:48080/ || exit 1"]
|
2026-01-13 09:49:19 +08:00
|
|
|
|
interval: ${HEALTH_CHECK_INTERVAL}
|
|
|
|
|
|
timeout: ${HEALTH_CHECK_TIMEOUT}
|
|
|
|
|
|
retries: ${HEALTH_CHECK_RETRIES}
|
|
|
|
|
|
start_period: ${HEALTH_CHECK_START_PERIOD}
|
|
|
|
|
|
|
|
|
|
|
|
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}
|
|
|
|
|
|
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}
|
2026-01-13 17:27:59 +08:00
|
|
|
|
REDIS_DATABASE: ${REDIS_DATABASE:-0}
|
2026-01-13 09:49:19 +08:00
|
|
|
|
TZ: ${TZ}
|
|
|
|
|
|
volumes:
|
|
|
|
|
|
- app-logs:/app/logs
|
|
|
|
|
|
deploy:
|
|
|
|
|
|
resources:
|
|
|
|
|
|
limits:
|
|
|
|
|
|
memory: ${SYSTEM_MEMORY_LIMIT}
|
|
|
|
|
|
cpus: '1.0'
|
|
|
|
|
|
healthcheck:
|
|
|
|
|
|
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:48081/actuator/health"]
|
|
|
|
|
|
interval: ${HEALTH_CHECK_INTERVAL}
|
|
|
|
|
|
timeout: ${HEALTH_CHECK_TIMEOUT}
|
|
|
|
|
|
retries: ${HEALTH_CHECK_RETRIES}
|
|
|
|
|
|
start_period: ${HEALTH_CHECK_START_PERIOD}
|
|
|
|
|
|
|
|
|
|
|
|
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}
|
|
|
|
|
|
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}
|
2026-01-13 17:27:59 +08:00
|
|
|
|
REDIS_DATABASE: ${REDIS_DATABASE:-0}
|
2026-01-13 09:49:19 +08:00
|
|
|
|
TZ: ${TZ}
|
|
|
|
|
|
volumes:
|
|
|
|
|
|
- app-logs:/app/logs
|
|
|
|
|
|
deploy:
|
|
|
|
|
|
resources:
|
|
|
|
|
|
limits:
|
|
|
|
|
|
memory: ${INFRA_MEMORY_LIMIT}
|
|
|
|
|
|
cpus: '1.0'
|
|
|
|
|
|
healthcheck:
|
|
|
|
|
|
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:48082/actuator/health"]
|
|
|
|
|
|
interval: ${HEALTH_CHECK_INTERVAL}
|
|
|
|
|
|
timeout: ${HEALTH_CHECK_TIMEOUT}
|
|
|
|
|
|
retries: ${HEALTH_CHECK_RETRIES}
|
|
|
|
|
|
start_period: ${HEALTH_CHECK_START_PERIOD}
|
|
|
|
|
|
|
|
|
|
|
|
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}
|
|
|
|
|
|
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}
|
2026-01-13 17:27:59 +08:00
|
|
|
|
REDIS_DATABASE: ${REDIS_DATABASE:-0}
|
2026-01-13 09:49:19 +08:00
|
|
|
|
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", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:48083/actuator/health"]
|
|
|
|
|
|
interval: ${HEALTH_CHECK_INTERVAL}
|
|
|
|
|
|
timeout: ${HEALTH_CHECK_TIMEOUT}
|
|
|
|
|
|
retries: ${HEALTH_CHECK_RETRIES}
|
|
|
|
|
|
start_period: ${HEALTH_CHECK_START_PERIOD}
|
|
|
|
|
|
|
|
|
|
|
|
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}
|
2026-01-13 14:10:05 +08:00
|
|
|
|
# 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 配置
|
2026-01-13 09:49:19 +08:00
|
|
|
|
REDIS_HOST: ${REDIS_HOST}
|
|
|
|
|
|
REDIS_PORT: ${REDIS_PORT}
|
|
|
|
|
|
REDIS_PASSWORD: ${REDIS_PASSWORD}
|
2026-01-13 14:10:05 +08:00
|
|
|
|
REDIS_DATABASE: ${REDIS_DATABASE}
|
|
|
|
|
|
REDIS_TIMEOUT: 30000ms
|
|
|
|
|
|
# RocketMQ 配置
|
2026-01-13 09:49:19 +08:00
|
|
|
|
ROCKETMQ_NAMESRV_ADDR: ${ROCKETMQ_NAMESRV_HOST}:${ROCKETMQ_NAMESRV_PORT}
|
2026-01-13 14:10:05 +08:00
|
|
|
|
# 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}
|
2026-01-13 09:49:19 +08:00
|
|
|
|
TZ: ${TZ}
|
|
|
|
|
|
volumes:
|
|
|
|
|
|
- app-logs:/app/logs
|
|
|
|
|
|
deploy:
|
|
|
|
|
|
resources:
|
|
|
|
|
|
limits:
|
|
|
|
|
|
memory: ${IOT_GATEWAY_MEMORY_LIMIT}
|
|
|
|
|
|
cpus: '1.5'
|
|
|
|
|
|
healthcheck:
|
|
|
|
|
|
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:48084/actuator/health"]
|
|
|
|
|
|
interval: ${HEALTH_CHECK_INTERVAL}
|
|
|
|
|
|
timeout: ${HEALTH_CHECK_TIMEOUT}
|
|
|
|
|
|
retries: ${HEALTH_CHECK_RETRIES}
|
|
|
|
|
|
start_period: ${HEALTH_CHECK_START_PERIOD}
|
|
|
|
|
|
|
|
|
|
|
|
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}
|
|
|
|
|
|
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", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:48085/actuator/health"]
|
|
|
|
|
|
interval: ${HEALTH_CHECK_INTERVAL}
|
|
|
|
|
|
timeout: ${HEALTH_CHECK_TIMEOUT}
|
|
|
|
|
|
retries: ${HEALTH_CHECK_RETRIES}
|
|
|
|
|
|
start_period: ${HEALTH_CHECK_START_PERIOD}
|