2、LoRaWAN网络服务器搭建:ChirpStack
好,咱们进入第二章。这一章要解决一个核心问题——LoRaWAN网络服务器怎么搭?
你想想看,设备端搞定了,网关也配好了,但数据往哪发?谁来管理这些乱七八糟的节点?答案就是网络服务器。我个人习惯用ChirpStack,开源、稳定、社区活跃,国内外的项目里见得最多。
2.1 ChirpStack简介
ChirpStack,以前叫LoRaServer,是LoRaWAN网络服务器里最主流的开源方案之一。它负责处理网关上报的数据包,做MAC层的解析、加解密、上下行调度,最后把净荷数据交给你的业务应用。
说白了,它就是个中间人。网关听不懂应用层的协议,应用也不懂LoRaWAN的空中协议,ChirpStack在中间做翻译。
它的核心组件包括:
- ChirpStack Network Server:核心网络服务,处理MAC命令、ADR、数据确认等
- ChirpStack Application Server:应用层服务,管理设备、数据转发、集成HTTP/MQTT
- ChirpStack Gateway Bridge:网关协议转换,把Semtech UDP协议转成内部gRPC
- ChirpStack Geolocation Server:可选,用于定位解算
核心要点:ChirpStack把网络层和应用层拆开了。这样做的好处是,你可以单独升级网络层,不影响业务逻辑。我在项目里吃过亏,一开始用all-in-one的方案,升级一次要停整个系统,后来换成ChirpStack的拆分架构,爽多了。
2.2 ChirpStack安装部署(Docker方式)
安装方式有好几种,裸机装、K8s部署、Docker Compose。我个人最推荐Docker Compose方式,原因很简单——快,而且环境隔离,不会把宿主机搞乱。
我曾经在一台Ubuntu 20.04上直接装依赖,结果跟系统自带的PostgreSQL版本冲突,折腾了一下午。后来全改成Docker,再没出过这种问题。
下面是我常用的部署步骤:
- 准备环境:确保安装了Docker和Docker Compose
- 创建目录结构:建议放在 /opt/chirpstack 下
- 编写docker-compose.yml:包含ChirpStack核心服务、PostgreSQL、Redis、MQTT Broker
- 启动服务:docker-compose up -d
- 验证状态:检查容器是否全部正常运行
这里给出一份我常用的docker-compose.yml核心片段:
version: "3"
services:
chirpstack-network-server:
image: chirpstack/chirpstack-network-server:4
volumes:
- ./configuration/chirpstack-network-server:/etc/chirpstack-network-server
depends_on:
- postgres
- redis
chirpstack-application-server:
image: chirpstack/chirpstack-application-server:4
ports:
- "8080:8080"
volumes:
- ./configuration/chirpstack-application-server:/etc/chirpstack-application-server
depends_on:
- chirpstack-network-server
postgres:
image: postgres:14-alpine
environment:
POSTGRES_PASSWORD: chirpstack
volumes:
- ./data/postgres:/var/lib/postgresql/data
redis:
image: redis:7-alpine
volumes:
- ./data/redis:/data
提示:配置文件建议放在宿主机挂载目录里,方便修改和备份。我习惯把配置目录单独用git管理,这样换机器时直接git clone就能恢复环境。
2.3 ChirpStack配置
配置这块,很多人觉得头疼。其实核心就几个文件:
- chirpstack-network-server.toml:网络层配置,包括频段、ADR、数据速率等
- chirpstack-application-server.toml:应用层配置,包括数据库连接、JWT密钥、集成配置
嗯,这里要注意一个坑——频段配置。国内用的是CN470频段,跟欧洲的EU868、北美的US915完全不同。我见过有人直接复制网上的EU868配置,结果网关死活连不上服务器。
正确的CN470配置要点:
| 参数 | 值 | 说明 |
|---|---|---|
| 频段 | CN470 | 中国470-510MHz |
| 上行频率 | 470.3 - 489.3 MHz | 共96个信道 |
| 下行频率 | 500.3 - 509.7 MHz | 共48个信道 |
| 数据速率 | DR0 - DR5 | SF12到SF7 |
配置文件中还需要设置网关的后端地址。如果你用Semtech UDP协议,默认是0.0.0.0:1700。ChirpStack Gateway Bridge会监听这个端口,接收网关发来的数据包。
警告:生产环境中,千万不要把ChirpStack的Web界面暴露到公网。默认的8080端口没有HTTPS,数据是明文传输的。我建议用Nginx反代加SSL证书,或者至少用防火墙限制访问IP。
2.4 ChirpStack Web界面管理
服务启动后,浏览器访问 http://你的IP:8080 就能看到登录页面。默认账号密码是admin/admin。
进去之后,你会看到几个核心管理模块:
- Gateways:管理网关,查看网关状态、接收数据包统计
- Devices:管理终端设备,注册设备、查看上下行数据
- Applications:管理应用,配置数据转发到HTTP或MQTT
- Network:查看网络全局状态,包括ADR统计、数据速率分布
我个人习惯的流程是:先注册网关,再创建应用,最后在应用下注册设备。顺序搞反了会报错,因为设备必须属于某个应用。
注册设备时,需要填写DevEUI、AppEUI、AppKey。这三个参数必须跟设备端烧录的一致。我遇到过最坑的情况是,设备端烧录的AppKey大小写搞反了,结果数据一直解不出来。后来用Wireshark抓包对比才发现问题。
经验之谈:设备注册完成后,建议先在Web界面上手动发一条下行数据,看看设备能不能收到。如果能收到,说明网络通路没问题。如果收不到,八成是频段配置或者密钥对不上。
Web界面还有一个很实用的功能——数据查看。在设备详情页的"Live Data"标签页里,可以看到实时上报的数据包。每条数据都会显示RSSI、SNR、频点、数据速率等信息。调试阶段,我基本就盯着这个页面看。
好了,这一章的内容就到这。ChirpStack的搭建其实不复杂,关键是把频段配对、密钥填对、端口封好。下一章我们会讲怎么把真实的LoRaWAN设备注册到ChirpStack里,并且让数据真正跑通。
小技巧:如果你在部署过程中遇到问题,可以查看容器日志:docker-compose logs -f chirpstack-network-server。日志里会明确告诉你哪里配错了,比如频段不支持、密钥长度不对等。别瞎猜,看日志是最快的。