纳入范围: - 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
333 lines
8.0 KiB
Markdown
333 lines
8.0 KiB
Markdown
# 🚀 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 中间件
|
||
|
||
```powershell
|
||
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 秒后完成。
|
||
|
||
### 验证容器
|
||
|
||
```powershell
|
||
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)
|
||
|
||
### 验证数据库初始化
|
||
|
||
```powershell
|
||
# 等待 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 环境变量已配置
|
||
|
||
### 检查环境
|
||
|
||
```powershell
|
||
java -version
|
||
mvn -version
|
||
```
|
||
|
||
### 编译项目
|
||
|
||
```powershell
|
||
cd f:\work\iotsaas\backend
|
||
|
||
# 清理并编译(首次约需 3-5 分钟)
|
||
mvn clean install -DskipTests
|
||
```
|
||
|
||
如果遇到依赖下载慢,配置阿里云镜像(Maven 的 `~/.m2/settings.xml`):
|
||
|
||
```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 - 设备服务:**
|
||
```powershell
|
||
cd f:\work\iotsaas\backend\iot-device
|
||
mvn spring-boot:run
|
||
```
|
||
|
||
**窗口 2 - 数据服务:**
|
||
```powershell
|
||
cd f:\work\iotsaas\backend\iot-data
|
||
mvn spring-boot:run
|
||
```
|
||
|
||
**窗口 3 - 规则服务:**
|
||
```powershell
|
||
cd f:\work\iotsaas\backend\iot-rule
|
||
mvn spring-boot:run
|
||
```
|
||
|
||
**窗口 4 - 告警服务:**
|
||
```powershell
|
||
cd f:\work\iotsaas\backend\iot-alarm
|
||
mvn spring-boot:run
|
||
```
|
||
|
||
#### 方式 C:打包后启动
|
||
|
||
```powershell
|
||
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)
|
||
|
||
### 安装依赖
|
||
|
||
```powershell
|
||
cd f:\work\iotsaas\uniapp
|
||
npm install
|
||
```
|
||
|
||
### H5 模式启动
|
||
|
||
```powershell
|
||
npm run dev:h5
|
||
```
|
||
|
||
访问:http://localhost:9000
|
||
|
||
> ⚠️ Vite 代理已配置:`/api` → `http://localhost:9081`(设备服务)
|
||
|
||
## 🧪 第四步:测试验证
|
||
|
||
### 1. 测试后端 API
|
||
|
||
```powershell
|
||
# 设备服务 - 设备列表
|
||
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 连接
|
||
|
||
```powershell
|
||
# 安装 MQTT 测试工具
|
||
# 或使用浏览器访问 EMQX Dashboard 的 WebSocket 客户端
|
||
# 连接地址: ws://localhost:8084/mqtt
|
||
```
|
||
|
||
## ⚠️ 常见问题
|
||
|
||
### 1. MySQL 连接失败
|
||
**错误**:`Communications link failure`
|
||
|
||
**原因**:MySQL 还在初始化(约 30 秒),或 33060 端口未开放
|
||
|
||
**解决**:
|
||
```powershell
|
||
# 检查容器状态
|
||
docker ps --filter "name=iot-mysql"
|
||
|
||
# 等待 30-60 秒后重试
|
||
# 或重启服务
|
||
docker-compose -f docker-compose.dev.yml restart mysql
|
||
```
|
||
|
||
### 2. 端口被占用
|
||
**错误**:`Port 9081 was already in use`
|
||
|
||
**解决**:
|
||
```powershell
|
||
# 查找占用进程
|
||
netstat -ano | findstr ":9081"
|
||
|
||
# 结束进程(替换 PID)
|
||
taskkill /PID <进程ID> /F
|
||
```
|
||
|
||
### 3. InfluxDB 初始化失败
|
||
**现象**:访问 http://localhost:8083 报 404
|
||
|
||
**解决**:
|
||
```powershell
|
||
# 查看 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 测试
|
||
|
||
## 🛑 停止服务
|
||
|
||
```powershell
|
||
# 停止所有 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
|