iotsaas/docker/docker-compose.dev.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

141 lines
3.8 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

version: '3.8'
# IoT平台开发环境(端口错开本机OpenCart占用)
# 本机占用:80(OpenCart), 3306(MySQL5.7), 8080(Adminer), 8081(phpMyAdmin)
services:
# MySQL数据库(8.0)- 端口:33060
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缓存 - 端口:6379(无冲突)
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消息队列 - 端口:5672, 15673
rabbitmq:
image: rabbitmq:3.12-management
container_name: iot-rabbitmq
restart: always
environment:
RABBITMQ_DEFAULT_USER: guest
RABBITMQ_DEFAULT_PASS: guest
ports:
- "5672:5672" # AMQP(无冲突)
- "15673:15672" # 管理界面(错开15672)
volumes:
- rabbitmq-data:/var/lib/rabbitmq
networks:
- iot-network
# EMQX MQTT Broker - 端口:1883, 8084, 18084
emqx:
image: emqx/emqx:5.5
container_name: iot-emqx
restart: always
ports:
- "1883:1883" # MQTT(无冲突)
- "8883:8883" # MQTT SSL
- "8084:8083" # WebSocket(错开8083)
- "18084:18083" # Dashboard(错开18083)
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时序数据库 - 端口:8083
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:
- "8083:8086" # 错开8086
volumes:
- influxdb-data:/var/lib/influxdb2
- influxdb-config:/etc/influxdb2
networks:
- iot-network
# XXL-Job调度中心 - 端口:8082
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:
- "8082:8080" # 错开本机8080
depends_on:
- mysql
networks:
- iot-network
# Grafana可视化 - 端口:3001
grafana:
image: grafana/grafana:10.4.0
container_name: iot-grafana
restart: always
ports:
- "3001: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