diff --git a/README.md b/README.md index 0fd19e0..96f8ab4 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,13 @@ - **文档地址(国内)**: +## 🧭 部署与启动(一键启动) + +- 一键启动:`docker-compose up -d` +- 访问: + - 前端 `http://localhost:80` (默认 `iot/IoTAbc2025001@`) + - EMQX 管理 `http://localhost:18083`(默认 `admin/public`) + - Adminer `http://localhost:8081` ## 📸 实战案例与视频教程 ### 📊 已对接设备案例(仅展示部分) diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..f62e040 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,165 @@ +version: '3.8' + +services: + backend: + image: ${BACKEND_IMAGE:-nexiot/cn-universal-backend:1.0.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: ${FRONTEND_IMAGE:-nexiot/cn-universal-frontend:1.0.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 diff --git a/docs/周报.md b/docs/周报.md deleted file mode 100644 index da9abd9..0000000 --- a/docs/周报.md +++ /dev/null @@ -1,80 +0,0 @@ -### 📅 2025年9月第4周(9.20-9.23) - -- 🔧 【产品管理优化】 - - ✅ MQTT和TCP产品默认开启自动注册功能 - - ✅ 完善产品管理连接信息显示,解决无法找到入口问题 - - ✅ 系统支持使用内置连接和自建连接 - - ✅ 优化TCP连接信息显示,支持SNI信息和概念 - - ✅ TCP服务默认绑定网络服务,支持绑定状态管理 - -- 🏠 【网关设备管理】 - - ✅ 网关与网关子设备功能调整,支持一个网关绑定多个不同产品的子设备 - - ✅ 网关子设备显示绑定网关设备信息 - - ✅ 乐橙设备增删改查增加验证机制 - -- 📹 【视频模块优化】 - - ✅ 乐橙播放器界面优化 - - ✅ 视频模块权限调整 - - ✅ 真实设备播放摄像头功能修复 - - ✅ 暂时移除音频检查功能 - -- 🛠️ 【系统优化与修复】 - - ✅ 移除fastjson2依赖,减少系统间强依赖 - - ✅ 调整依赖注入方式,修复无效bean注入问题 - - ✅ 优化查询条件与索引匹配 - - ✅ 修复test环境显示问题 - - ✅ 清理无用代码和文档 - -- 📝 【文档与描述】 - - ✅ 删除部分markdown设计过程文档 - - ✅ 调整描述文字和界面显示 - -### 📅 2025年9月第3周(9.12-9.19) - -- 🧩 【设备协议扩展】 - - ✅ 新增 UDP 通信模块(默认开启),适配 UDP 协议传输 - - ✅ 新增 Ezviz(萤石)接入模块,支持萤石设备接入 - - ✅ 优化 imoulife(乐橙)模块,支持自有开放平台账号 - -- 🧠 【设备影子系统】 - - ✅ 增加设备影子强制刷盘机制,支持异常状态恢复 - - ✅ 解析流程可获取历史影子数据(零代码侵入联动判断) - - ✅ Web IDE 支持直接读取设备影子数据 - -- 🔌 【连接管理优化】 - - ✅ 设备重连时自动替换旧连接,解决僵尸连接问题 - - ✅ 重构 TCP 通信逻辑(tcpdown 模块),提升可维护性 - -- ⚙️ 【性能与稳定性】 - - ✅ 修复产品缓存不失效问题,优化数据库查询效率 - - ✅ 日志表结构升级,支持自动分区 - - ✅ 完善集群消息日志存储逻辑,避免指令路由异常 - -- 🧰 【工具与配置】 - - ✅ 封装统一工具类(uniqueId 生成、时间格式化等) - - ✅ 公共配置支持 boolean 类型适配 - - ✅ 修复时间格式化、枚举命名重复等问题 - -### 📅 2025年9月第2周(9.8-9.12) - -- 🔧 【零代码侵入-TCP接入】解决电表DT645使用netty协议半包全包的问题,增加一个codec和2个工具类。 - -- 🛠️ 【WEB-IDE调试器】增加16进制、ASCII和Modbus相关等20余个公共方法,供IDE的直接调用。 - -- 🔄 【cluster集群】集群环境低概率会遇到指令路由错误的问题。 - -- ⚡ 【优化若干】重构iotId的生成逻辑,极大较少数据库的非必要查询。 - -- 📸 【产品管理】增加产品图片上传,增加七牛云。 - -### 📅 2025年9月第1周(9.1-9.7) - -- 🚀 【设备影子】设备影子热数据不再实时更新数据库,用redis缓存,定时刷库,提高吞吐量。 - -- 🌐 【北向应用】HTTP北向应用数据推送问题修复若干、推送安全鉴权功能增强。 - -- 🛡️ 【TCP接入服务】增加异常IP的封禁策略;集群环境的控制重启、关闭、启动优化。 - -- 📊 【流程编排】增加可视化的集成,为工业场景及特殊情况的接入、采集和推送作为补充。 - -- 🔧 【其他】修复错误若干;优化日志; diff --git a/数据库表结构1031-sql.zip b/数据库表结构1031-sql.zip deleted file mode 100644 index 2f9dcae..0000000 Binary files a/数据库表结构1031-sql.zip and /dev/null differ