Compartir tecnología

Implementación de chirpstack usando Docker en Linux

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Tabla de contenido

I. Introducción

2. Pila de chirridos

1. ¿Qué es chirpstack?

2. componente chirpstack

3. ¿Por qué elegir la implementación de Docker?

3. Proceso de implementación en Linux

4. Proceso de implementación de la interfaz web


I. Introducción

Estoy usando este artículo en Linux.EstibadorPara implementar chirpstack, chirpstack usaversión v4, versión v4 y versión v3 En comparación con la API gRPC, se han realizado algunos cambios y es necesario considerar la compatibilidad. Pero solo usamos Docker para implementar chirpstack. De hecho, ha habido algunos cambios en el directorio y la interfaz web. La lógica de configuración es la misma y no ha cambiado mucho. Si está utilizando la versión v3, puede preguntarme directamente si no entiende nada.

2. Pila de chirridos

1. ¿Qué es chirpstack?

ChirpStack es un servidor de red LoRaWAN de código abierto que se puede utilizar para configurar redes LoRaWAN públicas o privadas. ChirpStack proporciona una interfaz webSe utiliza para administrar puertas de enlace, dispositivos y aplicaciones.ChirpStack proporciona una API basada en gRPC que se puede utilizar para integrar o ampliar ChirpStack.

2. componente chirpstack

(1) Servidor de red ChirpStack: NS para abreviar, su función esGarantiza el funcionamiento adecuado de la red LoRaWAN y gestiona la comunicación del dispositivo.Eso Responsable de la lógica central de la red LoRaWAN. Maneja el proceso de unión del dispositivo, la programación del enlace descendente, el seguimiento de la actividad del dispositivo, etc. También es responsable de procesar los datos de enlace ascendente recibidos desde la puerta de enlace LoRa y enviar datos de enlace descendente a la puerta de enlace.

(2) Servidor de aplicaciones ChirpStack: Abreviado como AS, su función esAdministre y procese datos de la capa de aplicación y proporcione una interfaz de usuario y una interfaz API.Eso Responsable del procesamiento y gestión de datos de la capa de aplicación LoRaWAN. Permite a los usuarios definir aplicaciones, configuraciones de dispositivos y decodificadores de datos. También proporciona API e interfaces web para administrar dispositivos, monitorear el tráfico de red, manejar la decodificación de datos y enviar datos de la capa de aplicación a aplicaciones externas.

(3) Puente de enlace ChirpStack:élActúa como middleware entre la puerta de enlace y el servidor web. . Este componente puede convertir el protocolo de reenvío de paquetes LoRa transmitido desde la puerta de enlace LoRa al formato de datos común (JSON y Protobuf) del servidor de red ChirpStack.

(4) PostgreSQL: Este es un sistema de gestión de bases de datos relacionales de código abierto paraalmacenamiento persistente Datos de configuración de ChirpStack, información del dispositivo, información de la puerta de enlace, datos de la aplicación, etc.

(5) Redis: Este es un sistema de almacenamiento de estructura de datos en memoria de código abierto, generalmenteSe utiliza como base de datos, caché y intermediario de mensajes. . ChirpStack utiliza Redis para almacenar en caché y procesar algunos datos en tiempo real para mejorar el rendimiento del sistema y la velocidad de respuesta.

(6) Mosquito:Mosquitto es un servidor proxy del protocolo MQTT paraManeja la comunicación entre dispositivos y componentes de ChirpStack.Permite mensajería entre la puerta de enlace LoRaWAN y el servicio ChirpStack.

Preste atención a la diferencia entre Postgre SQL y Redis. Postgre SQL almacena datos en el disco y admite el almacenamiento persistente. Cuando los datos se almacenan en el disco, no se perderán incluso si se reinicia el sistema y el rendimiento es relativamente lento. Redis almacena datos en función de la memoria, admite operaciones eficientes de lectura y escritura y tiene un rendimiento extremadamente alto.

3. ¿Por qué elegir la implementación de Docker?

(1) Simplifique el proceso de implementación:Como se mencionó anteriormente, ChirpStack se compone de múltiples componentes de servicio. Docker Compose nos permite pasar un archivo de configuración (.docker-compose.yml) Definir y ejecutar múltiples contenedores con un solo comando (docker-compose up) para iniciar todos los servicios.

(2) Aislamiento ambiental:Cada servicio de chirpstack puede ejecutarse en contenedores independientes, evitando conflictos de dependencia y contaminación ambiental.

(3) Portabilidad: Al utilizar Docker, podemos asegurarnos de ejecutar el mismo código y configuración en entornos de desarrollo, prueba y producción. Esto ayuda a evitar "problemas ambientales" que surgen en diferentes entornos.

(4) Configuración centralizada:Todas las configuraciones de servicio están centralizadas en uno docker-compose.yml archivos para una fácil gestión y control de versiones. Podemos modificar y actualizar la configuración fácilmente.

3. Proceso de implementación en Linux

1. Extraiga el código fuente de github

Versión v4: (La versión v4 se explicará a continuación)

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

versión v3:

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

2. Modificardocker-compose.yml Archivo de configuración

El archivo es unAplicación de contenedores múltiples configurada con Docker Compose para implementar la plataforma ChirpStack IoT. Cubre todos los componentes principales necesarios para que un sistema ChirpStack garantice que funcionen juntos en un contenedor Docker. (Tenga en cuenta que este archivo de configuración generalmente solo necesita modificar la banda de frecuencia y el puerto que desea, y no es necesario realizar otros cambios)

(1) pila de chirridos

Este es el servidor de aplicaciones ChirpStack (generalmente no se requieren modificaciones).

  1. chirpstack:
  2. image: chirpstack/chirpstack:4
  3. command: -c /etc/chirpstack
  4. restart: unless-stopped
  5. volumes:
  6. - ./configuration/chirpstack:/etc/chirpstack
  7. - ./lorawan-devices:/opt/lorawan-devices
  8. depends_on:
  9. - postgres
  10. - mosquitto
  11. - redis
  12. environment:
  13. - MQTT_BROKER_HOST=mosquitto
  14. - REDIS_HOST=redis
  15. - POSTGRESQL_HOST=postgres
  16. ports:
  17. - 8080:8080
  • imagen: uso chirpstack/chirpstack:4 Espejo.
  • comando: Especifique la ruta del archivo de configuración como /etc/chirpstack
  • reiniciar: establecer en unless-stopped, es decir, el contenedor se reiniciará automáticamente a menos que se detenga manualmente.
  • volúmenes: montar directorio local ./configuration/chirpstack en el contenedor/etc/chirpstack,así como ./lorawan-devices en el contenedor/opt/lorawan-devices
  • depende_on: dependencia postgres, mosquitto, redis Tres servicios.
  • entorno: establece variables de entorno, incluidas MQTT_BROKER_HOST, REDIS_HOST, POSTGRESQL_HOST
  • puertos: puertos expuestos 8080, poner el contenido en el recipiente 8080 Puerto asignado al host8080 puerto.

(2) Puente de puerta de enlace de Chirpstack

Este es el servicio de puente de puerta de enlace ChirpStack (la banda cn470_10 que uso aquí).

  1. chirpstack-gateway-bridge:
  2. image: chirpstack/chirpstack-gateway-bridge:4
  3. restart: unless-stopped
  4. ports:
  5. - 1700:1700/udp
  6. volumes:
  7. - ./configuration/chirpstack-gateway-bridge:/etc/chirpstack-gateway-bridge
  8. environment:
  9. - INTEGRATION__MQTT__EVENT_TOPIC_TEMPLATE=cn470_10/gateway/{{ .GatewayID }}/event/{{ .EventType }}
  10. - INTEGRATION__MQTT__STATE_TOPIC_TEMPLATE=cn470_10/gateway/{{ .GatewayID }}/state/{{ .StateType }}
  11. - INTEGRATION__MQTT__COMMAND_TOPIC_TEMPLATE=cn470_10/gateway/{{ .GatewayID }}/command/#
  12. depends_on:
  13. - mosquitto
  • iniciar: establecer en unless-stopped
  • puertos: exponer los puertos UDP 1700
  • volúmenes: montar directorio local ./configuration/chirpstack-gateway-bridge en el contenedor/etc/chirpstack-gateway-bridge
  • entorno: establezca variables de entorno y especifique la plantilla de tema MQTT.
  • depende_on: dependencia mosquitto Atender.

(3) Estación básica de puente de puerta de enlace de Chirpstack

Este es el servicio de estación básico del puente de puerta de enlace ChirpStack (tenga en cuenta la modificación de la parte del comando).

  1. chirpstack-gateway-bridge-basicstation:
  2. image: chirpstack/chirpstack-gateway-bridge:4
  3. restart: unless-stopped
  4. command: -c /etc/chirpstack-gateway-bridge/chirpstack-gateway-bridge-basicstation-cn470_10.toml
  5. ports:
  6. - 3001:3001
  7. volumes:
  8. - ./configuration/chirpstack-gateway-bridge:/etc/chirpstack-gateway-bridge
  9. depends_on:
  10. - mosquitto
  • imagen: uso chirpstack/chirpstack-gateway-bridge:4 Espejo.
  • reiniciar: establecer en unless-stopped
  • comando: usar el archivo de configuración chirpstack-gateway-bridge-basicstation-cn470_10.toml
  • puertos: puertos expuestos 3001
  • volúmenes: montar directorio local ./configuration/chirpstack-gateway-bridge en el contenedor/etc/chirpstack-gateway-bridge
  • depende_on: dependencia mosquitto Atender.

(4) API de descanso de Chirpstack

Este es el servicio API REST de ChirpStack.

  1. chirpstack-rest-api:
  2. image: chirpstack/chirpstack-rest-api:4
  3. restart: unless-stopped
  4. command: --server chirpstack:8080 --bind 0.0.0.0:8090 --insecure
  5. ports:
  6. - 8090:8090
  7. depends_on:
  8. - chirpstack
  • imagen: uso chirpstack/chirpstack-rest-api:4 Espejo.
  • reiniciar: establecer en unless-stopped
  • comando: Especifique el servidor ChirpStack como chirpstack:8080, la dirección vinculante es 0.0.0.0:8090y habilite el modo inseguro.
  • puertos: puertos expuestos 8090
  • depende_on: dependencia chirpstack Atender.

(5) postgres

Este es el servicio de base de datos PostgreSQL.

  1. postgres:
  2. image: postgres:14-alpine
  3. restart: unless-stopped
  4. volumes:
  5. - ./configuration/postgresql/initdb:/docker-entrypoint-initdb.d
  6. - postgresqldata:/var/lib/postgresql/data
  7. environment:
  8. - POSTGRES_PASSWORD=root
  • imagen: uso postgres:14-alpine Espejo.
  • reiniciar: establecer en unless-stopped
  • volúmenes: montar directorio local ./configuration/postgresql/initdb en el contenedor/docker-entrypoint-initdb.dy monte el volumen Docker postgresqldata en el contenedor/var/lib/postgresql/data
  • entorno: establecer variables de entorno POSTGRES_PASSWORD pararoot

(6) redis

Este es un servicio de base de datos en memoria de Redis.

  1. redis:
  2. image: redis:7-alpine
  3. restart: unless-stopped
  4. command: redis-server --save 300 1 --save 60 100 --appendonly no
  5. volumes:
  6. - redisdata:/data
  • imagen: uso redis:7-alpine Espejo.
  • reiniciar: establecer en unless-stopped
  • comando: ejecutar redis-servery especifique la estrategia de guardado.
  • volúmenes: Montar volúmenes de Docker redisdata en el contenedor/data

(7) mosquito

Este es el servicio de intermediario de mensajes MQTT.

  1. mosquitto:
  2. image: eclipse-mosquitto:2
  3. restart: unless-stopped
  4. ports:
  5. - 1883:1883
  6. volumes:
  7. - ./configuration/mosquitto/config/:/mosquitto/config/

(8) Volúmenes

Definir volúmenes de datos.

  1. volumes:
  2. postgresqldata:
  3. redisdata:
  • postgresqldata: se utiliza para almacenar datos de PostgreSQL.
  • redisdata: se utiliza para almacenar datos de Redis.

3. Se inicia Docke-compose

sudo docker-compose up -d

4. Proceso de implementación de la interfaz web

1. Visite chirpstack (IP): 8080, la contraseña predeterminada de la cuenta es admin

2. Crea una puerta de enlace

A continuación, asigne un nombre a la puerta de enlace normalmente, pero recuerde la ID de la puerta de enlace. La ID correspondiente debe modificarse en la configuración de la puerta de enlace.

3. Agregar archivos de dispositivo

Complételo según sus propios requisitos.

4. Configurar AS

Después de agregar la aplicación de reproducción, agregue dispositivos y configuraciones de multidifusión en la aplicación.

 

Finalmente, ejecute la puerta de enlace para ver si puede conectarse al servidor en la nube y reenviar el mensaje correctamente.