# ThingsBoard Transport 镜像构建与获取指南 ## 1. Transport 镜像来源 ### 1.1 官方镜像位置 ThingsBoard Transport 镜像发布在 **Docker Hub**: **镜像仓库**: `thingsboard` **可用镜像列表**: - `thingsboard/tb-mqtt-transport` - MQTT 传输服务 - `thingsboard/tb-http-transport` - HTTP 传输服务 - `thingsboard/tb-coap-transport` - CoAP 传输服务 - `thingsboard/tb-lwm2m-transport` - LWM2M 传输服务 - `thingsboard/tb-snmp-transport` - SNMP 传输服务 **Docker Hub 地址**: - https://hub.docker.com/u/thingsboard - https://hub.docker.com/r/thingsboard/tb-mqtt-transport - https://hub.docker.com/r/thingsboard/tb-http-transport - https://hub.docker.com/r/thingsboard/tb-coap-transport - https://hub.docker.com/r/thingsboard/tb-lwm2m-transport - https://hub.docker.com/r/thingsboard/tb-snmp-transport ### 1.2 镜像标签 镜像使用版本标签,例如: - `thingsboard/tb-mqtt-transport:4.2.1` - 特定版本 - `thingsboard/tb-mqtt-transport:latest` - 最新版本 ### 1.3 使用官方镜像 直接拉取官方镜像: ```bash # 拉取 MQTT Transport 镜像 docker pull thingsboard/tb-mqtt-transport:4.2.1 # 拉取 HTTP Transport 镜像 docker pull thingsboard/tb-http-transport:4.2.1 # 拉取 CoAP Transport 镜像 docker pull thingsboard/tb-coap-transport:4.2.1 # 拉取 LWM2M Transport 镜像 docker pull thingsboard/tb-lwm2m-transport:4.2.1 # 拉取 SNMP Transport 镜像 docker pull thingsboard/tb-snmp-transport:4.2.1 ``` ## 2. Transport 镜像构建流程 ### 2.1 构建架构 Transport 镜像的构建采用两阶段流程: ``` 阶段1: Transport 模块构建 transport/mqtt/ (源码) ↓ Maven 编译 ↓ Gradle 打包 tb-mqtt-transport-{version}.deb (DEB包) 阶段2: Docker 镜像构建 msa/transport/mqtt/ (Docker配置) ↓ 依赖 transport/mqtt 的 DEB 包 ↓ Dockerfile 构建 thingsboard/tb-mqtt-transport:{version} (Docker镜像) ``` ### 2.2 源码结构 ``` thingsboard/ ├── transport/ # Transport 模块源码 │ ├── mqtt/ # MQTT Transport 源码 │ │ ├── pom.xml # Maven 配置 │ │ └── src/ # 源代码 │ ├── http/ # HTTP Transport 源码 │ ├── coap/ # CoAP Transport 源码 │ ├── lwm2m/ # LWM2M Transport 源码 │ └── snmp/ # SNMP Transport 源码 │ └── msa/transport/ # Transport Docker 镜像构建 ├── mqtt/ # MQTT Transport Docker 配置 │ ├── pom.xml # Maven 配置(依赖 transport/mqtt DEB包) │ └── docker/ │ ├── Dockerfile # Docker 构建文件 │ └── start-tb-mqtt-transport.sh # 启动脚本 ├── http/ # HTTP Transport Docker 配置 ├── coap/ # CoAP Transport Docker 配置 ├── lwm2m/ # LWM2M Transport Docker 配置 └── snmp/ # SNMP Transport Docker 配置 ``` ### 2.3 构建步骤详解 #### 步骤1: 构建 Transport 模块 DEB 包 每个 transport 模块都需要先构建 DEB 包: ```bash # 构建 MQTT Transport DEB 包 cd transport/mqtt mvn clean package # 生成的 DEB 包位置 # transport/mqtt/target/tb-mqtt-transport-4.2.1.deb ``` **DEB 包内容**: - JAR 文件(Spring Boot 打包的应用) - 配置文件 - 启动脚本 #### 步骤2: 构建 Docker 镜像 `msa/transport/mqtt/pom.xml` 中的配置: ```xml org.thingsboard.transport mqtt ${project.version} deb deb provided org.apache.maven.plugins maven-dependency-plugin copy-tb-mqtt-transport-deb package copy org.thingsboard.transport mqtt deb deb ${pkg.name}.deb ${project.build.directory} org.apache.maven.plugins maven-resources-plugin copy-docker-config process-resources copy-resources ${project.build.directory} docker true com.spotify dockerfile-maven-plugin build-docker-image pre-integration-test build ${dockerfile.skip} ${docker.repo}/${docker.name} ${project.build.directory} ``` **Dockerfile** (`msa/transport/mqtt/docker/Dockerfile`): ```dockerfile FROM thingsboard/openjdk17:bookworm-slim # 复制启动脚本和 DEB 包 COPY start-tb-mqtt-transport.sh ${pkg.name}.deb /tmp/ # 安装 DEB 包 RUN chmod a+x /tmp/*.sh \ && mv /tmp/start-tb-mqtt-transport.sh /usr/bin && \ (yes | dpkg -i /tmp/${pkg.name}.deb) && \ rm /tmp/${pkg.name}.deb && \ (systemctl --no-reload disable --now ${pkg.name}.service > /dev/null 2>&1 || :) && \ chmod 555 ${pkg.installFolder}/bin/${pkg.name}.jar USER ${pkg.user} CMD ["start-tb-mqtt-transport.sh"] ``` ## 3. 如何构建 Transport 镜像 ### 3.1 方法1: 使用 Maven 构建(推荐) #### 3.1.1 构建单个 Transport 镜像 ```bash # 构建 MQTT Transport 镜像 cd msa/transport/mqtt mvn clean install -DskipTests -Ddockerfile.skip=false # 构建 HTTP Transport 镜像 cd msa/transport/http mvn clean install -DskipTests -Ddockerfile.skip=false # 构建 CoAP Transport 镜像 cd msa/transport/coap mvn clean install -DskipTests -Ddockerfile.skip=false # 构建 LWM2M Transport 镜像 cd msa/transport/lwm2m mvn clean install -DskipTests -Ddockerfile.skip=false # 构建 SNMP Transport 镜像 cd msa/transport/snmp mvn clean install -DskipTests -Ddockerfile.skip=false ``` #### 3.1.2 构建所有 Transport 镜像 ```bash # 从项目根目录构建所有 transport 镜像 cd msa/transport mvn clean install -DskipTests -Ddockerfile.skip=false # 或者从项目根目录构建整个项目(包括 transport) cd ../.. mvn clean install -DskipTests -Ddockerfile.skip=false --projects msa/transport ``` #### 3.1.3 构建并推送镜像到 Docker Hub ```bash # 构建并推送镜像(需要 Docker Hub 认证) mvn clean install -DskipTests \ -Ddockerfile.skip=false \ -Dpush-docker-image=true \ --projects msa/transport/mqtt ``` **注意**: 推送镜像需要: 1. Docker Hub 账号 2. 登录 Docker Hub: `docker login` 3. 配置 Maven 的 `docker.repo` 属性(默认是 `thingsboard`) ### 3.2 方法2: 使用 build.sh 脚本 ```bash # 构建所有 transport 模块(不包括 Docker 镜像,默认跳过) ./build.sh msa/transport # 注意:build.sh 默认跳过 Docker 构建(dockerfile.skip=true) # 需要手动设置环境变量或修改脚本 ``` ### 3.3 方法3: 直接使用 Dockerfile 如果已经有 DEB 包,可以直接使用 Dockerfile 构建: ```bash # 1. 准备文件 cd msa/transport/mqtt/target # 确保以下文件存在: # - Dockerfile (从 docker/ 目录复制) # - start-tb-mqtt-transport.sh (从 docker/ 目录复制) # - tb-mqtt-transport.deb (从 transport/mqtt/target/ 复制) # 2. 构建镜像 docker build -t thingsboard/tb-mqtt-transport:4.2.1 . ``` ## 4. 构建依赖关系 ### 4.1 构建顺序 Transport 镜像的构建依赖于以下模块: ``` 1. common/* (公共模块) ↓ 2. common/transport/* (传输层公共模块) ↓ 3. transport/{protocol}/ (Transport 模块源码) ↓ 生成 DEB 包 4. msa/transport/{protocol}/ (Docker 镜像构建) ↓ 使用 DEB 包 5. Docker 镜像 ``` ### 4.2 正确的构建命令 ```bash # 方式1: 先构建 transport 模块,再构建 Docker 镜像 mvn clean install -DskipTests --projects transport/mqtt mvn clean install -DskipTests -Ddockerfile.skip=false --projects msa/transport/mqtt # 方式2: 使用 --also-make 自动构建依赖 mvn clean install -DskipTests -Ddockerfile.skip=false \ --projects msa/transport/mqtt \ --also-make # 方式3: 从根目录构建整个项目(推荐) mvn clean install -DskipTests -Ddockerfile.skip=false ``` ## 5. 验证构建结果 ### 5.1 检查镜像 ```bash # 查看本地镜像 docker images | grep thingsboard/tb-.*-transport # 应该看到类似输出: # thingsboard/tb-mqtt-transport 4.2.1 abc123def456 2 hours ago 500MB # thingsboard/tb-http-transport 4.2.1 def456abc123 2 hours ago 450MB # thingsboard/tb-coap-transport 4.2.1 ghi789jkl012 2 hours ago 480MB ``` ### 5.2 测试镜像 ```bash # 运行 MQTT Transport 容器(测试) docker run -it --rm \ -e ZOOKEEPER_ENABLED=true \ -e ZOOKEEPER_URL=zookeeper:2181 \ -e TB_QUEUE_TYPE=kafka \ -e TB_KAFKA_SERVERS=kafka:9092 \ thingsboard/tb-mqtt-transport:4.2.1 ``` ## 6. 官方文档位置 ### 6.1 ThingsBoard 官网 **官方网站**: https://thingsboard.io **文档位置**: - **安装文档**: https://thingsboard.io/docs/user-guide/install/ - **Docker 部署**: https://thingsboard.io/docs/user-guide/install/docker/ - **微服务部署**: https://thingsboard.io/docs/user-guide/install/microservices-docker/ ### 6.2 GitHub 仓库 **源码仓库**: https://github.com/thingsboard/thingsboard **相关文件**: - `msa/transport/` - Transport Docker 镜像构建配置 - `transport/` - Transport 模块源码 - `docker/` - Docker Compose 配置示例 ### 6.3 Docker Hub **Docker Hub 组织**: https://hub.docker.com/u/thingsboard **可用镜像**: - https://hub.docker.com/r/thingsboard/tb-mqtt-transport - https://hub.docker.com/r/thingsboard/tb-http-transport - https://hub.docker.com/r/thingsboard/tb-coap-transport - https://hub.docker.com/r/thingsboard/tb-lwm2m-transport - https://hub.docker.com/r/thingsboard/tb-snmp-transport ### 6.4 官方文档搜索关键词 在 ThingsBoard 官方文档中搜索以下关键词: - "transport" - 传输服务相关文档 - "microservices" - 微服务部署文档 - "docker" - Docker 部署文档 - "MQTT transport" - MQTT 传输服务文档 - "HTTP transport" - HTTP 传输服务文档 ## 7. 常见问题 ### 7.1 问题1: DEB 包找不到 **错误信息**: ``` Could not find artifact org.thingsboard.transport:mqtt:deb:4.2.1 ``` **原因**: Transport 模块的 DEB 包还没有构建 **解决方案**: ```bash # 先构建 transport 模块 mvn clean install -DskipTests --projects transport/mqtt # 然后再构建 Docker 镜像 mvn clean install -DskipTests -Ddockerfile.skip=false --projects msa/transport/mqtt ``` ### 7.2 问题2: Docker 构建被跳过 **原因**: 默认配置 `dockerfile.skip=true` **解决方案**: ```bash # 添加 -Ddockerfile.skip=false 参数 mvn clean install -DskipTests -Ddockerfile.skip=false ``` ### 7.3 问题3: 镜像推送到 Docker Hub 失败 **错误信息**: ``` denied: requested access to the resource is denied ``` **原因**: 未登录 Docker Hub 或没有推送权限 **解决方案**: ```bash # 1. 登录 Docker Hub docker login # 2. 确保有推送权限(镜像仓库必须是 your-username/tb-mqtt-transport) # 或者修改 docker.repo 属性 mvn clean install -DskipTests -Ddockerfile.skip=false \ -Ddocker.repo=your-username \ -Dpush-docker-image=true ``` ### 7.4 问题4: 构建时间过长 **原因**: Maven 需要下载依赖和编译代码 **优化方案**: ```bash # 1. 使用并行构建 mvn clean install -DskipTests -Ddockerfile.skip=false -T4 # 2. 只构建需要的模块 mvn clean install -DskipTests -Ddockerfile.skip=false \ --projects msa/transport/mqtt \ --also-make # 3. 使用本地 Maven 仓库缓存 # 确保 ~/.m2/repository 中有依赖 ``` ## 8. 镜像标签和版本 ### 8.1 版本标签 镜像使用项目版本作为标签: ```bash # 查看项目版本(pom.xml) grep "" pom.xml | head -1 # 镜像标签格式 thingsboard/tb-mqtt-transport:{version} # 例如:thingsboard/tb-mqtt-transport:4.2.1 ``` ### 8.2 Latest 标签 构建时会自动创建 `latest` 标签: ```bash # 推送 latest 标签(在 push-docker-image profile 中) mvn clean install -DskipTests \ -Ddockerfile.skip=false \ -Dpush-docker-image=true ``` ## 9. 构建环境要求 ### 9.1 必需工具 - **Java 17**: 编译 Java 代码 - **Maven 3.6+**: 构建工具 - **Docker**: 构建 Docker 镜像 - **Gradle**: 构建 DEB 包(Maven 会自动调用) ### 9.2 系统要求 - **内存**: 至少 4GB(推荐 8GB+) - **磁盘空间**: 至少 5GB 可用空间 - **操作系统**: Linux/macOS(Windows 需要 WSL) ## 10. 总结 ### 10.1 镜像来源 1. **官方镜像**: Docker Hub `thingsboard/tb-{protocol}-transport` 2. **源码构建**: 从 GitHub 源码构建 3. **DEB 包**: 可以单独下载 DEB 包安装 ### 10.2 构建方法 1. **Maven 构建**(推荐): `mvn clean install -DskipTests -Ddockerfile.skip=false` 2. **直接 Dockerfile**: 使用已有的 DEB 包和 Dockerfile 3. **CI/CD**: 集成到持续集成流程 ### 10.3 官方文档位置 - **官网**: https://thingsboard.io/docs - **GitHub**: https://github.com/thingsboard/thingsboard - **Docker Hub**: https://hub.docker.com/u/thingsboard ### 10.4 关键文件位置 - **Dockerfile**: `msa/transport/{protocol}/docker/Dockerfile` - **Maven 配置**: `msa/transport/{protocol}/pom.xml` - **源码**: `transport/{protocol}/` - **启动脚本**: `msa/transport/{protocol}/docker/start-tb-{protocol}-transport.sh` 通过以上方式,您可以获取或构建 ThingsBoard Transport 的 Docker 镜像。