在Linux下使用Docker部署chirpstack
目录
一、前言
二、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:4command: -c /etc/chirpstackrestart: unless-stoppedvolumes:- ./configuration/chirpstack:/etc/chirpstack- ./lorawan-devices:/opt/lorawan-devicesdepends_on:- postgres- mosquitto- redisenvironment:- MQTT_BROKER_HOST=mosquitto- REDIS_HOST=redis- POSTGRESQL_HOST=postgresports:- 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:4restart: unless-stoppedports:- 1700:1700/udpvolumes:- ./configuration/chirpstack-gateway-bridge:/etc/chirpstack-gateway-bridgeenvironment:- 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:4restart: unless-stoppedcommand: -c /etc/chirpstack-gateway-bridge/chirpstack-gateway-bridge-basicstation-cn470_10.tomlports:- 3001:3001volumes:- ./configuration/chirpstack-gateway-bridge:/etc/chirpstack-gateway-bridgedepends_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:4restart: unless-stoppedcommand: --server chirpstack:8080 --bind 0.0.0.0:8090 --insecureports:- 8090:8090depends_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-alpinerestart: unless-stoppedvolumes:- ./configuration/postgresql/initdb:/docker-entrypoint-initdb.d- postgresqldata:/var/lib/postgresql/dataenvironment:- 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_PASSWORD为root。
(6)redis
这是 Redis 内存数据库服务。
redis:image: redis:7-alpinerestart: unless-stoppedcommand: redis-server --save 300 1 --save 60 100 --appendonly novolumes:- redisdata:/data
- image: 使用
redis:7-alpine镜像。 - restart: 设置为
unless-stopped。 - command: 运行
redis-server,并指定保存策略。 - volumes: 挂载 Docker 卷
redisdata到容器内的/data。
(7)mosquitto
这是 MQTT 消息代理服务。
mosquitto:image: eclipse-mosquitto:2restart: unless-stoppedports:- 1883:1883volumes: - ./configuration/mosquitto/config/:/mosquitto/config/
(8)Volumes
定义数据卷。
volumes:postgresqldata:redisdata:
- postgresqldata: 用于存储 PostgreSQL 数据。
- redisdata: 用于存储 Redis 数据。
3、docke-compose启动
sudo docker-compose up -d

四、web界面部署过程
1、访问 chirpstack(IP):8080,默认账号密码是admin

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

3、添加设备文件
根据自己的要求进行填写。

4、配置AS

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

最后,运行网关,看网关是否能够连接到云服务器,并成功转发消息。
相关文章:
在Linux下使用Docker部署chirpstack
目录 一、前言 二、chirpstack 1、chirpstack是什么 2、chirpstack组件 3、为什么选择Docker部署 三、Linux下部署过程 四、web界面部署过程 一、前言 本篇文章我是在Linux下使用 Docker 进行部署chirpstack,chirpstack采用的是v4 版本,v4 版本 与…...
《昇思25天学习打卡营第14天|计算机视觉-ShuffleNet图像分类》
FCN图像语义分割&ResNet50迁移学习&ResNet50图像分类 当前案例不支持在GPU设备上静态图模式运行,其他模式运行皆支持。 ShuffleNet网络介绍 ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型,和MobileNet, SqueezeNet等一样主要应用在移动端…...
将字符串写入结构体变量中
将字符串写入结构体变量中,主要涉及到结构体中字符数组(或指针)的使用。 一、使用字符数组 假设你有一个结构体,它包含一个字符数组来存储字符串: #include <stdio.h> #include <string.h> // 用于st…...
iPhone 16 Pro系列将标配潜望镜头:已开始生产,支持5倍变焦
ChatGPT狂飙160天,世界已经不是之前的样子。 更多资源欢迎关注 7月6日消息,据DigiTimes最新报道,苹果将在iPhone 16 Pro中引入iPhone 15 Pro Max同款5倍光学变焦四棱镜潜望镜头。 报道称,目前苹果已经将模组订单交至大立光电和玉…...
PG在还没有pg_class的时候怎么访问基础系统表?
在没有pg_class的时候,数据库怎么访问系统表?这个问题可以分成两个阶段来看: 数据库簇初始化,此时一个database都没有,所以怎么构造和访问pg_class等系统表是一个问题私有内存初始化系统表。PG的系统表信息是放在back…...
UnityHub 无法添加模块问题
文章目录 1.问题描述2.问题解决 1.问题描述 在Hub中无法添加模块 2.问题解决 1、点击设置 2、设置版本安装位置 可以发现installs的安装位置路径设置不是unity安装位置,这里我们更改成自己电脑unity安装位置的上一级路径 添加模块正常:...
python04——类(基础new)
类其实也是一种封装的思想,类就是把变量、方法等封装在一起,然后可以通过不同的实例化对其进行调用操作。 1.类的定义 class 类名: 变量a def __init__ (self,参数2,参数2...):初始化函数!!&…...
【Python百日进阶-Web开发-Peewee】Day296 - 查询示例(五)聚合2、递归
文章目录 14.6.13 列出每个指定设施的预订总小时数 List the total hours booked per named facility14.6.14 列出每位会员在 2012 年 9 月 1 日之后的首次预订 List each member’s first booking after September 1st 201214.6.15 生成成员名称列表,每行包含成员总数 Produc…...
闲话银行家舍入法,以及在程序中如何实现
前言 相信对于四舍五入的舍入法,大家都耳熟能详,但对于银行家舍入法,可能就会比较少接触了! 可是在金融界,银行家舍入法可是大名鼎鼎的主角之一,主要应用于金融领域和涉及货币计算的场合。 那么…...
最短路径算法(算法篇)
算法之最短路径算法 最短路径算法 概念: 考查最短路径问题,可能会输入一个赋权图(也就是边带有权的图),则一条路径的v1v2…vN的值就是对路径的边的权求和,这叫做赋权路径长,如果是无权路径长就是单纯的路径上的边数。…...
昇思25天学习打卡营第11天 | LLM原理和实践:基于MindSpore实现BERT对话情绪识别
1. 基于MindSpore实现BERT对话情绪识别 1.1 环境配置 # 实验环境已经预装了mindspore2.2.14,如需更换mindspore版本,可更改下面mindspore的版本号 !pip uninstall mindspore -y !pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore2.2…...
反向散射技术(backscatter communication)
智能反射表面辅助的反向散射通信系统研究综述(知网) 1 反向散射通信技术优势和应用场景 反向散射通信技术通过被动射频技术发送信号,不需要一定配有主动射频单元,被认为是构建绿色节能、低成本、可灵活部署的未来物联网规模化应用关键技术之一,是实现“…...
致远CopyFile文件复制漏洞
复现版本 V8.0SP2 漏洞范围 V5&G6_V6.1至V8.0SP2全系列版本、V5&G6&N_V8.1至V8.1SP2全系列版本。 漏洞复现 上传文件 POST /seeyon/ajax.do?methodajaxAction&managerNameportalCssManager&rnd57507 HTTP/1.1 Accept: */* Content-Type: applicatio…...
MySQL 创建数据库
MySQL 创建数据库 在当今的数据驱动世界中,数据库是任何应用程序的核心组成部分。MySQL,作为一个流行的开源关系数据库管理系统,因其可靠性、易用性和强大的功能而广受欢迎。本文将详细介绍如何在MySQL中创建数据库,包括基础知识和最佳实践。 什么是MySQL数据库? MySQL…...
AbyssFish单连通周期边界多孔结构2D软件
软件介绍 AbyssFish单连通周期边界多孔结构2D软件(以下简称软件)可用于生成具备周期性边界条件的单连通域多孔结构PNG图片,软件可设置生成模型的尺寸、孔隙率、孔隙尺寸、孔喉尺寸等参数,并且具备孔隙形态控制功能。 软件生成的…...
Linux驱动开发-03字符设备驱动框架搭建
一、字符设备驱动开发步骤 驱动模块的加载和卸载(将驱动编译模块,insmod加载驱动运行)字符设备注册与注销(我们的驱动实际上是去操作底层的硬件,所以需要向系统注册一个设备,告诉Linux系统,我有…...
Zynq系列FPGA实现SDI视频编解码+图像缩放+多路视频拼接,基于GTX高速接口,提供8套工程源码和技术支持
目录 1、前言工程概述免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本博已有的FPGA图像缩放方案本方案的无缩放应用本方案在Xilinx--Kintex系列FPGA上的应用 3、详细设计方案设计原理框图SDI 输入设备Gv8601a 均衡器GTX 解串与串化SMPTE SD/HD/3G SDI IP核BT1120转RGB自研…...
VS2019使用C#写窗体程序技巧(1)
1、打开串口 private void button1_Click(object sender, EventArgs e){myPort cmb1.Text;mybaud Convert.ToInt32(cmb2.Text, 10);databit 8;parity Parity.None;stopBit StopBits.One;textBox9.Text "2";try{sp new SerialPort(myPort, mybaud, parity, dat…...
Python爬虫-requests模块
前戏: 1.你是否在夜深人静的时候,想看一些会让你更睡不着的图片却苦于没有资源... 2.你是否在节假日出行高峰的时候,想快速抢购火车票成功..。 3.你是否在网上购物的时候,想快速且精准的定位到口碑质量最好的商品. …...
适用于PyTorch 2.0.0的Ubuntu 22.04上CUDA v11.8和cuDNN 8.7安装指南
将下面内容保存为install.bash,直接用bash执行一把梭解决 #!/bin/bash### steps #### # verify the system has a cuda-capable gpu # download and install the nvidia cuda toolkit and cudnn # setup environmental variables # verify the installation ######…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
