diff --git a/README.md b/README.md index b113f51..5ca7a60 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,12 @@ To start all the LoRa Server components, simply run: $ docker-compose up ``` +**Note:** during the startup of services, it is normal to see the following errors: + +* ping database error, will retry in 2s: dial tcp 172.20.0.4:5432: connect: connection refused +* ping database error, will retry in 2s: pq: the database system is starting up + + After all the components have been initialized and started, you should be able to open https://localhost:8080/ in your browser. As the certificates under the `configuration/lora-app-server/certs` are self-signed, this will raise a warning. diff --git a/configuration/lora-app-server/lora-app-server.toml b/configuration/lora-app-server/lora-app-server.toml index 169f52b..31b3405 100644 --- a/configuration/lora-app-server/lora-app-server.toml +++ b/configuration/lora-app-server/lora-app-server.toml @@ -1,216 +1,23 @@ -[general] -# Log level -# -# debug=5, info=4, warning=3, error=2, fatal=1, panic=0 -log_level=4 +# See https://www.loraserver.io/lora-app-server/install/config/ for a full +# configuration example and documentation. -# The number of times passwords must be hashed. A higher number is safer as -# an attack takes more time to perform. -password_hash_iterations=100000 - - -# PostgreSQL settings. -# -# Please note that PostgreSQL 9.5+ is required. [postgresql] -# PostgreSQL dsn (e.g.: postgres://user:password@hostname/database?sslmode=disable). -# -# Besides using an URL (e.g. 'postgres://user:password@hostname/database?sslmode=disable') -# it is also possible to use the following format: -# 'user=loraserver dbname=loraserver sslmode=disable'. -# -# The following connection parameters are supported: -# -# * dbname - The name of the database to connect to -# * user - The user to sign in as -# * password - The user's password -# * host - The host to connect to. Values that start with / are for unix domain sockets. (default is localhost) -# * port - The port to bind to. (default is 5432) -# * sslmode - Whether or not to use SSL (default is require, this is not the default for libpq) -# * fallback_application_name - An application_name to fall back to if one isn't provided. -# * connect_timeout - Maximum wait for connection, in seconds. Zero or not specified means wait indefinitely. -# * sslcert - Cert file location. The file must contain PEM encoded data. -# * sslkey - Key file location. The file must contain PEM encoded data. -# * sslrootcert - The location of the root certificate file. The file must contain PEM encoded data. -# -# Valid values for sslmode are: -# -# * disable - No SSL -# * require - Always SSL (skip verification) -# * verify-ca - Always SSL (verify that the certificate presented by the server was signed by a trusted CA) -# * verify-full - Always SSL (verify that the certification presented by the server was signed by a trusted CA and the server host name matches the one in the certificate) dsn="postgres://loraserver_as:loraserver_as@postgresql/loraserver_as?sslmode=disable" -# Automatically apply database migrations. -# -# It is possible to apply the database-migrations by hand -# (see https://github.com/brocaar/lora-app-server/tree/master/migrations) -# or let LoRa App Server migrate to the latest state automatically, by using -# this setting. Make sure that you always make a backup when upgrading Lora -# App Server and / or applying migrations. -automigrate=true - - -# Redis settings -# -# Please note that Redis 2.6.0+ is required. [redis] -# Redis url (e.g. redis://user:password@hostname/0) -# -# For more information about the Redis URL format, see: -# https://www.iana.org/assignments/uri-schemes/prov/redis url="redis://redis:6379" +[application_server.integration.mqtt] +server="tcp://mosquitto:1883" +username="" +password="" -# Application-server settings. -[application_server] -# Application-server identifier. -# -# Random UUID defining the id of the application-server installation (used by -# LoRa Server as routing-profile id). -# For now it is recommended to not change this id. -id="6d5db27e-4ce2-4b2b-b5d7-91f069397978" +[application_server.api] +public_host="appserver:8001" - # MQTT integration configuration used for publishing (data) events - # and scheduling downlink application payloads. - # Next to this integration which is always available, the user is able to - # configure additional per-application integrations. - [application_server.integration.mqtt] - # MQTT topic templates for the different MQTT topics. - # - # The meaning of these topics are documented at: - # https://docs.loraserver.io/lora-app-server/integrate/data/ - # - # The following substitutions can be used: - # * "{{ .ApplicationID }}" for the application id. - # * "{{ .DevEUI }}" for the DevEUI of the device. - # - # Note: the downlink_topic_template must contain both the application id and - # DevEUI substitution! - uplink_topic_template="application/{{ .ApplicationID }}/device/{{ .DevEUI }}/rx" - downlink_topic_template="application/{{ .ApplicationID }}/device/{{ .DevEUI }}/tx" - join_topic_template="application/{{ .ApplicationID }}/device/{{ .DevEUI }}/join" - ack_topic_template="application/{{ .ApplicationID }}/device/{{ .DevEUI }}/ack" - error_topic_template="application/{{ .ApplicationID }}/device/{{ .DevEUI }}/error" - - # MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws) - server="tcp://mosquitto:1883" - - # Connect with the given username (optional) - username="" - - # Connect with the given password (optional) - password="" - - # Quality of service level - # - # 0: at most once - # 1: at least once - # 2: exactly once - # - # Note: an increase of this value will decrease the performance. - # For more information: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels - qos=0 - - # Clean session - # - # Set the "clean session" flag in the connect message when this client - # connects to an MQTT broker. By setting this flag you are indicating - # that no messages saved by the broker for this client should be delivered. - clean_session=true - - # Client ID - # - # Set the client id to be used by this client when connecting to the MQTT - # broker. A client id must be no longer than 23 characters. When left blank, - # a random id will be generated. This requires clean_session=true. - client_id="" - - # CA certificate file (optional) - # - # Use this when setting up a secure connection (when server uses ssl://...) - # but the certificate used by the server is not trusted by any CA certificate - # on the server (e.g. when self generated). - ca_cert="" - - # TLS certificate file (optional) - tls_cert="" - - # TLS key file (optional) - tls_key="" - - - # Settings for the "internal api" - # - # This is the API used by LoRa Server to communicate with LoRa App Server - # and should not be exposed to the end-user. - [application_server.api] - # ip:port to bind the api server - bind="0.0.0.0:8001" - - # ca certificate used by the api server (optional) - ca_cert="" - - # tls certificate used by the api server (optional) - tls_cert="" - - # tls key used by the api server (optional) - tls_key="" - - # Public ip:port of the application-server API. - # - # This is used by LoRa Server to connect to LoRa App Server. When running - # LoRa App Server on a different host than LoRa Server, make sure to set - # this to the host:ip on which LoRa Server can reach LoRa App Server. - # The port must be equal to the port configured by the 'bind' flag - # above. - public_host="appserver:8001" - - - # Settings for the "external api" - # - # This is the API and web-interface exposed to the end-user. - [application_server.external_api] - # ip:port to bind the (user facing) http server to (web-interface and REST / gRPC api) - bind="0.0.0.0:8080" - - # http server TLS certificate - tls_cert="/etc/lora-app-server/certs/http.pem" - - # http server TLS key - tls_key="/etc/lora-app-server/certs/http-key.pem" - - # JWT secret used for api authentication / authorization - # You could generate this by executing 'openssl rand -base64 32' for example - jwt_secret="verysecret" - - # when set, existing users can't be re-assigned (to avoid exposure of all users to an organization admin)" - disable_assign_existing_users=false - - - -# Join-server configuration. -# -# LoRa App Server implements a (subset) of the join-api specified by the -# LoRaWAN Backend Interfaces specification. This API is used by LoRa Server -# to handle join-requests. -[join_server] -# ip:port to bind the join-server api interface to -bind="0.0.0.0:8003" - -# ca certificate used by the join-server api server -ca_cert="" - -# tls certificate used by the join-server api server (optional) -tls_cert="" - -# tls key used by the join-server api server (optional) -tls_key="" - - -# Network-server configuration. -# -# This configuration is only used to migrate from older LoRa App Server. -[network_server] -server="127.0.0.1:8000" +[application_server.external_api] +bind="0.0.0.0:8080" +tls_cert="/etc/lora-app-server/certs/http.pem" +tls_key="/etc/lora-app-server/certs/http-key.pem" +jwt_secret="verysecret" diff --git a/configuration/lora-gateway-bridge/lora-gateway-bridge.toml b/configuration/lora-gateway-bridge/lora-gateway-bridge.toml index 176c9a1..60d68ee 100644 --- a/configuration/lora-gateway-bridge/lora-gateway-bridge.toml +++ b/configuration/lora-gateway-bridge/lora-gateway-bridge.toml @@ -1,83 +1,7 @@ -[general] -# debug=5, info=4, warning=3, error=2, fatal=1, panic=0 -log_level = 4 +# See https://www.loraserver.io/lora-gateway-bridge/install/config/ for a full +# configuration example and documentation. - -# Configuration which relates to the packet-forwarder. -[packet_forwarder] -# ip:port to bind the UDP listener to -# -# Example: 0.0.0.0:1700 to listen on port 1700 for all network interfaces. -# This is the listeren to which the packet-forwarder forwards its data -# so make sure the 'serv_port_up' and 'serv_port_down' from your -# packet-forwarder matches this port. -udp_bind = "0.0.0.0:1700" - -# Skip the CRC status-check of received packets -# -# This is only has effect when the packet-forwarder is configured to forward -# LoRa frames with CRC errors. -skip_crc_check = false - - -# Configuration for the MQTT backend. [backend.mqtt] -# MQTT topic templates for the different MQTT topics. -# -# The meaning of these topics are documented at: -# https://docs.loraserver.io/lora-gateway-bridge/use/data/ -# -# The default values match the default expected configuration of the -# LoRa Server MQTT backend. Therefore only change these values when -# absolutely needed. -# Use "{{ .MAC }}" as an substitution for the LoRa gateway MAC. -uplink_topic_template="gateway/{{ .MAC }}/rx" -downlink_topic_template="gateway/{{ .MAC }}/tx" -stats_topic_template="gateway/{{ .MAC }}/stats" -ack_topic_template="gateway/{{ .MAC }}/ack" - -# MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws) server="tcp://mosquitto:1883" - -# Connect with the given username (optional) username="" - -# Connect with the given password (optional) password="" - -# Quality of service level -# -# 0: at most once -# 1: at least once -# 2: exactly once -# -# Note: an increase of this value will decrease the performance. -# For more information: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels -qos=0 - -# Clean session -# -# Set the "clean session" flag in the connect message when this client -# connects to an MQTT broker. By setting this flag you are indicating -# that no messages saved by the broker for this client should be delivered. -clean_session=true - -# Client ID -# -# Set the client id to be used by this client when connecting to the MQTT -# broker. A client id must be no longer than 23 characters. When left blank, -# a random id will be generated. This requires clean_session=true. -client_id="" - -# CA certificate file (optional) -# -# Use this when setting up a secure connection (when server uses ssl://...) -# but the certificate used by the server is not trusted by any CA certificate -# on the server (e.g. when self generated). -ca_cert="" - -# mqtt TLS certificate file (optional) -tls_cert="" - -# mqtt TLS key file (optional) -tls_key="" diff --git a/configuration/loraserver/loraserver.toml b/configuration/loraserver/loraserver.toml index 833d953..5d951d8 100644 --- a/configuration/loraserver/loraserver.toml +++ b/configuration/loraserver/loraserver.toml @@ -1,389 +1,79 @@ -[general] -# Log level -# -# debug=5, info=4, warning=3, error=2, fatal=1, panic=0 -log_level=4 +# See https://www.loraserver.io/loraserver/install/config/ for a full +# configuration example and documentation. - -# PostgreSQL settings. -# -# Please note that PostgreSQL 9.5+ is required. [postgresql] -# PostgreSQL dsn (e.g.: postgres://user:password@hostname/database?sslmode=disable). -# -# Besides using an URL (e.g. 'postgres://user:password@hostname/database?sslmode=disable') -# it is also possible to use the following format: -# 'user=loraserver dbname=loraserver sslmode=disable'. -# -# The following connection parameters are supported: -# -# * dbname - The name of the database to connect to -# * user - The user to sign in as -# * password - The user's password -# * host - The host to connect to. Values that start with / are for unix domain sockets. (default is localhost) -# * port - The port to bind to. (default is 5432) -# * sslmode - Whether or not to use SSL (default is require, this is not the default for libpq) -# * fallback_application_name - An application_name to fall back to if one isn't provided. -# * connect_timeout - Maximum wait for connection, in seconds. Zero or not specified means wait indefinitely. -# * sslcert - Cert file location. The file must contain PEM encoded data. -# * sslkey - Key file location. The file must contain PEM encoded data. -# * sslrootcert - The location of the root certificate file. The file must contain PEM encoded data. -# -# Valid values for sslmode are: -# -# * disable - No SSL -# * require - Always SSL (skip verification) -# * verify-ca - Always SSL (verify that the certificate presented by the server was signed by a trusted CA) -# * verify-full - Always SSL (verify that the certification presented by the server was signed by a trusted CA and the server host name matches the one in the certificate) dsn="postgres://loraserver_ns:loraserver_ns@postgresql/loraserver_ns?sslmode=disable" -# Automatically apply database migrations. -# -# It is possible to apply the database-migrations by hand -# (see https://github.com/brocaar/loraserver/tree/master/migrations) -# or let LoRa App Server migrate to the latest state automatically, by using -# this setting. Make sure that you always make a backup when upgrading Lora -# App Server and / or applying migrations. -automigrate=true - - -# Redis settings -# -# Please note that Redis 2.6.0+ is required. [redis] -# Redis url (e.g. redis://user:password@hostname/0) -# -# For more information about the Redis URL format, see: -# https://www.iana.org/assignments/uri-schemes/prov/redis url="redis://redis:6379" - -# Network-server settings. [network_server] -# Network identifier (NetID, 3 bytes) encoded as HEX (e.g. 010203) -net_id="010203" +net_id="000000" -# Time to wait for uplink de-duplication. +[network_server.band] +# LoRaWAN band to use. # -# This is the time that LoRa Server will wait for other gateways to receive -# the same uplink frame. Valid units are 'ms' or 's'. -# Please note that this value has influence on the uplink / downlink -# roundtrip time. Setting this value too high means LoRa Server will be -# unable to respond to the device within its receive-window. -deduplication_delay="200ms" +# Valid values are: +# * AS_923 +# * AU_915_928 +# * CN_470_510 +# * CN_779_787 +# * EU_433 +# * EU_863_870 +# * IN_865_867 +# * KR_920_923 +# * RU_864_870 +# * US_902_928 +name="EU_863_870" -# Device session expiration. +# Enable only a given sub-set of channels # -# The TTL value defines the time after which a device-session expires -# after no activity. Valid units are 'ms', 's', 'm', 'h'. Note that these -# values can be combined, e.g. '24h30m15s'. -device_session_ttl="744h0m0s" +# Use this when ony a sub-set of the by default enabled channels are being +# used. For example when only using the first 8 channels of the US band. +# +# Example: +# enabled_uplink_channels=[0, 1, 2, 3, 4, 5, 6, 7] +enabled_uplink_channels=[] -# Get downlink data delay. +# Extra channel configuration. # -# This is the time that LoRa Server waits between forwarding data to the -# application-server and reading data from the queue. A higher value -# means that the application-server has more time to schedule a downlink -# queue item which can be processed within the same uplink / downlink -# transaction. -# Please note that this value has influence on the uplink / downlink -# roundtrip time. Setting this value too high means LoRa Server will be -# unable to respond to the device within its receive-window. -get_downlink_data_delay="100ms" +# Use this for LoRaWAN regions where it is possible to extend the by default +# available channels with additional channels (e.g. the EU band). +# The first 5 channels will be configured as part of the OTAA join-response +# (using the CFList field). +# The other channels (or channel / data-rate changes) will be (re)configured +# using the NewChannelReq mac-command. +# +# Example: +# [[network_server.network_settings.extra_channels]] +# frequency=867100000 +# min_dr=0 +# max_dr=5 +# [[network_server.network_settings.extra_channels]] +# frequency=867300000 +# min_dr=0 +# max_dr=5 - # LoRaWAN regional band configuration. - # - # Note that you might want to consult the LoRaWAN Regional Parameters - # specification for valid values that apply to your region. - # See: https://www.lora-alliance.org/lorawan-for-developers - [network_server.band] - # LoRaWAN band to use. - # - # Valid values are: - # * AS_923 - # * AU_915_928 - # * CN_470_510 - # * CN_779_787 - # * EU_433 - # * EU_863_870 - # * IN_865_867 - # * KR_920_923 - # * RU_864_870 - # * US_902_928 - name="EU_863_870" +# [[network_server.network_settings.extra_channels]] +# frequency=867500000 +# min_dr=0 +# max_dr=5 - # Enforce 400ms dwell time - # - # Some band configurations define the max payload size for both dwell-time - # limitation enabled as disabled (e.g. AS 923). In this case the - # dwell time setting must be set to enforce the max payload size - # given the dwell-time limitation. For band configuration where the dwell-time is - # always enforced, setting this flag is not required. - dwell_time_400ms=false +# [[network_server.network_settings.extra_channels]] +# frequency=867700000 +# min_dr=0 +# max_dr=5 - # Enforce repeater compatibility - # - # Most band configurations define the max payload size for both an optional - # repeater encapsulation layer as for setups where a repeater will never - # be used. The latter case increases the max payload size for some data-rates. - # In case a repeater might used, set this flag to true. - repeater_compatible=false +# [[network_server.network_settings.extra_channels]] +# frequency=867900000 +# min_dr=0 +# max_dr=5 +[network_server.gateway.backend.mqtt] +server="tcp://mosquitto:1883" +username="" +password="" - # LoRaWAN network related settings. - [network_server.network_settings] - # Installation margin (dB) used by the ADR engine. - # - # A higher number means that the network-server will keep more margin, - # resulting in a lower data-rate but decreasing the chance that the - # device gets disconnected because it is unable to reach one of the - # surrounded gateways. - installation_margin=10 - - # Class A RX1 delay - # - # 0=1sec, 1=1sec, ... 15=15sec. A higher value means LoRa Server has more - # time to respond to the device as the delay between the uplink and the - # first receive-window will be increased. - rx1_delay=1 - - # RX1 data-rate offset - # - # Please consult the LoRaWAN Regional Parameters specification for valid - # options of the configured network_server.band.name. - rx1_dr_offset=0 - - # RX2 data-rate - # - # When set to -1, the default RX2 data-rate will be used for the configured - # LoRaWAN band. - # - # Please consult the LoRaWAN Regional Parameters specification for valid - # options of the configured network_server.band.name. - rx2_dr=-1 - - # RX2 frequency - # - # When set to -1, the default RX2 frequency will be used. - # - # Please consult the LoRaWAN Regional Parameters specification for valid - # options of the configured network_server.band.name. - rx2_frequency=-1 - - # Enable only a given sub-set of channels - # - # Use this when ony a sub-set of the by default enabled channels are being - # used. For example when only using the first 8 channels of the US band. - # - # Example: - # enabled_uplink_channels=[0, 1, 2, 3, 4, 5, 6, 7] - enabled_uplink_channels=[] - - - # Extra channel configuration. - # - # Use this for LoRaWAN regions where it is possible to extend the by default - # available channels with additional channels (e.g. the EU band). - # The first 5 channels will be configured as part of the OTAA join-response - # (using the CFList field). - # The other channels (or channel / data-rate changes) will be (re)configured - # using the NewChannelReq mac-command. - # - # Example: - # [[network_server.network_settings.extra_channels]] - # frequency=867100000 - # min_dr=0 - # max_dr=5 - - # [[network_server.network_settings.extra_channels]] - # frequency=867300000 - # min_dr=0 - # max_dr=5 - - # [[network_server.network_settings.extra_channels]] - # frequency=867500000 - # min_dr=0 - # max_dr=5 - - # [[network_server.network_settings.extra_channels]] - # frequency=867700000 - # min_dr=0 - # max_dr=5 - - # [[network_server.network_settings.extra_channels]] - # frequency=867900000 - # min_dr=0 - # max_dr=5 - - - # Class B settings - [network_server.network_settings.class_b] - # Ping-slot data-rate. - ping_slot_dr=0 - - # Ping-slot frequency (Hz) - # - # Set this to 0 to use the default frequency plan for the configured region - # (which could be frequency hopping). - ping_slot_frequency=0 - - - # Network-server API - # - # This is the network-server API that is used by LoRa App Server or other - # custom components interacting with LoRa Server. - [network_server.api] - # ip:port to bind the api server - bind="0.0.0.0:8000" - - # ca certificate used by the api server (optional) - ca_cert="" - - # tls certificate used by the api server (optional) - tls_cert="" - - # tls key used by the api server (optional) - tls_key="" - - # Gateway API - # - # This API is used by the LoRa Channel Manager component to fetch - # channel configuration. - [network_server.gateway.api] - # ip:port to bind the api server - bind="0.0.0.0:8002" - - # CA certificate used by the api server (optional) - ca_cert="" - - # tls certificate used by the api server (optional) - tls_cert="" - - # tls key used by the api server (optional) - tls_key="" - - # JWT secret used by the gateway api server for gateway authentication / authorization - jwt_secret="verysecret" - - # Gateway statistics settings. - [network_server.gateway.stats] - # Create non-existing gateways on receiving of stats - # - # When set to true, LoRa Server will create the gateway when it receives - # statistics for a gateway that does not yet exist. - create_gateway_on_stats=true - - # Aggregation timezone - # - # This timezone is used for correctly aggregating the statistics (for example - # 'Europe/Amsterdam'). - # To get the list of supported timezones by your PostgreSQL database, - # execute the following SQL query: - # select * from pg_timezone_names; - # When left blank, the default timezone of your database will be used. - timezone="" - - # Aggregation intervals to use for aggregating the gateway stats - # - # Valid options: second, minute, hour, day, week, month, quarter, year. - # When left empty, no statistics will be stored in the database. - # Note, LoRa App Server expects at least "minute", "day", "hour"! - aggregation_intervals=["minute", "hour", "day"] - - - # MQTT gateway backend settings. - # - # This is the backend communicating with the LoRa gateways over a MQTT broker. - [network_server.gateway.backend.mqtt] - # MQTT topic templates for the different MQTT topics. - # - # The meaning of these topics are documented at: - # https://docs.loraserver.io/lora-gateway-bridge/use/data/ - # - # The default values match the default expected configuration of the - # LoRa Gateway Bridge MQTT backend. Therefore only change these values when - # absolutely needed. - # Use "{{ .MAC }}" as an substitution for the LoRa gateway MAC. - uplink_topic_template="gateway/+/rx" - downlink_topic_template="gateway/{{ .MAC }}/tx" - stats_topic_template="gateway/+/stats" - ack_topic_template="gateway/+/ack" - - # MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws) - server="tcp://mosquitto:1883" - - # Connect with the given username (optional) - username="" - - # Connect with the given password (optional) - password="" - - # Quality of service level - # - # 0: at most once - # 1: at least once - # 2: exactly once - # - # Note: an increase of this value will decrease the performance. - # For more information: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels - qos=0 - - # Clean session - # - # Set the "clean session" flag in the connect message when this client - # connects to an MQTT broker. By setting this flag you are indicating - # that no messages saved by the broker for this client should be delivered. - clean_session=true - - # Client ID - # - # Set the client id to be used by this client when connecting to the MQTT - # broker. A client id must be no longer than 23 characters. When left blank, - # a random id will be generated. This requires clean_session=true. - client_id="" - - # CA certificate file (optional) - # - # Use this when setting up a secure connection (when server uses ssl://...) - # but the certificate used by the server is not trusted by any CA certificate - # on the server (e.g. when self generated). - ca_cert="" - - # TLS certificate file (optional) - tls_cert="" - - # TLS key file (optional) - tls_key="" - - -# Default join-server settings. [join_server.default] -# hostname:port of the default join-server -# -# This API is provided by LoRa App Server. server="http://appserver:8003" - -# ca certificate used by the default join-server client (optional) -ca_cert="" - -# tls certificate used by the default join-server client (optional) -tls_cert="" - -# tls key used by the default join-server client (optional) -tls_key="" - - -# Network-controller configuration. -[network_controller] -# hostname:port of the network-controller api server (optional) -server="" - -# ca certificate used by the network-controller client (optional) -ca_cert="" - -# tls certificate used by the network-controller client (optional) -tls_cert="" - -# tls key used by the network-controller client (optional) -tls_key=""