云计算百科
云计算领域专业知识百科平台

使用内网穿透工具NPS,docker容器搭建ThingsBoard服务器

ThingsBoard 是一个开源的物联网(IoT)平台,专注于设备管理、数据收集、处理和可视化,支持多种通信协议如 MQTT、CoAP 和 HTTP。它提供了强大的规则引擎和丰富的可视化工具,帮助用户快速构建智能能源、车队跟踪、智能农业等物联网应用。基于 Java 和 TypeScript 开发,ThingsBoard 拥有活跃的社区和详细的文档,采用 Apache 2.0 开源协议,适合各种规模的物联网项目,帮助用户高效管理和分析设备数据。

一.ThingsBoard服务器部署要求:

1. 服务器要求

   – 必须已部署运行ThingsBoard服务器

   – 提供两种部署方案:

     – 快速体验方案:使用[官方Live Demo服务器](https://demo.thingsboard.io/)

     – 本地部署方案:根据操作系统选择安装方式

2. 操作系统适配 

   – Windows系统:需遵循[Windows专用安装指南](https://thingsboard.io/docs/user-guide/install/windows/)

   – Linux系统:推荐使用Docker部署

项目地址

https://github.com/thingsboard/thingsboard?tab=readme-ov-file

文档:ThingsBoard Community Edition | ThingsBoard Community Edition

3.本项目方案

  • -选择本地部署方案,Linux系统,使用Docker部署
  • -使用内网设备部署ThingsBoard服务,然后利用内网穿透技术,将本地服务利用资源有限的服务器,进行端口转发暴露于公网

二.实施步骤

1.Docker部署

1.1实现命令参考链接

Ubuntu 快速安装docker和docker compose

1.2注意事项

目前放开 docker 的下载,脚本安装,文档服务,官网。但是镜像下载肯定还是要用镜像站,通常情况下,要先配置镜像源,再执行拉取镜像的操作。

1.2.1配置镜像源
  • 若没有配置镜像源,Docker 会默认从 Docker Hub 拉取镜像,在网络状况不佳时,拉取速度   可能较慢。
  • 通过编辑 daemon.json 文件,添加镜像源地址,让 Docker 在后续拉取镜像时能从这些镜像源获取数据,进而加快拉取速度。
  • 具体操作步骤 1.配置 Docker 镜像源 如果你想使用这些镜像源,需要先将它们配置到 Docker 的配置文件中。以下是配置步骤:

# 创建或编辑 Docker 配置文件
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.m.daocloud.io",
"https://a.ussh.net",
"https://dockerproxy.net"
]
}
EOF
# 重新加载系统服务配置
sudo systemctl daemon-reload

# 重启 Docker 服务
sudo systemctl restart docker

1.2.2尝试拉取 Thingsboard 镜像
  • 配置好镜像源后,你可以尝试从这些镜像源拉取 Thingsboard 镜像。执行以下命令.

docker pull thingsboard/tb-postgres:latest

  • 如果镜像存在于配置的镜像源中,Docker 会从其中一个镜像源下载该镜像;如果所有镜像源都没有该镜像,Docker 会尝试从默认的 DockerHub 拉取。
  • 拉取成功下载镜像页面

2. 部署运行ThingsBoard服务

2.1Linux+Docker安装流程

  • 步骤1:创建数据目录

# 创建数据存储目录
mkdir -p ~/.mytb-data

# 设置目录权限(用户组ID 799是ThingsBoard的默认用户)
sudo chown -R 799:799 ~/.mytb-data

  • 步骤2:创建日志目录

# 创建日志存储目录
mkdir -p ~/.mytb-logs

# 设置相同权限
sudo chown -R 799:799 ~/.mytb-logs

  • 步骤3:启动Docker容器 docker run -it \\
    -p 8080:9090 \\ # Web访问端口映射
    -p 7070:7070 \\ # HTTP API端口
    -p 1883:1883 \\ # MQTT协议端口
    -p 5683-5688:5683-5688/udp \\ # CoAP协议端口范围
    -v ~/.mytb-data:/data \\ # 数据持久化挂载
    -v ~/.mytb-logs:/var/log/thingsboard \\ # 日志持久化
    –name mytb \\ # 容器命名
    –restart always \\ # 自动重启策略
    thingsboard/tb-postgres # 使用PostgreSQL版本的镜像

 3.内网穿透配置

 3.1ThingsBoard端口映射关系

   | 容器端口 | 宿主机端口 | 协议 | 用途 |

   | 9090 | 8080 | TCP | Web界面访问 |

   | 7070 | 7070 | TCP | HTTP API调用 |

   | 1883 | 1883 | TCP | MQTT协议通信 |

   | 5683-5688| 5683-5688 | UDP | CoAP协议通信 |

3.2内网穿透场景下的端口配置策略

3.2.1 端口映射原则

-公网服务器端口:需在公网服务器防火墙开放以下端口

-内网穿透工具:需将公网服务器端口与本地端口建立映射关系

  •  说明,端口一致性的技术必要性

MQTT(1883)/CoAP(7070)端口保持穿透一致的核心原因:

– 协议规范要求:IANA分配的默认端口

– 客户端兼容性:避免修改设备端连接配置

– 防火墙策略:降低端口放行复杂度

– 服务发现机制:符合行业标准端口约定

3.2.2端口对照表

说明,HTTP服务无域名配置

| 服务类型 | 内网端口 | 公网端口 | 协议 | 备注 |

| HTTP | 8080 | 18080 | TCP | 公网端口选大数18080,避免与系统服务冲突 |

| MQTT | 1883 | 1883 | TCP | 需确认公网端口未被占用 |

| CoAP | 7070 | 7070 | UDP | 建议配置端口速率限制 |

| LwM2M | 5683-5688| 5683-5688| UDP | 需逐端口创建映射 |

3.2.3在nps的web管理网页创建客户以及穿透隧道
  • 参考上篇文章,访问Web管理界面

    浏览器访问 http://服务器IP:8080,使用设置的账号密码登录。

  • 创建客户端,点新增,备注可选,记住密钥,后面用来验证客户端

  • 下载客户端并且修改客户端配置

编辑 conf/npc.conf:

server_addr=服务器IP:8024 # 服务端地址和端口
conn_type=tcp # 连接协议
vkey=客户端唯一密钥 # 在Web界面创建客户端时生成

  • 创建隧道
    按照上面的端口对照表将本地端口(Docker映射)端口映射到公网服务器端口

    示例,| HTTP | 8080 | 18080 | TCP | 公网端口选大数18080,避免与系统服务冲突 |

  • 其他端口也一样穿透

  • 关于| LwM2M | 5683-5688| 需逐端口创建映射 |的解决方案

    LwM2M端口组批量创建脚本  

    #!/bin/bash
    for port in {5683..5688}; do
    echo "[lwm2m-$port]
    mode = udp
    target_addr = 127.0.0.1:$port
    server_port = $port
    rate_limit = 5MB" >> /etc/npc/conf/npc.conf
    done

  • 说明:脚本要解决的核心痛点——通过直接修改 `npc` 的配置文件批量创建端口映射规则,避免在网页管理界面手动逐个添加

 

4. 服务验证方法:

  •  Web控制台:浏览器访问 `http://公网IP:80` 或绑定域名
  • 关于不绑定域名方案

     HTTP服务无域名访问实现

默认演示账户,注意访问该页面需要确保nps客户端在线。

   – 用户名: `tenant@thingsboard.org`

   – 密码: `tenant`

   – 其他演示账户详见[官方账户说明](https://thingsboard.io/docs/getting-started-guide/helloworld/#demo-account)

补充之前配置,不绑定域名方案在NPS中实现方式:端口映射模式

mode = tcp

target_addr = 127.0.0.1:8080

server_port = 18080 # 公网访问端口

赞(0)
未经允许不得转载:网硕互联帮助中心 » 使用内网穿透工具NPS,docker容器搭建ThingsBoard服务器
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!