services: backend: image: nexiot/enterprise-temp-back:2.1 container_name: cn-universal-backend restart: unless-stopped ports: - "9092:9092" environment: - SPRING_DATASOURCE_URL=${SPRING_DATASOURCE_URL:-jdbc:mysql://mysql:3306/univ?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true} - SPRING_DATASOURCE_USERNAME=${SPRING_DATASOURCE_USERNAME:-root} - SPRING_DATASOURCE_PASSWORD=${SPRING_DATASOURCE_PASSWORD:-Haha@2025} - SPRING_DATA_REDIS_HOST=${REDIS_HOST:-redis} - SPRING_DATA_REDIS_PORT=${REDIS_PORT:-6379} - SPRING_DATA_REDIS_PASSWORD=${REDIS_PASSWORD:-Nexiot2025} - SPRING_DATA_REDIS_DATABASE=${REDIS_DATABASE:-11} - MQTT_CFG_HOST=${MQTT_HOST:-tcp://emqx:1883} - MQTT_CFG_CLIENT_USERNAME=${MQTT_USERNAME:-universal_iot} - MQTT_CFG_CLIENT_PASSWORD=${MQTT_PASSWORD:-Abc@2025} - MQTT_CFG_CLIENT_ID_PREFIX=${MQTT_CLIENT_ID_PREFIX:-univ_iot_docker} - MQTT_CFG_HOST_OUT=${MQTT_HOST_OUT:-tcp://127.0.0.1:1883} - MQTT_CFG_EMQX_HEADER_KEY=${EMQX_HEADER_KEY:-universal-emqx} - MQTT_CFG_EMQX_HEADER_VALUE=${EMQX_HEADER_VALUE:-d41d8cd98f00b204e9800998ecf8427e} - SPRING_PROFILES_ACTIVE=docker - RUN_MODE=docker - LOGGING_FILE_PATH=/app/logs - LOGGING_FILE_NAME=/app/logs/cn-universal-web.log - SERVER_PORT=9092 - SERVER_HTTP2_ENABLED=false - JAVA_TOOL_OPTIONS=-Dio.netty.native.workdir=/app/logs - TCP_PROTOCOL_ENABLED=true - UDP_PROTOCOL_ENABLED=true - CTAIOT_PROTOCOL_ENABLE=false - ONENET_PROTOCOL_ENABLED=true - IMOULIFE_PROTOCOL_ENABLED=true - WVP_PROTOCOL_ENABLED=true - SHARD_LOG_ENABLE=true - SPRING_APPLICATION_JSON={"server":{"port":9092},"management":{"endpoints":{"web":{"exposure":{"include":"health,info,metrics,prometheus"},"base-path":"/actuator"}}}},"shard":{"log":{"enable":true,"table":{"number":24},"virtual":{"number":8}},"logMeta":{"enable":true,"table":{"number":24},"virtual":{"number":8}}},"iot":{"register":{"auto":{"unionId":"auto_register","latitude":31.081598,"longitude":81.314141}}}} depends_on: - mysql - redis - emqx networks: - release-network volumes: - backend_logs:/app/logs security_opt: - no-new-privileges:true read_only: true tmpfs: - /tmp logging: driver: "json-file" options: max-size: "10m" max-file: "3" frontend: image: nexiot/front:2.1 container_name: cn-universal-frontend restart: unless-stopped ports: - "80:80" depends_on: - backend networks: - release-network security_opt: - no-new-privileges:true logging: driver: "json-file" options: max-size: "10m" max-file: "3" mysql: image: nexiot/mysql8:2.1 container_name: cn-universal-mysql restart: unless-stopped environment: - MYSQL_ROOT_PASSWORD=${MYSQL_PASSWORD:-Haha@2025} - MYSQL_DATABASE=${MYSQL_DATABASE:-univ} ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql networks: - release-network command: --default-authentication-plugin=mysql_native_password --lower_case_table_names=1 --sql_mode=STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO logging: driver: "json-file" options: max-size: "10m" max-file: "3" redis: image: ${REDIS_IMAGE:-redis:7-alpine} container_name: cn-universal-redis restart: unless-stopped environment: - REDIS_PASSWORD=${REDIS_PASSWORD:-Nexiot2025} ports: - "6379:6379" volumes: - redis_data:/data networks: - release-network command: redis-server --requirepass ${REDIS_PASSWORD:-Nexiot2025} logging: driver: "json-file" options: max-size: "10m" max-file: "3" emqx: image: ${EMQX_IMAGE:-emqx/emqx:5.3} container_name: cn-universal-emqx restart: unless-stopped environment: - EMQX_NAME=emqx - EMQX_HOST=localhost ports: - "1883:1883" - "8083:8083" - "8084:8084" - "18083:18083" volumes: - emqx_data:/opt/emqx/data - emqx_log:/opt/emqx/log networks: - release-network logging: driver: "json-file" options: max-size: "10m" max-file: "3" volumes: mysql_data: redis_data: emqx_data: emqx_log: backend_logs: networks: release-network: driver: bridge