iotsaas/QUICKSTART.md
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

333 lines
8.0 KiB
Markdown
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.

# 🚀 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