在Linux下使用Docker部署chirpstack

news2024/11/16 9:38:46

目录

一、前言

二、chirpstack

1、chirpstack是什么

2、chirpstack组件

3、为什么选择Docker部署

三、Linux下部署过程

四、web界面部署过程


一、前言

        本篇文章我是在Linux下使用 Docker 进行部署chirpstack,chirpstack采用的是v4 版本,v4 版本 与 v3版本 相比,gRPC API 等做了一些改变,需要考虑兼容性。但是我们仅仅使用Docker部署chirpstack 其实就目录和web 界面发生了一些改变,配置逻辑是一样的,并没有太大改变。如果大家用的是 v3版本,哪里不懂也可以直接问我。

二、chirpstack

1、chirpstack是什么

        ChirpStack 是一个开源的 LoRaWAN 网络服务器,可用于 设置私有或公共 LoRaWAN 网络。ChirpStack 提供了一个 Web 界面 用于管理网关、设备和应用程序。ChirpStack 提供了一个基于 gRPC 的 API,可以 用于集成或扩展 ChirpStack。

2、chirpstack组件

(1)ChirpStack Network Server: 简称NS,作用是确保 LoRaWAN 网络的正常运行和管理设备通信。负责 LoRaWAN 网络的核心逻辑。它处理设备的加入过程、下行链路调度、设备活动状态跟踪等。它还负责处理从 LoRa 网关接收到的上行数据,并将下行数据发送到网关。

(2)ChirpStack Application Server: 简称AS,作用是管理和处理应用层数据,提供用户界面和 API 接口。负责处理和管理 LoRaWAN 应用层数据。它允许用户定义应用程序、设备配置和数据解码器。它还提供 API 和 Web 界面,用于管理设备、监控网络流量、处理数据解码和发送应用层数据到外部应用程序。

(3)ChirpStack Gateway Bridge:它充当网关和网络服务器之间的中间件。该组件可以将LoRa网关传输来的LoRa数据包转发器协议转换成ChirpStack网络服务器通用的数据格式(JSON和Protobuf)。

(4)PostgreSQL:这是一个开源的关系型数据库管理系统,用于持续化存储 ChirpStack 的配置数据、设备信息、网关信息、应用程序数据等。

(5)Redis:这是一个开源的内存中数据结构存储系统,通常用作数据库、缓存和消息代理。ChirpStack 使用 Redis 来缓存和处理一些实时数据,提高系统性能和响应速度。

(6)Mosquitto:Mosquitto是一个MQTT协议的代理服务器,用于处理设备和ChirpStack组件之间的通信。它允许LoRaWAN网关和ChirpStack服务之间的消息传递。

        注意一下Postgre SQL和 Redis 的区别,Postgre SQL基于磁盘存储数据,支持持久化存储,数据在磁盘上存储即使系统重启数据也不会丢失,性能相对较慢。Redis基于内存存储数据,支持高效的读写操作,性能极高。

3、为什么选择Docker部署

(1)简化部署过程:上文已讲过ChirpStack 是由多个服务组件组成的,Docker Compose 允许我们通过一个配置文件(docker-compose.yml)定义和运行多个容器,只需要一条命令(docker-compose up)即可启动所有服务。

(2)环境隔离:chirpstack的各个服务可以在独立的容器中运行,避免了依赖冲突和环境污染。

(3)可移植性: 使用 Docker,我们可以确保在开发环境、测试环境和生产环境中运行相同的代码和配置。这有助于避免在不同环境中出现的“环境问题”。

(4)集中配置:所有的服务配置集中在一个 docker-compose.yml 文件中,便于管理和版本控制。我们可以轻松地修改和更新配置。

三、Linux下部署过程

1、从 github 上拉取源代码

v4版本:(接下来以v4版本进行讲解)

git clone https://github.com/chirpstack/chirpstack-docker.git

 v3版本:

git clone https://github.com/chirpstack/chirpstack-docker/tree/v3

2、修改 docker-compose.yml 配置文件

        该文件是一个使用 Docker Compose 配置的多容器应用程序,用于部署 ChirpStack 物联网平台。涵盖了 ChirpStack 系统所需的所有主要组件,确保它们在 Docker 容器中协同工作。(注意,该配置文件通常只需要修改你想要的频段和端口,其他不用改变)

(1)chirpstack

        这是 ChirpStack 应用服务器(一般不用进行修改)。

  chirpstack:
    image: chirpstack/chirpstack:4
    command: -c /etc/chirpstack
    restart: unless-stopped
    volumes:
      - ./configuration/chirpstack:/etc/chirpstack
      - ./lorawan-devices:/opt/lorawan-devices
    depends_on:
      - postgres
      - mosquitto
      - redis
    environment:
      - MQTT_BROKER_HOST=mosquitto
      - REDIS_HOST=redis
      - POSTGRESQL_HOST=postgres
    ports:
      - 8080:8080
  • image: 使用 chirpstack/chirpstack:4 镜像。
  • command: 指定配置文件路径为 /etc/chirpstack
  • restart: 设置为 unless-stopped,即除非手动停止,否则容器会自动重启。
  • volumes: 挂载本地目录 ./configuration/chirpstack 到容器内的 /etc/chirpstack,以及 ./lorawan-devices 到容器内的 /opt/lorawan-devices
  • depends_on: 依赖 postgres, mosquitto, redis 三个服务。
  • environment: 设置环境变量,包括 MQTT_BROKER_HOST, REDIS_HOST, POSTGRESQL_HOST
  • ports: 暴露端口 8080,将容器内的 8080 端口映射到主机的 8080 端口。

(2)chirpstack-gateway-bridge

        这是 ChirpStack 网关桥接器服务(我这里采用的cn470_10频段)。

chirpstack-gateway-bridge:
    image: chirpstack/chirpstack-gateway-bridge:4
    restart: unless-stopped
    ports:
      - 1700:1700/udp
    volumes:
      - ./configuration/chirpstack-gateway-bridge:/etc/chirpstack-gateway-bridge
    environment:
      - INTEGRATION__MQTT__EVENT_TOPIC_TEMPLATE=cn470_10/gateway/{{ .GatewayID }}/event/{{ .EventType }}
      - INTEGRATION__MQTT__STATE_TOPIC_TEMPLATE=cn470_10/gateway/{{ .GatewayID }}/state/{{ .StateType }}
      - INTEGRATION__MQTT__COMMAND_TOPIC_TEMPLATE=cn470_10/gateway/{{ .GatewayID }}/command/#
    depends_on:
      - mosquitto
  • estart: 设置为 unless-stopped
  • ports: 暴露 UDP 端口 1700
  • volumes: 挂载本地目录 ./configuration/chirpstack-gateway-bridge 到容器内的 /etc/chirpstack-gateway-bridge
  • environment: 设置环境变量,指定 MQTT 主题模板。
  • depends_on: 依赖 mosquitto 服务。

(3)chirpstack-gateway-bridge-basicstation

        这是 ChirpStack 网关桥接器的基本站服务(注意修改command部分)。

 chirpstack-gateway-bridge-basicstation:
    image: chirpstack/chirpstack-gateway-bridge:4
    restart: unless-stopped
    command: -c /etc/chirpstack-gateway-bridge/chirpstack-gateway-bridge-basicstation-cn470_10.toml
    ports:
      - 3001:3001
    volumes:
      - ./configuration/chirpstack-gateway-bridge:/etc/chirpstack-gateway-bridge
    depends_on:
      - mosquitto
  • image: 使用 chirpstack/chirpstack-gateway-bridge:4 镜像。
  • restart: 设置为 unless-stopped
  • command: 使用配置文件 chirpstack-gateway-bridge-basicstation-cn470_10.toml
  • ports: 暴露端口 3001
  • volumes: 挂载本地目录 ./configuration/chirpstack-gateway-bridge 到容器内的 /etc/chirpstack-gateway-bridge
  • depends_on: 依赖 mosquitto 服务。

(4)chirpstack-rest-api

        这是 ChirpStack 的 REST API 服务。

chirpstack-rest-api:
    image: chirpstack/chirpstack-rest-api:4
    restart: unless-stopped
    command: --server chirpstack:8080 --bind 0.0.0.0:8090 --insecure
    ports:
      - 8090:8090
    depends_on:
      - chirpstack
  • image: 使用 chirpstack/chirpstack-rest-api:4 镜像。
  • restart: 设置为 unless-stopped
  • command: 指定 ChirpStack 服务器为 chirpstack:8080,绑定地址为 0.0.0.0:8090,并启用不安全模式。
  • ports: 暴露端口 8090
  • depends_on: 依赖 chirpstack 服务。

(5)postgres

        这是 PostgreSQL 数据库服务。

postgres:
    image: postgres:14-alpine
    restart: unless-stopped
    volumes:
      - ./configuration/postgresql/initdb:/docker-entrypoint-initdb.d
      - postgresqldata:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=root
  • image: 使用 postgres:14-alpine 镜像。
  • restart: 设置为 unless-stopped
  • volumes: 挂载本地目录 ./configuration/postgresql/initdb 到容器内的 /docker-entrypoint-initdb.d,以及挂载 Docker 卷 postgresqldata 到容器内的 /var/lib/postgresql/data
  • environment: 设置环境变量 POSTGRES_PASSWORDroot

(6)redis

        这是 Redis 内存数据库服务。

redis:
    image: redis:7-alpine
    restart: unless-stopped
    command: redis-server --save 300 1 --save 60 100 --appendonly no
    volumes:
      - redisdata:/data
  • image: 使用 redis:7-alpine 镜像。
  • restart: 设置为 unless-stopped
  • command: 运行 redis-server,并指定保存策略。
  • volumes: 挂载 Docker 卷 redisdata 到容器内的 /data

(7)mosquitto

        这是 MQTT 消息代理服务。

  mosquitto:
    image: eclipse-mosquitto:2
    restart: unless-stopped
    ports:
      - 1883:1883
    volumes: 
      - ./configuration/mosquitto/config/:/mosquitto/config/

(8)Volumes

        定义数据卷。

volumes:
  postgresqldata:
  redisdata:
  • postgresqldata: 用于存储 PostgreSQL 数据。
  • redisdata: 用于存储 Redis 数据。

四、web界面部署过程

1、访问 chirpstack(IP):8080,默认账号密码是admin

2、创建网关

         接下来就正常给网关起名字,但是网关ID要记住,网关配置中需要修改相对应的ID。

3、添加设备文件

        根据自己的要求进行填写。

4、配置AS

        添加玩应用后,依次在应用中添加设备和多播设置等。

 

         最后,运行网关,看网关是否能够连接到云服务器,并成功转发消息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1909479.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AMEYA360荣登2024电子元器件分销商30强!

2024年7月4日,“2024(第二届)电子产业供应链生态大会”在东莞顺利召开。 本次大会由中国物流与采购联合会和东莞市人民政府联合主办,由中国物流与采购联合会电子产业供应链分会承办,该会议以“智链端生态 互链芯未来”为主题,旨在…

你最近想通了什么事情?这10条职场经验帮助你活得更通透

1别总当老好人 记得刚步入职场那会儿,我简直是“老好人”的代名词。 无论是同事的额外任务,还是朋友的小忙,我总是二话不说就接下来,结果自己累得半死,换来的却是别人的理所当然和偶尔的忽视。 直到有一次&#xff…

蓝牙信标是什么?蓝牙信标好不好用?

说到蓝牙大家应该都非常熟悉,有很多通信设备都可以经过蓝牙而取得联系。但是说到蓝牙信标很多人可能就比较陌生了,毕竟这样的说法太少见了,很多人也不知道这到底是什么。那么究竟我们应该怎么去理解,蓝牙信标是什么,另…

TikTok海外运营,云手机多种变现方法

从现阶段来看,TikTok 的用户基数不断增长,已然成为全球创业者和品牌的全新竞争舞台。其用户数量近乎 20 亿,年轻用户占据主导,市场渗透率也逐年提高。不管是大型企业、著名品牌,还是个体创业者,都绝不能小觑…

进程地址空间(初)

1.遗留问题 前面在fork创建子进程的内容中遗留了一个问题,一个 变量既等于0又大于0. 2.地址空间的概念 (仅有栈区从高地址处向低地址处) (堆区和栈区之间有一大块的镂空,这里暂时不作介绍) 使用代码验证上图的大…

项目实施案例:金蝶云星空对接泛微OA

摘要 在企业信息化中,某电子行业集团公司面临着跨语言、跨系统的业务流程管理和数据同步的挑战。本项目通过一系列的技术实施解决方案,成功地解决了这些问题,提高了企业的运营效率和数据管理的准确性,本此分享满满的干货&#xff…

RTK_ROS_导航(2):卫星图查看

目录 1. 基于MapViz的卫星图查看 1. 基于MapViz的卫星图查看 安装 # 源码安装 mkdir -p RTK_VISION/src cd RTK_VISION/src git clone https://github.com/swri-robotics/mapviz.git --branchmelodic-eol sudo apt-get install ros-$ROS_DISTRO-mapviz ros-$ROS_DISTRO-mapviz-…

django基于个人BMI的健康饮食食谱推荐系统-计算机毕业设计源码26624

目 录 1 绪论 1.1 研究背景和意义 1.2国内外研究现状 1.3论文结构与章节安排 2 系统分析 2.1 可行性分析 2.1.1技术可行性分析 2.1.2 操作可行性分析 2.1.3经济可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分析 2.4系统流程分…

科技日报社激发数据要素价值,树立媒体行业数字化转型标杆

更多案例研究与行业报告,请前往爱分析官网 媒体行业企事业单位在数据要素领域得天独厚,日积月累的新闻报道、媒资素材、读者反馈和市场研究,沉淀出属于它们的“数据金矿”。 但是,多数相关单位尚未重视和发挥数据要素价值&#…

微客云外卖霸王餐系统怎么样?怎么运营外卖霸王餐

微客云霸王餐系统是一个旨在促进本地生活服务的创新平台,特别针对餐饮业,它确实支持商家入驻。该系统设计用于帮助商家通过组织霸王餐活动来提高店铺的知名度、吸引新顾客并增加订单量。商家不仅能够发布免费或优惠的餐饮体验活动,还能利用系…

什么是ThingsKit物联网平台?

在信息化时代的浪潮中,物联网(IoT)作为新一代信息技术的核心,已经逐渐渗透到我们生活的方方面面。而在这个大背景下,Thingskit物联网平台以其独特的技术优势和应用场景,成为了物联网领域的一颗璀璨明星。本…

勿传!自己消化!摆脱内耗最好的方式:读书、运动、走出去——早读(逆天打工人爬取热门微信文章解读)

你知道为什么一个选股策略用的人多了就失效了吗 引言Python 代码第一篇 洞见 摆脱内耗最好的方式:读书、运动、走出去第二篇 我要琢磨出点什么了结尾 引言 我发现一个规律 就是周一大家的学习情绪比较高 因为我看周一文章的点赞和收藏总数远远大于其他几天的 这有点…

请事假不批直接缺勤公司将员工开除!公司竟然败诉!

员工有请假的权利,同时,公司也有不批的权力,一般来说,病假的话,公司都会批,但如果说事假,公司会看员工请假理由情况去批或者不批。这里就有一个案例,员工请事假公司不批,…

智能未来,程易科技引领AI新纪元——全新云智AI人工智能平台产品发布

在数字化浪潮的推动下,人工智能(AI)正以前所未有的速度改变着我们的世界。从自动驾驶汽车到个性化推荐系统,从智能客服到医疗诊断,AI的应用场景日益广泛,其背后的技术支撑也变得越来越重要。在这个背景下&a…

【前端】面试八股文——HTML代码的第一行的意义

深度剖析HTML代码的第一行:DOCTYPE声明的作用与意义 在现代Web开发中,HTML文档的第一行通常包含一个DOCTYPE声明(文档类型声明)。虽然这个声明看似简单,但它在网页的渲染和解析过程中起着至关重要的作用。本文将深入探…

点亿点计划Web3.0广告平台即将发射Clicks科力币

点亿点计划Web3.0广告平台即将发射Clicks科力币 我们很高兴地宣布,点亿点计划Web3.0广告平台即将发射Clicks科力币!科力币(Clicks)是Clicks X Web3.0多功能应用的治理代币,未来将为代币持有人带来巨大的广告收入。 …

解决vite 断点调试定位不准确问题

问题:vite构建时,控制台报错行数等信息定位不准确或debugger断点调试定位不准确 解决:F12后打开设置面板,把“JavaScript源代码映射”去掉可临时解决,如需永久解决需升级vite到最新版 还有一种: 参考&…

nvidia driver和cuda版本较低,ubuntu系统更新nvidia驱动的方法(对于小白最快最最保险的方法)

问题描述: 系统:ubuntu22.04LTS 这两天安装另一个低版本的pytorch环境,提示我的cuda版本很旧,然后运行程序时候甚至直接报错,如下所示: .local/lib/python3.10/site-packages/torch/cuda/__init__.py&quo…

【C++ STL】模拟实现 vector

标题:【C STL】模拟实现 vector 水墨不写bug (图片来源于网络) 正文开始: STL中的vector是一个动态数组,支持随机访问,可以根据需要来扩展数组空间。 本项目将实现vector的部分常用功能,以增强…

veriloga要怎么在candence中编译和加密?

从编译器的角度来说,我在ADS中可能就是直接用notepad编写,然后生成检查,它会有提示成功或报错的信息。但是对比下来,我发现candence的编译器更加方便编写va,所以把运行成功的步骤记录下来,防止遗忘。 首先&#xff0c…