thingsboard/summary/14-Docker目录全面分析.md

893 lines
25 KiB
Markdown
Raw Permalink 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.

# 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 提供了一个 **企业级的容器化部署方案**大大简化了部署和运维工作