纳入范围: - backend/ Spring Boot 多模块后端(iot-common/device/rule/data/alarm/auth) - frontend/admin/ Vue3 + Element Plus 管理后台 - Android/ 涂鸦原生 APP (com.xhai.iot) - backend/sql/ Flyway 风格迁移脚本(V2~V21) - docs/ 对接文档与设计文档 排除范围: - 构建产物: node_modules/ target/ build/ dist/ .gradle/ - 签名密钥: *.jks *.keystore (严禁入库) - 本机配置: Android/local.properties - 运行日志: logs/ *.log - AI 协作本地数据 .codebuddy/ 与第三方 demo tuya-demo/ .gitattributes 统一以 LF 存储, Windows 批处理保留 CRLF
138 lines
3.3 KiB
YAML
138 lines
3.3 KiB
YAML
version: '3.8'
|
|
|
|
services:
|
|
# MySQL数据库
|
|
mysql:
|
|
image: mysql:8.0
|
|
container_name: iot-mysql
|
|
restart: always
|
|
environment:
|
|
MYSQL_ROOT_PASSWORD: IoT.p2026.Xk9Qm
|
|
MYSQL_DATABASE: iot_platform
|
|
TZ: Asia/Shanghai
|
|
ports:
|
|
- "127.0.0.1:3386:3306"
|
|
volumes:
|
|
- mysql-data:/var/lib/mysql
|
|
- ../backend/sql/init.sql:/docker-entrypoint-initdb.d/init.sql
|
|
command:
|
|
--default-authentication-plugin=mysql_native_password
|
|
--character-set-server=utf8mb4
|
|
--collation-server=utf8mb4_unicode_ci
|
|
networks:
|
|
- iot-network
|
|
|
|
# Redis缓存
|
|
redis:
|
|
image: redis:7-alpine
|
|
container_name: iot-redis
|
|
restart: always
|
|
ports:
|
|
- "6379:6379"
|
|
volumes:
|
|
- redis-data:/data
|
|
command: redis-server --appendonly yes
|
|
networks:
|
|
- iot-network
|
|
|
|
# RabbitMQ消息队列
|
|
rabbitmq:
|
|
image: rabbitmq:3.12-management
|
|
container_name: iot-rabbitmq
|
|
restart: always
|
|
environment:
|
|
RABBITMQ_DEFAULT_USER: guest
|
|
RABBITMQ_DEFAULT_PASS: guest
|
|
ports:
|
|
- "5672:5672"
|
|
- "15672:15672"
|
|
volumes:
|
|
- rabbitmq-data:/var/lib/rabbitmq
|
|
networks:
|
|
- iot-network
|
|
|
|
# EMQX MQTT Broker
|
|
emqx:
|
|
image: emqx/emqx:5.5
|
|
container_name: iot-emqx
|
|
restart: always
|
|
ports:
|
|
- "1883:1883" # MQTT端口
|
|
- "8883:8883" # MQTT over SSL
|
|
- "8084:8084" # WebSocket over SSL
|
|
- "18083:18083" # Dashboard
|
|
environment:
|
|
- EMQX_NAME=emqx
|
|
- EMQX_HOST=127.0.0.1
|
|
- EMQX_DASHBOARD__DEFAULT_PASSWORD=public
|
|
volumes:
|
|
- emqx-data:/opt/emqx/data
|
|
- emqx-log:/opt/emqx/log
|
|
networks:
|
|
- iot-network
|
|
|
|
# InfluxDB时序数据库
|
|
influxdb:
|
|
image: influxdb:2.7
|
|
container_name: iot-influxdb
|
|
restart: always
|
|
environment:
|
|
DOCKER_INFLUXDB_INIT_MODE: setup
|
|
DOCKER_INFLUXDB_INIT_USERNAME: admin
|
|
DOCKER_INFLUXDB_INIT_PASSWORD: admin123456
|
|
DOCKER_INFLUXDB_INIT_ORG: iot-platform
|
|
DOCKER_INFLUXDB_INIT_BUCKET: device-data
|
|
DOCKER_INFLUXDB_INIT_RETENTION: 30d
|
|
DOCKER_INFLUXDB_INIT_ADMIN_TOKEN: iot-platform-token-2026
|
|
ports:
|
|
- "8086:8086"
|
|
volumes:
|
|
- influxdb-data:/var/lib/influxdb2
|
|
- influxdb-config:/etc/influxdb2
|
|
networks:
|
|
- iot-network
|
|
|
|
# XXL-Job调度中心
|
|
xxl-job-admin:
|
|
image: xuxueli/xxl-job-admin:2.4.0
|
|
container_name: iot-xxl-job-admin
|
|
restart: always
|
|
environment:
|
|
PARAMS: '--spring.datasource.url=jdbc:mysql://mysql:3306/iot_platform?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai --spring.datasource.username=root --spring.datasource.password=IoT.p2026.Xk9Qm'
|
|
ports:
|
|
- "8080:8080"
|
|
depends_on:
|
|
- mysql
|
|
networks:
|
|
- iot-network
|
|
|
|
# Grafana可视化
|
|
grafana:
|
|
image: grafana/grafana:10.2
|
|
container_name: iot-grafana
|
|
restart: always
|
|
ports:
|
|
- "3000:3000"
|
|
environment:
|
|
GF_SECURITY_ADMIN_USER: admin
|
|
GF_SECURITY_ADMIN_PASSWORD: admin
|
|
GF_INSTALL_PLUGINS: grafana-clock-panel,grafana-simple-json-datasource
|
|
volumes:
|
|
- grafana-data:/var/lib/grafana
|
|
networks:
|
|
- iot-network
|
|
|
|
volumes:
|
|
mysql-data:
|
|
redis-data:
|
|
rabbitmq-data:
|
|
emqx-data:
|
|
emqx-log:
|
|
influxdb-data:
|
|
influxdb-config:
|
|
grafana-data:
|
|
|
|
networks:
|
|
iot-network:
|
|
driver: bridge
|