纳入范围: - 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
8.0 KiB
8.0 KiB
🚀 IoT 平台快速启动指南(端口错开版)
⚠️ 本机已有 OpenCart 项目占用了 80/3306/8080/8081,本文档中的端口已全部错开。
📋 端口分配总览
本机已占用的端口(不要使用)
| 端口 | 服务 |
|---|---|
| 80 | OpenCart (Apache) |
| 3306 | MySQL 5.7 (OpenCart) |
| 8080 | Adminer (OpenCart) |
| 8081 | phpMyAdmin (OpenCart) |
IoT 平台使用的端口
| 服务 | 端口 | 访问地址 |
|---|---|---|
| MySQL 8.0 (iot) | 33060 | localhost:33060 |
| Redis | 6379 | localhost:6379 |
| RabbitMQ AMQP | 5672 | - |
| RabbitMQ 管理 | 15673 | http://localhost:15673 |
| EMQX MQTT | 1883 | - |
| EMQX WebSocket | 8084 | - |
| EMQX Dashboard | 18084 | http://localhost:18084 |
| InfluxDB | 8083 | http://localhost:8083 |
| XXL-Job | 8082 | http://localhost:8082/xxl-job-admin |
| Grafana | 3001 | http://localhost:3001 |
| iot-device (后端) | 9081 | http://localhost:9081/doc.html |
| iot-data (后端) | 9082 | http://localhost:9082/doc.html |
| iot-rule (后端) | 9083 | http://localhost:9083/doc.html |
| iot-alarm (后端) | 9084 | http://localhost:9084/doc.html |
| uniapp H5 | 9000 | http://localhost:9000 |
🐳 第一步:启动 Docker 中间件
cd f:\work\iotsaas\docker
# 启动所有 IoT 平台中间件
docker-compose -f docker-compose.dev.yml up -d
# 查看启动状态
docker-compose -f docker-compose.dev.yml ps
# 查看日志(可选)
docker-compose -f docker-compose.dev.yml logs -f mysql
首次启动 MySQL 会自动执行初始化脚本,约 30 秒后完成。
验证容器
docker ps --filter "name=iot-"
应该看到以下容器:
- iot-mysql (端口 33060)
- iot-redis (端口 6379)
- iot-rabbitmq (端口 5672, 15673)
- iot-emqx (端口 1883, 18084)
- iot-influxdb (端口 8083)
- iot-xxl-job-admin (端口 8082)
- iot-grafana (端口 3001)
验证数据库初始化
# 等待 30 秒后,执行
docker exec -it iot-mysql mysql -uroot -proot -e "SHOW DATABASES;"
# 应该能看到 iot_platform 数据库
验证 InfluxDB 初始化
浏览器访问:http://localhost:8083
- 用户名: admin
- 密码: admin123456
- Organization: iot-platform
- Bucket: device-data
☕ 第二步:启动后端服务
前置条件
- JDK 17+ 已安装
- Maven 3.6+ 已安装
- JAVA_HOME 环境变量已配置
检查环境
java -version
mvn -version
编译项目
cd f:\work\iotsaas\backend
# 清理并编译(首次约需 3-5 分钟)
mvn clean install -DskipTests
如果遇到依赖下载慢,配置阿里云镜像(Maven 的 ~/.m2/settings.xml):
<mirrors>
<mirror>
<id>aliyun</id>
<mirrorOf>central</mirrorOf>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
启动 4 个后端服务
方式 A:IDEA 启动(推荐)
依次启动以下 4 个 main 方法(每个开一个 Run 窗口):
| 顺序 | 启动类 | 端口 | 访问地址 |
|---|---|---|---|
| 1 | com.iot.device.DeviceApplication |
9081 | http://localhost:9081/doc.html |
| 2 | com.iot.data.DataApplication |
9082 | http://localhost:9082/doc.html |
| 3 | com.iot.rule.RuleApplication |
9083 | http://localhost:9083/doc.html |
| 4 | com.iot.alarm.AlarmApplication |
9084 | http://localhost:9084/doc.html |
方式 B:命令行启动
打开 4 个 PowerShell 窗口:
窗口 1 - 设备服务:
cd f:\work\iotsaas\backend\iot-device
mvn spring-boot:run
窗口 2 - 数据服务:
cd f:\work\iotsaas\backend\iot-data
mvn spring-boot:run
窗口 3 - 规则服务:
cd f:\work\iotsaas\backend\iot-rule
mvn spring-boot:run
窗口 4 - 告警服务:
cd f:\work\iotsaas\backend\iot-alarm
mvn spring-boot:run
方式 C:打包后启动
cd f:\work\iotsaas\backend
mvn clean package -DskipTests
# 启动(分别在不同窗口)
java -jar iot-device\target\iot-device-1.0.0.jar
java -jar iot-data\target\iot-data-1.0.0.jar
java -jar iot-rule\target\iot-rule-1.0.0.jar
java -jar iot-alarm\target\iot-alarm-1.0.0.jar
验证后端启动成功
启动成功后会看到类似日志:
========================================
IoT Device Service 启动成功!
访问地址: http://localhost:9081
API文档: http://localhost:9081/doc.html
========================================
📱 第三步:启动前端 (uniapp)
安装依赖
cd f:\work\iotsaas\uniapp
npm install
H5 模式启动
npm run dev:h5
⚠️ Vite 代理已配置:
/api→http://localhost:9081(设备服务)
🧪 第四步:测试验证
1. 测试后端 API
# 设备服务 - 设备列表
curl http://localhost:9081/device/list
# 数据服务 - 设备状态
curl http://localhost:9082/data/latest?deviceId=test001
# 规则服务 - 规则列表
curl http://localhost:9083/rule/list
# 告警服务 - 告警列表
curl http://localhost:9084/alarm/list
2. 访问 Swagger 文档
| 服务 | 文档地址 |
|---|---|
| 设备 | http://localhost:9081/doc.html |
| 数据 | http://localhost:9082/doc.html |
| 规则 | http://localhost:9083/doc.html |
| 告警 | http://localhost:9084/doc.html |
3. 访问运维管理
| 服务 | 地址 | 账号 |
|---|---|---|
| RabbitMQ | http://localhost:15673 | guest/guest |
| EMQX Dashboard | http://localhost:18084 | admin/public |
| InfluxDB UI | http://localhost:8083 | admin/admin123456 |
| XXL-Job | http://localhost:8082/xxl-job-admin | admin/123456 |
| Grafana | http://localhost:3001 | admin/admin |
4. 测试 MQTT 连接
# 安装 MQTT 测试工具
# 或使用浏览器访问 EMQX Dashboard 的 WebSocket 客户端
# 连接地址: ws://localhost:8084/mqtt
⚠️ 常见问题
1. MySQL 连接失败
错误:Communications link failure
原因:MySQL 还在初始化(约 30 秒),或 33060 端口未开放
解决:
# 检查容器状态
docker ps --filter "name=iot-mysql"
# 等待 30-60 秒后重试
# 或重启服务
docker-compose -f docker-compose.dev.yml restart mysql
2. 端口被占用
错误:Port 9081 was already in use
解决:
# 查找占用进程
netstat -ano | findstr ":9081"
# 结束进程(替换 PID)
taskkill /PID <进程ID> /F
3. InfluxDB 初始化失败
现象:访问 http://localhost:8083 报 404
解决:
# 查看 InfluxDB 日志
docker logs iot-influxdb
# 重新初始化
docker-compose -f docker-compose.dev.yml down -v influxdb
docker-compose -f docker-compose.dev.yml up -d influxdb
4. EMQX 启动慢
现象:EMQX 启动需要 30-60 秒
解决:耐心等待,访问 http://localhost:18084 测试
🛑 停止服务
# 停止所有 IoT 中间件
cd f:\work\iotsaas\docker
docker-compose -f docker-compose.dev.yml down
# 停止并删除数据(谨慎!)
docker-compose -f docker-compose.dev.yml down -v
# 后端服务:在 IDEA 或 PowerShell 窗口中 Ctrl+C 停止
📊 完整服务访问清单
启动完成后,可以访问以下地址:
应用服务
- 📱 uniapp 前端: http://localhost:9000
- 🔧 设备服务 API: http://localhost:9081/doc.html
- 📊 数据服务 API: http://localhost:9082/doc.html
- ⚡ 规则服务 API: http://localhost:9083/doc.html
- 🔔 告警服务 API: http://localhost:9084/doc.html
运维管理
- 🗄️ MySQL: localhost:33060 (root/root)
- 🐰 RabbitMQ: http://localhost:15673 (guest/guest)
- 📡 EMQX: http://localhost:18084 (admin/public)
- 📈 InfluxDB: http://localhost:8083 (admin/admin123456)
- ⏰ XXL-Job: http://localhost:8082/xxl-job-admin (admin/123456)
- 📉 Grafana: http://localhost:3001 (admin/admin)
端口转发
- MQTT: localhost:1883
- MQTT WebSocket: localhost:8084
- Redis: localhost:6379