forked from nanomq/nanomq
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDocker-introduction
157 lines (113 loc) · 6.23 KB
/
Docker-introduction
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# Quick Reference
Official Website:
https://nanomq.io/
Where to get help and fire issues:
https://github.com/emqx/nanomq/issues or https://slack-invite.emqx.io/ or https://discord.gg/xYGf3fQnES
Supported architectures
POSIX compatible Architecture
# What is NanoMQ
Nano MQTT Broker (NanoMQ) is a lightweight and blazing-fast MQTT Broker for the IoT Edge platform. NanoMQ unifies data in motions and data in use between Edge and Cloud in an efficient manner.
Ihe cost effectiveness, performant, high compatibility and interoperability makes NanoMQ your best option of edge messaging broker and databus.
## Features
- Fully MQTT 5.0 Compliant
Fully support MQTT 5.0/3.1.1, Compatible with all standard open-source MQTT SDKs.
- MQTT Bridges
Bridging message from edge to multiple clouds. In-line connections to Global cloud services.
- Message Persistence
Preserve your business-critical data with built-in data persistence, and resume uploading automatically when the connection is restored.
- Rule Engine
Unlock the flexibility of data with a SQL-based rule engine. Integrates with eKuiper to bring stream processing to the edge.
- Integrability
Reduce the cost of integrating edge computing applications with event-driven WebHooks. Easy to maintain with EdgeOps friendly HTTP APIs.
- All-round
Support multiple protocols such as ZeroMQ/nanomsg/NNG/WebSocket. Enabling flexible and diverse routing topology on edge with. Secure your IoT connections with TLS/SSL.
# How to use this image
```bash
docker pull emqx/nanomq:latest
```
Run specific version of NanoMQ:
```bash
docker run -d -p 1883:1883 -p 8883:8883 --name nanomq emqx/nanomq:latest
```
There are 3 kinds of NanoMQ docker image:
Default: Take alpine as base image, minimum size but only has basic MQTT broker function.
```bash
docker pull emqx/nanomq:0.14.1
```
Slim: Take Ubuntu as base image, moderate size with necessary features like TLS/SSL, SQLite and Rule Engine.
```bash
docker pull emqx/nanomq:0.14.1-slim
```
Full: A comprehensive docker image with all features on board, such as QUIC bridging, ZeroMQ gateway and Bench toolkit.
```bash
docker pull emqx/nanomq:0.14.1-full
```
### NanoMQ configuration file
Docker version:
Specify config file path from host:
```bash
docker run -d -p 1883:1883 -v {YOU LOCAL PATH}: /etc \
--name nanomq emqx/nanomq:0.14.1
```
Recommend to use Environment variables to config NanoMQ
#### NanoMQ Environment Variables
| Variable | Type | Value |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
|NANOMQ_BROKER_URL |String | 'nmq-tcp://host:port', 'tls+nmq-tcp://host:port'|
|NANOMQ_DAEMON |Boolean | Set nanomq as daemon (default: false).|
|NANOMQ_NUM_TASKQ_THREAD | Integer | Number of taskq threads used, `num` greater than 0 and less than 256.|
|NANOMQ_MAX_TASKQ_THREAD | Integer | Maximum number of taskq threads used, `num` greater than 0 and less than 256.|
|NANOMQ_PARALLEL | Long | Number of parallel.|
|NANOMQ_PROPERTY_SIZE | Integer | Max size for a MQTT user property.|
|NANOMQ_MSQ_LEN | Integer | Queue length for resending messages.|
|NANOMQ_QOS_DURATION | Integer | The interval of the qos timer.|
|NANOMQ_ALLOW_ANONYMOUS | Boolean | Allow anonymous login (default: true).|
|NANOMQ_WEBSOCKET_ENABLE | Boolean | Enable websocket listener (default: true).|
|NANOMQ_WEBSOCKET_URL | String | 'nmq-ws://host:port/path', 'nmq-wss://host:port/path' |
|NANOMQ_HTTP_SERVER_ENABLE | Boolean | Enable http server (default: false).|
|NANOMQ_HTTP_SERVER_PORT | Integer | Port for http server (default: 8081).|
|NANOMQ_HTTP_SERVER_USERNAME | String | Http server user name for auth.|
|NANOMQ_HTTP_SERVER_PASSWORD | String | Http server password for auth.|
|NANOMQ_TLS_ENABLE|Boolean|Enable TLS connection.|
|NANOMQ_TLS_URL| String | 'tls+nmq-tcp://host:port'.|
|NANOMQ_TLS_CA_CERT_PATH| String | Path to the file containing PEM-encoded CA certificates.|
|NANOMQ_TLS_CERT_PATH| String | Path to a file containing the user certificate.|
|NANOMQ_TLS_KEY_PATH| String | Path to the file containing the user's private PEM-encoded key.|
|NANOMQ_TLS_KEY_PASSWORD| String | String containing the user's password. Only used if the private keyfile is password-protected.|
|NANOMQ_TLS_VERIFY_PEER| Boolean | Verify peer certificate (default: false).|
|NANOMQ_TLS_FAIL_IF_NO_PEER_CERT| Boolean | Server will fail if the client does not have a certificate to send (default: false).|
|NANOMQ_CONF_PATH | String | NanoMQ main config file path (defalt: /etc/nanomq.conf).|
- Specify a broker url.
On host system:
```bash
export NANOMQ_BROKER_URL="nmq-tcp://0.0.0.0:1883"
export NANOMQ_TLS_ENABLE=true
export NANOMQ_TLS_URL="tls+nmq-tcp://0.0.0.0:8883"
```
Creating docker container:
```bash
docker run -d -p 1883:1883 -p 8883:8883 \
-e NANOMQ_BROKER_URL="nmq-tcp://0.0.0.0:1883" \
-e NANOMQ_TLS_ENABLE=true \
-e NANOMQ_TLS_URL="tls+nmq-tcp://0.0.0.0:8883" \
--name nanomq emqx/nanomq:0.14.1-full
```
- Specify a nanomq config file path.
On host system:
```bash
export NANOMQ_CONF_PATH="/usr/local/etc/nanomq.conf"
```
Creating docker container:
```bash
docker run -d -p 1883:1883 -e NANOMQ_CONF_PATH="/usr/local/etc/nanomq.conf" \
[-v {LOCAL PATH}:{CONTAINER PATH}] \
--name nanomq emqx/nanomq:0.14.0-slim
```
### Performance Tunning
In order to achieve the best performance on your platform, recommend to change following settings:
Name | Type | Description
---------------------------------- | ------------- | ----------------------------------------------------------------------------------------------
system.num_taskq_thread | Integer | Number of taskq threads used. (equal to your CPU cores)
system.max_taskq_thread | Integer | Maximum number of taskq threads used. (equal to your CPU cores)
system.parallel | Long | Number of parallel. (equal to your CPU cores * 2)
mqtt.session.msq_len | Integer | Inflight window/Queue length for resending messages. (Recommend to set as max number: 65535, depending on your memory limitation)