iotsaas/docker/docker-compose.yml
2995840376 0ce191c448 chore: 初始化 iotsaas 版本库基线
纳入范围:
- 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
2026-10-27 12:00:41 +08:00

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