在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

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

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

相关推荐
韭菜钟1 天前
制作自定义Docker镜像并部署使用
运维·docker·容器
椰汁菠萝1 天前
docker部署gitlab
docker·容器·gitlab
知识分享小能手1 天前
Ubuntu入门学习教程,从入门到精通,Ubuntu 22.04 中安装 Docker 容器 —— 知识点详解(26)
学习·ubuntu·docker
Gold Steps.1 天前
K8s Gateway-API 标准化流量治理
容器·kubernetes·gateway
Knight_AL1 天前
使用 Docker 快速安装 GitLab(CentOS)
docker·centos·gitlab
牛奔1 天前
Docker Compose 解决服务间 DNS 解析失败问题
运维·docker·容器
L1624761 天前
Docker 安装部署全流程使用指南(Linux 通用版)
linux·docker·容器
Mr. Cao code1 天前
MySQL数据卷实战:持久化存储秘籍
数据库·mysql·docker·容器
桂花树下的猫1 天前
ubuntu20.04上docker部署
运维·docker·容器
自不量力的A同学1 天前
Docker 29.1.4
运维·docker·容器