在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: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 数据。

3、docke-compose启动

sudo docker-compose up -d

四、web界面部署过程

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

2、创建网关

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

3、添加设备文件

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

4、配置AS

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

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

相关推荐
南猿北者6 小时前
docker Network(网络)
网络·docker·容器
sam-1237 小时前
k8s上部署redis高可用集群
redis·docker·k8s
Fanstay9858 小时前
在Linux中使用Nginx和Docker进行项目部署
linux·nginx·docker
ggaofeng9 小时前
通过命令学习k8s
云原生·容器·kubernetes
death bell9 小时前
Docker基础概念
运维·docker·容器
天幕繁星11 小时前
docker desktop es windows解决vm.max_map_count [65530] is too low 问题
windows·elasticsearch·docker·docker desktop
想学习java初学者12 小时前
Docker Compose部署Kafka(非Zookeeper)
docker·容器·kafka
尝尝你的优乐美12 小时前
Docker部署Vue项目原来可以那么好用
前端·nginx·docker
qq_道可道12 小时前
K8S升级到1.24后,切换运行时导致 dind 构建镜像慢根因定位与解决
云原生·容器·kubernetes
迷茫运维路13 小时前
docker搭建Jenkins2.346.3版本及常用工具集成配置(ldap、maven、ansible、npm等)
运维·docker·jenkins·cicd