893 lines
25 KiB
Markdown
893 lines
25 KiB
Markdown
# ThingsBoard Docker 目录全面分析
|
||
|
||
## 1. 目录概述
|
||
|
||
`docker/` 目录是 ThingsBoard 微服务架构的 **Docker Compose 部署配置目录**,提供了完整的容器化部署方案。该目录包含:
|
||
|
||
- Docker Compose 配置文件(模块化设计)
|
||
- 部署管理脚本
|
||
- 环境变量配置文件
|
||
- 服务配置文件
|
||
- 监控配置
|
||
- 负载均衡配置
|
||
|
||
## 2. 目录结构
|
||
|
||
```
|
||
docker/
|
||
├── 脚本文件/
|
||
│ ├── docker-install-tb.sh # 安装脚本(数据库初始化)
|
||
│ ├── docker-start-services.sh # 启动所有服务
|
||
│ ├── docker-stop-services.sh # 停止所有服务
|
||
│ ├── docker-remove-services.sh # 删除服务容器
|
||
│ ├── docker-update-service.sh # 更新服务
|
||
│ ├── docker-upgrade-tb.sh # 数据库升级
|
||
│ ├── docker-create-log-folders.sh # 创建日志目录
|
||
│ ├── docker-check-log-folders.sh # 检查日志目录
|
||
│ └── compose-utils.sh # 工具函数库
|
||
│
|
||
├── Docker Compose 配置文件/
|
||
│ ├── docker-compose.yml # 主配置文件(定义所有服务)
|
||
│ ├── docker-compose.postgres.yml # PostgreSQL 数据库配置
|
||
│ ├── docker-compose.hybrid.yml # 混合模式(PostgreSQL + Cassandra)
|
||
│ ├── docker-compose.kafka.yml # Kafka 消息队列配置
|
||
│ ├── docker-compose.confluent.yml # Confluent Kafka 配置
|
||
│ ├── docker-compose.valkey.yml # Valkey 单节点缓存配置
|
||
│ ├── docker-compose.valkey-cluster.yml # Valkey 集群配置
|
||
│ ├── docker-compose.valkey-sentinel.yml # Valkey 哨兵模式配置
|
||
│ ├── docker-compose.edqs.yml # 事件驱动查询服务配置
|
||
│ ├── docker-compose.prometheus-grafana.yml # 监控服务配置
|
||
│ └── docker-compose.*.volumes.yml # 数据卷配置
|
||
│
|
||
├── 环境变量配置文件/
|
||
│ ├── tb-node.env # 核心服务通用配置
|
||
│ ├── tb-node.postgres.env # PostgreSQL 数据库配置
|
||
│ ├── tb-node.hybrid.env # 混合模式数据库配置
|
||
│ ├── tb-mqtt-transport.env # MQTT 传输服务配置
|
||
│ ├── tb-http-transport.env # HTTP 传输服务配置
|
||
│ ├── tb-coap-transport.env # CoAP 传输服务配置
|
||
│ ├── tb-lwm2m-transport.env # LWM2M 传输服务配置
|
||
│ ├── tb-snmp-transport.env # SNMP 传输服务配置
|
||
│ ├── tb-web-ui.env # Web UI 配置
|
||
│ ├── tb-js-executor.env # JavaScript 执行器配置
|
||
│ ├── tb-vc-executor.env # 版本控制执行器配置
|
||
│ ├── tb-edqs.env # EDQS 服务配置
|
||
│ ├── queue-kafka.env # Kafka 队列配置
|
||
│ ├── queue-confluent.env # Confluent 队列配置
|
||
│ ├── cache-valkey.env # Valkey 单节点配置
|
||
│ ├── cache-valkey-cluster.env # Valkey 集群配置
|
||
│ ├── cache-valkey-sentinel.env # Valkey 哨兵配置
|
||
│ └── kafka.env # Kafka 服务配置
|
||
│
|
||
├── 配置目录/
|
||
│ ├── tb-node/ # 核心服务配置
|
||
│ │ ├── conf/ # 配置文件
|
||
│ │ └── log/ # 日志目录
|
||
│ ├── tb-transports/ # 传输服务配置
|
||
│ │ ├── mqtt/conf/ # MQTT 配置
|
||
│ │ ├── http/conf/ # HTTP 配置
|
||
│ │ ├── coap/conf/ # CoAP 配置
|
||
│ │ ├── lwm2m/conf/ # LWM2M 配置
|
||
│ │ └── snmp/conf/ # SNMP 配置
|
||
│ ├── tb-vc-executor/ # 版本控制执行器配置
|
||
│ ├── tb-edqs/ # EDQS 服务配置
|
||
│ ├── haproxy/ # HAProxy 负载均衡配置
|
||
│ │ └── config/
|
||
│ │ ├── haproxy.cfg # HAProxy 主配置
|
||
│ │ ├── blocklist.txt # 黑名单
|
||
│ │ └── trustlist.txt # 白名单
|
||
│ └── monitoring/ # 监控配置
|
||
│ ├── prometheus/
|
||
│ │ └── prometheus.yml # Prometheus 配置
|
||
│ └── grafana/
|
||
│ ├── config.monitoring # Grafana 配置
|
||
│ └── provisioning/ # 仪表板和数据源配置
|
||
│
|
||
└── README.md # 使用说明文档
|
||
```
|
||
|
||
## 3. 核心脚本分析
|
||
|
||
### 3.1 docker-install-tb.sh
|
||
|
||
**作用**: 执行 ThingsBoard 的初始安装,包括数据库 schema 初始化。
|
||
|
||
**关键功能**:
|
||
- 启动数据库服务(PostgreSQL/Cassandra)
|
||
- 运行 `tb-core1` 容器执行数据库初始化
|
||
- 可选加载演示数据(`--loadDemo` 参数)
|
||
|
||
**执行流程**:
|
||
```bash
|
||
1. 读取 .env 文件配置
|
||
2. 根据配置组合 Docker Compose 文件
|
||
3. 启动数据库和缓存服务(depends_on)
|
||
4. 运行 tb-core1 容器,设置 INSTALL_TB=true
|
||
5. 执行数据库 schema 创建和初始化
|
||
6. 可选加载演示数据
|
||
```
|
||
|
||
**使用示例**:
|
||
```bash
|
||
# 基本安装
|
||
./docker-install-tb.sh
|
||
|
||
# 安装并加载演示数据
|
||
./docker-install-tb.sh --loadDemo
|
||
```
|
||
|
||
### 3.2 docker-start-services.sh
|
||
|
||
**作用**: 启动所有 ThingsBoard 微服务。
|
||
|
||
**关键功能**:
|
||
- 组合所有 Docker Compose 配置文件
|
||
- 启动所有服务(`docker compose up -d`)
|
||
- 支持 Docker Compose V1 和 V2
|
||
|
||
**执行流程**:
|
||
```bash
|
||
1. 读取 .env 配置
|
||
2. 根据配置选择对应的 Compose 文件
|
||
3. 组合命令:docker compose -f docker-compose.yml -f ... up -d
|
||
4. 启动所有服务
|
||
```
|
||
|
||
### 3.3 docker-stop-services.sh
|
||
|
||
**作用**: 停止所有运行中的服务。
|
||
|
||
**执行命令**: `docker compose stop`
|
||
|
||
### 3.4 docker-remove-services.sh
|
||
|
||
**作用**: 停止并删除所有服务容器和数据卷。
|
||
|
||
**执行命令**: `docker compose down -v`
|
||
|
||
**注意**: 这会删除所有数据,谨慎使用!
|
||
|
||
### 3.5 docker-update-service.sh
|
||
|
||
**作用**: 更新特定服务或所有服务。
|
||
|
||
**功能**:
|
||
- 拉取最新镜像(`docker compose pull`)
|
||
- 重新构建并启动服务(`docker compose up -d --no-deps --build`)
|
||
|
||
**使用示例**:
|
||
```bash
|
||
# 更新所有服务
|
||
./docker-update-service.sh
|
||
|
||
# 更新特定服务
|
||
./docker-update-service.sh tb-core1 tb-mqtt-transport1
|
||
```
|
||
|
||
### 3.6 docker-upgrade-tb.sh
|
||
|
||
**作用**: 执行 ThingsBoard 数据库升级。
|
||
|
||
**关键参数**:
|
||
- `--fromVersion=[VERSION]`: 指定从哪个版本升级
|
||
|
||
**使用示例**:
|
||
```bash
|
||
./docker-upgrade-tb.sh --fromVersion=3.6.0
|
||
```
|
||
|
||
### 3.7 compose-utils.sh
|
||
|
||
**作用**: 工具函数库,提供配置组合逻辑。
|
||
|
||
**核心函数**:
|
||
|
||
1. **additionalComposeArgs()**: 根据 `DATABASE` 环境变量选择数据库配置
|
||
- `postgres` → `docker-compose.postgres.yml`
|
||
- `hybrid` → `docker-compose.hybrid.yml`
|
||
|
||
2. **additionalComposeQueueArgs()**: 根据 `TB_QUEUE_TYPE` 选择队列配置
|
||
- `kafka` → `docker-compose.kafka.yml`
|
||
- `confluent` → `docker-compose.confluent.yml`
|
||
|
||
3. **additionalComposeCacheArgs()**: 根据 `CACHE` 选择缓存配置
|
||
- `valkey` → `docker-compose.valkey.yml`
|
||
- `valkey-cluster` → `docker-compose.valkey-cluster.yml`
|
||
- `valkey-sentinel` → `docker-compose.valkey-sentinel.yml`
|
||
|
||
4. **additionalComposeMonitoringArgs()**: 根据 `MONITORING_ENABLED` 启用监控
|
||
- `true` → `docker-compose.prometheus-grafana.yml`
|
||
|
||
5. **additionalComposeEdqsArgs()**: 根据 `EDQS_ENABLED` 启用 EDQS
|
||
- `true` → `docker-compose.edqs.yml`
|
||
|
||
6. **composeVersion()**: 检测 Docker Compose 版本(V1 或 V2)
|
||
|
||
7. **permissionList()**: 返回需要创建的目录和权限列表
|
||
|
||
8. **checkFolders()**: 检查或创建日志目录并设置权限
|
||
|
||
## 4. Docker Compose 配置文件分析
|
||
|
||
### 4.1 主配置文件:docker-compose.yml
|
||
|
||
**作用**: 定义所有 ThingsBoard 微服务的配置。
|
||
|
||
**包含的服务**:
|
||
|
||
#### 基础设施服务
|
||
- **zookeeper**: 服务发现和协调
|
||
- 镜像: `zookeeper:3.8.1`
|
||
- 端口: `2181`
|
||
|
||
#### 核心服务
|
||
- **tb-core1, tb-core2**: 核心服务(2个实例,高可用)
|
||
- 镜像: `thingsboard/tb-node:{version}`
|
||
- 服务类型: `tb-core`
|
||
- 端口: `8080` (HTTP API), `7070` (Edge RPC)
|
||
- 日志: 最大 200MB,保留 30 个文件
|
||
|
||
- **tb-rule-engine1, tb-rule-engine2**: 规则引擎服务(2个实例)
|
||
- 镜像: `thingsboard/tb-node:{version}`
|
||
- 服务类型: `tb-rule-engine`
|
||
- 端口: `8080`
|
||
|
||
#### 传输服务
|
||
- **tb-mqtt-transport1, tb-mqtt-transport2**: MQTT 传输(2个实例)
|
||
- 镜像: `thingsboard/tb-mqtt-transport:{version}`
|
||
- 端口: `1883`
|
||
|
||
- **tb-http-transport1, tb-http-transport2**: HTTP 传输(2个实例)
|
||
- 镜像: `thingsboard/tb-http-transport:{version}`
|
||
- 端口: `8081`
|
||
|
||
- **tb-coap-transport**: CoAP 传输(1个实例)
|
||
- 镜像: `thingsboard/tb-coap-transport:{version}`
|
||
- 端口: `5683/udp`
|
||
|
||
- **tb-lwm2m-transport**: LWM2M 传输(1个实例)
|
||
- 镜像: `thingsboard/tb-lwm2m-transport:{version}`
|
||
- 端口: `5685/udp`, `5686/udp`
|
||
|
||
- **tb-snmp-transport**: SNMP 传输(1个实例)
|
||
- 镜像: `thingsboard/tb-snmp-transport:{version}`
|
||
- 端口: `1620/udp`
|
||
|
||
#### 前端服务
|
||
- **tb-web-ui1, tb-web-ui2**: Web UI 服务(2个实例)
|
||
- 镜像: `thingsboard/tb-web-ui:{version}`
|
||
- 端口: `8080`
|
||
|
||
#### 辅助服务
|
||
- **tb-js-executor**: JavaScript 执行器
|
||
- 镜像: `thingsboard/tb-js-executor:{version}`
|
||
- 副本数: 10(高并发执行)
|
||
|
||
- **tb-vc-executor1, tb-vc-executor2**: 版本控制执行器(2个实例)
|
||
- 镜像: `thingsboard/tb-vc-executor:{version}`
|
||
- 端口: `8081`
|
||
|
||
#### 负载均衡
|
||
- **haproxy**: 负载均衡器
|
||
- 镜像: `thingsboard/haproxy-certbot:2.2.33-alpine`
|
||
- 端口: `80` (HTTP), `443` (HTTPS), `1883` (MQTT), `7070` (Edge RPC), `9999` (统计)
|
||
|
||
### 4.2 数据库配置
|
||
|
||
#### docker-compose.postgres.yml
|
||
|
||
**作用**: PostgreSQL 模式配置,所有数据存储在 PostgreSQL。
|
||
|
||
**包含服务**:
|
||
- **postgres**: PostgreSQL 16
|
||
- 数据库: `thingsboard`
|
||
- 数据卷: `./tb-node/postgres`
|
||
|
||
**适用场景**: 中小型部署,设备数量 < 10,000
|
||
|
||
#### docker-compose.hybrid.yml
|
||
|
||
**作用**: 混合模式配置,PostgreSQL 存储实体数据,Cassandra 存储时序数据。
|
||
|
||
**包含服务**:
|
||
- **postgres**: PostgreSQL 16(实体数据)
|
||
- **cassandra**: Cassandra 5.0(时序数据)
|
||
- 端口: `9042`
|
||
- 数据卷: `./tb-node/cassandra`
|
||
|
||
**适用场景**: 大型部署,高写入量时序数据
|
||
|
||
### 4.3 消息队列配置
|
||
|
||
#### docker-compose.kafka.yml
|
||
|
||
**作用**: Kafka 消息队列配置。
|
||
|
||
**包含服务**:
|
||
- **kafka**: Kafka 4.0(使用 KRaft 模式,不需要 ZooKeeper)
|
||
- 镜像: `bitnamilegacy/kafka:4.0`
|
||
- 端口: `9092`
|
||
|
||
**特点**: 所有 ThingsBoard 服务都依赖 Kafka 进行消息传递
|
||
|
||
#### docker-compose.confluent.yml
|
||
|
||
**作用**: Confluent Kafka 配置(生产环境推荐)。
|
||
|
||
**特点**: 提供企业级 Kafka 功能
|
||
|
||
### 4.4 缓存配置
|
||
|
||
#### docker-compose.valkey.yml
|
||
|
||
**作用**: Valkey 单节点缓存配置。
|
||
|
||
**包含服务**:
|
||
- **valkey**: Valkey 8.0(单节点)
|
||
- 镜像: `bitnamilegacy/valkey:8.0`
|
||
- 端口: `6379`
|
||
- 数据卷: `./tb-node/valkey-data`
|
||
|
||
**适用场景**: 开发测试环境
|
||
|
||
#### docker-compose.valkey-cluster.yml
|
||
|
||
**作用**: Valkey 集群配置(高可用)。
|
||
|
||
**包含服务**:
|
||
- **valkey-node-0 到 valkey-node-5**: 6个节点(3主3从)
|
||
- 镜像: `bitnamilegacy/valkey-cluster:8.0`
|
||
- 副本因子: 1
|
||
|
||
**适用场景**: 生产环境,高可用要求
|
||
|
||
#### docker-compose.valkey-sentinel.yml
|
||
|
||
**作用**: Valkey 哨兵模式配置(自动故障转移)。
|
||
|
||
**包含服务**:
|
||
- **valkey-primary**: 主节点
|
||
- **valkey-replica**: 从节点
|
||
- **valkey-sentinel**: 哨兵节点
|
||
|
||
**适用场景**: 生产环境,需要自动故障转移
|
||
|
||
### 4.5 其他配置
|
||
|
||
#### docker-compose.edqs.yml
|
||
|
||
**作用**: 事件驱动查询服务配置。
|
||
|
||
**包含服务**:
|
||
- **tb-edqs1, tb-edqs2**: EDQS 服务(2个实例)
|
||
|
||
**作用**: 提供高效的时序数据查询服务
|
||
|
||
#### docker-compose.prometheus-grafana.yml
|
||
|
||
**作用**: 监控服务配置。
|
||
|
||
**包含服务**:
|
||
- **prometheus**: Prometheus v3.1.0
|
||
- 端口: `9090`
|
||
- 配置: `./monitoring/prometheus/prometheus.yml`
|
||
|
||
- **grafana**: Grafana
|
||
- 端口: `3000`
|
||
- 默认登录: `admin` / `foobar`
|
||
|
||
**启用方式**: 设置 `MONITORING_ENABLED=true` 在 `.env` 文件中
|
||
|
||
## 5. 环境变量配置文件分析
|
||
|
||
### 5.1 核心服务配置
|
||
|
||
#### tb-node.env
|
||
|
||
**作用**: 核心服务和规则引擎服务的通用配置。
|
||
|
||
**关键配置**:
|
||
```bash
|
||
ZOOKEEPER_ENABLED=true # 启用 ZooKeeper 服务发现
|
||
ZOOKEEPER_URL=zookeeper:2181 # ZooKeeper 地址
|
||
JS_EVALUATOR=remote # 使用远程 JS 执行器
|
||
TRANSPORT_TYPE=remote # 使用远程传输服务
|
||
METRICS_ENABLED=true # 启用监控指标
|
||
METRICS_ENDPOINTS_EXPOSE=prometheus # 暴露 Prometheus 指标
|
||
```
|
||
|
||
#### tb-node.postgres.env
|
||
|
||
**作用**: PostgreSQL 数据库配置。
|
||
|
||
**关键配置**:
|
||
```bash
|
||
DATABASE_TS_TYPE=sql # SQL 模式
|
||
SPRING_DRIVER_CLASS_NAME=org.postgresql.Driver # PostgreSQL 驱动
|
||
SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/thingsboard
|
||
SPRING_DATASOURCE_USERNAME=postgres
|
||
SPRING_DATASOURCE_PASSWORD=postgres
|
||
```
|
||
|
||
#### tb-node.hybrid.env
|
||
|
||
**作用**: 混合模式数据库配置。
|
||
|
||
**关键配置**:
|
||
```bash
|
||
DATABASE_TS_TYPE=cassandra # 时序数据使用 Cassandra
|
||
CASSANDRA_URL=cassandra:9042 # Cassandra 地址
|
||
SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/thingsboard # 实体数据使用 PostgreSQL
|
||
```
|
||
|
||
### 5.2 传输服务配置
|
||
|
||
#### tb-mqtt-transport.env
|
||
|
||
**关键配置**:
|
||
```bash
|
||
ZOOKEEPER_ENABLED=true
|
||
ZOOKEEPER_URL=zookeeper:2181
|
||
MQTT_BIND_ADDRESS=0.0.0.0
|
||
MQTT_BIND_PORT=1883
|
||
MQTT_TIMEOUT=10000
|
||
METRICS_ENABLED=true
|
||
```
|
||
|
||
#### tb-http-transport.env
|
||
|
||
**关键配置**:
|
||
```bash
|
||
HTTP_BIND_PORT=8081
|
||
WEB_APPLICATION_ENABLE=true
|
||
```
|
||
|
||
### 5.3 队列配置
|
||
|
||
#### queue-kafka.env
|
||
|
||
**关键配置**:
|
||
```bash
|
||
TB_QUEUE_TYPE=kafka
|
||
TB_KAFKA_SERVERS=kafka:9092
|
||
```
|
||
|
||
### 5.4 缓存配置
|
||
|
||
#### cache-valkey.env
|
||
|
||
**关键配置**:
|
||
```bash
|
||
CACHE_TYPE=redis # 注意:配置名仍然是 redis(兼容性)
|
||
REDIS_HOST=valkey # Valkey 服务地址
|
||
```
|
||
|
||
#### cache-valkey-cluster.env
|
||
|
||
**关键配置**:
|
||
```bash
|
||
CACHE_TYPE=redis-cluster
|
||
REDIS_CLUSTER_NODES=valkey-node-0:6379,valkey-node-1:6379,...
|
||
```
|
||
|
||
## 6. 配置组合机制
|
||
|
||
### 6.1 工作原理
|
||
|
||
ThingsBoard 使用 **模块化 Docker Compose 配置**,通过 `.env` 文件选择不同的配置组合:
|
||
|
||
1. **读取 `.env` 文件**,获取配置选择:
|
||
```bash
|
||
DATABASE=postgres # 或 hybrid
|
||
CACHE=valkey # 或 valkey-cluster, valkey-sentinel
|
||
TB_QUEUE_TYPE=kafka # 或 confluent
|
||
MONITORING_ENABLED=false # 或 true
|
||
EDQS_ENABLED=false # 或 true
|
||
```
|
||
|
||
2. **脚本组合 Compose 文件**:
|
||
```bash
|
||
docker compose \
|
||
-f docker-compose.yml \ # 主配置
|
||
-f docker-compose.postgres.yml \ # 数据库配置
|
||
-f docker-compose.kafka.yml \ # 队列配置
|
||
-f docker-compose.valkey.yml \ # 缓存配置
|
||
-f docker-compose.prometheus-grafana.yml \ # 监控(可选)
|
||
up -d
|
||
```
|
||
|
||
3. **服务继承配置**:
|
||
- 主配置文件定义所有服务
|
||
- 附加配置文件覆盖特定服务的配置(如数据库连接、缓存配置)
|
||
|
||
### 6.2 配置覆盖示例
|
||
|
||
**主配置** (`docker-compose.yml`):
|
||
```yaml
|
||
tb-core1:
|
||
env_file:
|
||
- tb-node.env
|
||
```
|
||
|
||
**数据库配置** (`docker-compose.postgres.yml`):
|
||
```yaml
|
||
tb-core1:
|
||
env_file:
|
||
- tb-node.postgres.env # 追加数据库配置
|
||
```
|
||
|
||
**最终效果**: `tb-core1` 会加载 `tb-node.env` 和 `tb-node.postgres.env` 两个文件
|
||
|
||
## 7. 部署架构
|
||
|
||
### 7.1 完整架构图
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ HAProxy (负载均衡器) │
|
||
│ Ports: 80 (HTTP), 443 (HTTPS), 1883 (MQTT), 7070 (RPC) │
|
||
└────────────────────┬────────────────────────────────────────┘
|
||
│
|
||
┌───────────────┼───────────────┐
|
||
│ │ │
|
||
▼ ▼ ▼
|
||
┌─────────┐ ┌─────────┐ ┌─────────┐
|
||
│Web UI 1 │ │Web UI 2 │ │MQTT Tx1 │ │MQTT Tx2 │
|
||
└────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘
|
||
│ │ │ │
|
||
└─────────────┼─────────────┼─────────────┘
|
||
│ │
|
||
▼ ▼
|
||
┌─────────────────────────┐
|
||
│ Kafka Queue │
|
||
│ (消息队列) │
|
||
└───────────┬───────────────┘
|
||
│
|
||
┌───────────┼───────────┐
|
||
│ │
|
||
▼ ▼
|
||
┌──────────┐ ┌──────────────┐
|
||
│tb-core1 │ │tb-core2 │
|
||
│tb-core2 │ │(核心服务) │
|
||
└────┬─────┘ └──────┬───────┘
|
||
│ │
|
||
└───────────┬───────────┘
|
||
│
|
||
┌─────────┼─────────┐
|
||
│ │
|
||
▼ ▼
|
||
┌──────────────┐ ┌──────────────┐
|
||
│PostgreSQL │ │ Cassandra │
|
||
│(实体数据) │ │ (时序数据) │
|
||
└──────────────┘ └──────────────┘
|
||
|
||
基础服务:
|
||
- ZooKeeper (服务发现)
|
||
- Valkey (缓存)
|
||
- JS Executor (JavaScript 执行)
|
||
```
|
||
|
||
### 7.2 服务依赖关系
|
||
|
||
```
|
||
启动顺序(depends_on):
|
||
1. ZooKeeper
|
||
2. PostgreSQL / Cassandra
|
||
3. Kafka
|
||
4. Valkey
|
||
5. tb-js-executor
|
||
6. tb-core1, tb-core2
|
||
7. tb-rule-engine1, tb-rule-engine2
|
||
8. 传输服务(tb-mqtt-transport, ...)
|
||
9. tb-web-ui
|
||
10. HAProxy
|
||
```
|
||
|
||
## 8. 使用流程
|
||
|
||
### 8.1 首次部署
|
||
|
||
```bash
|
||
# 1. 配置 .env 文件
|
||
cat > .env << EOF
|
||
DATABASE=postgres # 或 hybrid
|
||
CACHE=valkey # 或 valkey-cluster
|
||
TB_QUEUE_TYPE=kafka # 或 confluent
|
||
MONITORING_ENABLED=false # 或 true
|
||
EDQS_ENABLED=false # 或 true
|
||
EOF
|
||
|
||
# 2. 创建日志目录
|
||
./docker-create-log-folders.sh
|
||
|
||
# 3. 安装(初始化数据库)
|
||
./docker-install-tb.sh --loadDemo
|
||
|
||
# 4. 启动所有服务
|
||
./docker-start-services.sh
|
||
|
||
# 5. 访问 Web UI
|
||
# http://localhost
|
||
# 默认账号: sysadmin@thingsboard.org / sysadmin
|
||
```
|
||
|
||
### 8.2 日常操作
|
||
|
||
```bash
|
||
# 启动服务
|
||
./docker-start-services.sh
|
||
|
||
# 停止服务
|
||
./docker-stop-services.sh
|
||
|
||
# 查看日志
|
||
docker-compose logs -f tb-core1
|
||
|
||
# 更新服务
|
||
./docker-update-service.sh tb-core1
|
||
|
||
# 查看服务状态
|
||
docker-compose ps
|
||
```
|
||
|
||
### 8.3 升级流程
|
||
|
||
```bash
|
||
# 1. 停止服务
|
||
./docker-stop-services.sh
|
||
|
||
# 2. 执行升级
|
||
./docker-upgrade-tb.sh --fromVersion=3.6.0
|
||
|
||
# 3. 启动服务
|
||
./docker-start-services.sh
|
||
```
|
||
|
||
## 9. 数据持久化
|
||
|
||
### 9.1 数据卷映射
|
||
|
||
所有数据都映射到 `docker/` 目录下:
|
||
|
||
```
|
||
docker/
|
||
├── tb-node/
|
||
│ ├── postgres/ # PostgreSQL 数据
|
||
│ ├── cassandra/ # Cassandra 数据(混合模式)
|
||
│ ├── valkey-data/ # Valkey 数据(单节点)
|
||
│ ├── valkey-cluster-data-0/ # Valkey 集群数据
|
||
│ └── log/ # 应用日志
|
||
├── tb-transports/
|
||
│ └── */log/ # 传输服务日志
|
||
└── haproxy/
|
||
├── letsencrypt/ # SSL 证书
|
||
└── certs.d/ # 自定义证书
|
||
```
|
||
|
||
### 9.2 备份建议
|
||
|
||
```bash
|
||
# 备份 PostgreSQL 数据
|
||
docker exec postgres pg_dump -U postgres thingsboard > backup.sql
|
||
|
||
# 备份 Cassandra 数据
|
||
# 使用 Cassandra 的备份工具
|
||
|
||
# 备份配置
|
||
tar -czf tb-config-backup.tar.gz docker/tb-node/conf docker/tb-transports/*/conf
|
||
```
|
||
|
||
## 10. 监控和日志
|
||
|
||
### 10.1 日志配置
|
||
|
||
所有服务都配置了日志轮转:
|
||
- 最大文件大小: 200MB
|
||
- 保留文件数: 30
|
||
- 总日志大小: 6GB (200MB × 30)
|
||
|
||
### 10.2 Prometheus 监控
|
||
|
||
启用监控后:
|
||
- Prometheus: http://localhost:9090
|
||
- Grafana: http://localhost:3000
|
||
|
||
预置仪表板:
|
||
- Core Service Metrics
|
||
- Rule Engine Metrics
|
||
- Transport Metrics
|
||
- Database Metrics
|
||
|
||
## 11. 高可用配置
|
||
|
||
### 11.1 服务冗余
|
||
|
||
- **tb-core**: 2个实例
|
||
- **tb-rule-engine**: 2个实例
|
||
- **tb-mqtt-transport**: 2个实例
|
||
- **tb-http-transport**: 2个实例
|
||
- **tb-web-ui**: 2个实例
|
||
- **tb-js-executor**: 10个副本(高并发)
|
||
|
||
### 11.2 负载均衡
|
||
|
||
HAProxy 在所有服务实例间进行负载均衡:
|
||
- HTTP/HTTPS 流量 → Web UI 和 Core API
|
||
- MQTT 连接 → MQTT Transport
|
||
- Edge RPC → Core Service
|
||
|
||
### 11.3 数据库高可用
|
||
|
||
- **PostgreSQL**: 可以配置主从复制(需要额外配置)
|
||
- **Cassandra**: 集群模式(多节点)
|
||
- **Valkey**: 集群或哨兵模式
|
||
|
||
## 12. 安全配置
|
||
|
||
### 12.1 网络隔离
|
||
|
||
- 所有服务在同一个 Docker 网络中
|
||
- 数据库端口不映射到宿主机(仅内部访问)
|
||
- 通过 HAProxy 统一对外暴露端口
|
||
|
||
### 12.2 SSL/TLS
|
||
|
||
HAProxy 支持 SSL/TLS:
|
||
- Let's Encrypt 自动证书(`./haproxy/letsencrypt/`)
|
||
- 自定义证书(`./haproxy/certs.d/`)
|
||
|
||
### 12.3 密码配置
|
||
|
||
**注意**: 默认配置使用明文密码,生产环境需要修改:
|
||
- PostgreSQL 密码: `tb-node.postgres.env`
|
||
- Valkey 密码: `docker-compose.valkey-cluster.yml`
|
||
|
||
## 13. 常见配置组合
|
||
|
||
### 13.1 开发测试环境
|
||
|
||
```bash
|
||
DATABASE=postgres
|
||
CACHE=valkey
|
||
TB_QUEUE_TYPE=kafka
|
||
MONITORING_ENABLED=false
|
||
EDQS_ENABLED=false
|
||
```
|
||
|
||
**特点**: 简单配置,资源占用少
|
||
|
||
### 13.2 生产环境(小型)
|
||
|
||
```bash
|
||
DATABASE=postgres
|
||
CACHE=valkey-sentinel
|
||
TB_QUEUE_TYPE=kafka
|
||
MONITORING_ENABLED=true
|
||
EDQS_ENABLED=false
|
||
```
|
||
|
||
**特点**: 高可用缓存,启用监控
|
||
|
||
### 13.3 生产环境(大型)
|
||
|
||
```bash
|
||
DATABASE=hybrid
|
||
CACHE=valkey-cluster
|
||
TB_QUEUE_TYPE=confluent
|
||
MONITORING_ENABLED=true
|
||
EDQS_ENABLED=true
|
||
```
|
||
|
||
**特点**: 混合数据库,集群缓存,企业级队列,启用监控和 EDQS
|
||
|
||
## 14. 最佳实践
|
||
|
||
### 14.1 配置管理
|
||
|
||
1. **使用环境变量**: 敏感信息通过环境变量传递
|
||
2. **版本控制**: 配置文件纳入版本控制
|
||
3. **分离配置**: 不同环境使用不同的 `.env` 文件
|
||
|
||
### 14.2 资源规划
|
||
|
||
- **内存**: 至少 8GB(推荐 16GB+)
|
||
- **CPU**: 至少 4 核(推荐 8 核+)
|
||
- **磁盘**: 至少 50GB(根据数据量调整)
|
||
|
||
### 14.3 监控建议
|
||
|
||
1. **启用监控**: 生产环境必须启用 Prometheus + Grafana
|
||
2. **设置告警**: 配置 Grafana 告警规则
|
||
3. **日志收集**: 考虑使用 ELK 或 Loki 收集日志
|
||
|
||
### 14.4 备份策略
|
||
|
||
1. **数据库备份**: 定期备份 PostgreSQL 和 Cassandra
|
||
2. **配置备份**: 备份所有配置文件
|
||
3. **测试恢复**: 定期测试备份恢复流程
|
||
|
||
## 15. 故障排查
|
||
|
||
### 15.1 常见问题
|
||
|
||
**问题1: 服务启动失败**
|
||
|
||
```bash
|
||
# 检查日志
|
||
docker-compose logs tb-core1
|
||
|
||
# 检查依赖服务
|
||
docker-compose ps
|
||
|
||
# 检查网络
|
||
docker network ls
|
||
```
|
||
|
||
**问题2: 数据库连接失败**
|
||
|
||
```bash
|
||
# 检查数据库是否运行
|
||
docker-compose ps postgres
|
||
|
||
# 检查数据库日志
|
||
docker-compose logs postgres
|
||
|
||
# 测试连接
|
||
docker exec -it postgres psql -U postgres -d thingsboard
|
||
```
|
||
|
||
**问题3: 端口冲突**
|
||
|
||
```bash
|
||
# 检查端口占用
|
||
netstat -tulpn | grep 8080
|
||
|
||
# 修改端口映射(在 docker-compose.yml 中)
|
||
ports:
|
||
- "8081:8080" # 将宿主机端口改为 8081
|
||
```
|
||
|
||
### 15.2 调试技巧
|
||
|
||
```bash
|
||
# 进入容器
|
||
docker exec -it tb-core1 bash
|
||
|
||
# 查看环境变量
|
||
docker exec tb-core1 env
|
||
|
||
# 查看配置文件
|
||
docker exec tb-core1 cat /config/thingsboard.yml
|
||
|
||
# 实时查看日志
|
||
docker-compose logs -f --tail=100 tb-core1
|
||
```
|
||
|
||
## 16. 总结
|
||
|
||
### 16.1 Docker 目录的核心价值
|
||
|
||
1. **模块化设计**: 通过组合不同的 Compose 文件,支持灵活的配置
|
||
2. **一键部署**: 脚本封装了复杂的部署流程
|
||
3. **生产就绪**: 包含高可用、监控、负载均衡等生产环境必需组件
|
||
4. **易于维护**: 清晰的目录结构和配置分离
|
||
|
||
### 16.2 关键特点
|
||
|
||
- ✅ **微服务架构**: 服务拆分,独立部署和扩展
|
||
- ✅ **高可用**: 关键服务多实例部署
|
||
- ✅ **灵活配置**: 支持多种数据库、队列、缓存选择
|
||
- ✅ **监控集成**: 内置 Prometheus + Grafana
|
||
- ✅ **负载均衡**: HAProxy 统一入口
|
||
- ✅ **容器化**: 完全基于 Docker,易于部署和管理
|
||
|
||
### 16.3 适用场景
|
||
|
||
- ✅ **生产环境**: 微服务模式,高可用部署
|
||
- ✅ **开发测试**: 快速搭建完整环境
|
||
- ✅ **演示环境**: 支持加载演示数据
|
||
- ✅ **CI/CD**: 可以集成到持续集成流程
|
||
|
||
通过这个 Docker 目录,ThingsBoard 提供了一个 **企业级的容器化部署方案**,大大简化了部署和运维工作。
|
||
|