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} 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", "wget", "--no-verbose", "--tries=1", "--spider", "http://172.17.16.14:48080/actuator/health"] 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} 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", "wget", "--no-verbose", "--tries=1", "--spider", "http://172.17.16.14: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} 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", "wget", "--no-verbose", "--tries=1", "--spider", "http://172.17.16.14: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} 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", "wget", "--no-verbose", "--tries=1", "--spider", "http://172.17.16.14: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} # 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", "wget", "--no-verbose", "--tries=1", "--spider", "http://172.17.16.14: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://172.17.16.14:48085/actuator/health"] interval: ${HEALTH_CHECK_INTERVAL} timeout: ${HEALTH_CHECK_TIMEOUT} retries: ${HEALTH_CHECK_RETRIES} start_period: ${HEALTH_CHECK_START_PERIOD}