From f68ef7217ebb3ddf192ac096bd043f3e66c5f982 Mon Sep 17 00:00:00 2001 From: Join <123456@gmail.com> Date: Wed, 12 Nov 2025 19:48:37 +0800 Subject: [PATCH] =?UTF-8?q?chore(docker):=20=E6=96=B0=E5=A2=9E=E6=A0=B9?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=20docker-compose.yml=20=E4=BD=BF=E7=94=A8=20?= =?UTF-8?q?nexiot/back:2.0=20=E4=B8=8E=20nexiot/front:2.0=EF=BC=9B?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=90=8E=E7=AB=AF=E9=95=9C=E5=83=8F=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E8=B7=9F=E9=9A=8F=20info.log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cn-universal-web/Dockerfile | 2 +- docker-compose.yml | 165 ++++++++++++++++++++++++++++++++++++ 2 files changed, 166 insertions(+), 1 deletion(-) create mode 100644 docker-compose.yml diff --git a/cn-universal-web/Dockerfile b/cn-universal-web/Dockerfile index 5014c92..0a47ec1 100644 --- a/cn-universal-web/Dockerfile +++ b/cn-universal-web/Dockerfile @@ -1,5 +1,5 @@ # 使用本地可用的 OpenJDK 21 基础镜像,避免外网拉取失败 -FROM openjdk:21 +FROM eclipse-temurin:21-jre # 设置工作目录 WORKDIR /app diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..db92437 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,165 @@ +version: '3.8' + +services: + backend: + image: nexiot/back:2.0 + 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=false + - UDP_PROTOCOL_ENABLED=false + - CTAIOT_PROTOCOL_ENABLE=false + - ONENET_PROTOCOL_ENABLED=false + - IMOULIFE_PROTOCOL_ENABLED=false + - 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.0 + 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: ${MYSQL_IMAGE:-mysql:8.0} + 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" + + adminer: + image: ${ADMINER_IMAGE:-adminer} + container_name: cn-universal-adminer + restart: unless-stopped + ports: + - "8081:8080" + environment: + - ADMINER_DEFAULT_SERVER=mysql + depends_on: + - mysql + 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