mirror of
https://github.com/absmach/supermq.git
synced 2026-06-23 06:40:19 +00:00
@@ -2,11 +2,11 @@
|
||||
|
||||
Configure environment variables and run SuperMQ Docker Composition.
|
||||
|
||||
\*Note\*\*: `docker-compose` uses `.env` file to set all environment variables. Ensure that you run the command from the same location as .env file.
|
||||
> \*Note\*\*: `docker-compose` uses `.env` file to set all environment variables. Ensure that you run the command from the same location as .env file.
|
||||
|
||||
## Installation
|
||||
|
||||
Follow the [official documentation](https://docs.docker.com/compose/install/).
|
||||
Follow the [official Docker Compose installation guide](https://docs.docker.com/compose/install/) to install Docker Compose.
|
||||
|
||||
## Usage
|
||||
|
||||
@@ -16,6 +16,8 @@ Run the following commands from the project root directory.
|
||||
docker compose -f docker/docker-compose.yaml up
|
||||
```
|
||||
|
||||
To start additional addon services:
|
||||
|
||||
```bash
|
||||
docker compose -f docker/addons/<path>/docker-compose.yaml up
|
||||
```
|
||||
@@ -26,33 +28,37 @@ To pull docker images from a specific release you need to change the value of `S
|
||||
|
||||
SuperMQ supports configurable MQTT broker and Message broker, which also acts as an events store. SuperMQ uses two types of brokers:
|
||||
|
||||
1. MQTT_BROKER: Handles MQTT communication between MQTT adapters and message broker. This can either be 'RabbitMQ' or 'NATS'.
|
||||
2. MESSAGE_BROKER: Manages message exchange between SuperMQ core, optional, and external services. This can either be 'NATS' or 'RabbitMQ'. This is used to store messages for distributed processing.
|
||||
1. **MQTT_BROKER**: Handles MQTT communication between MQTT adapters and message broker. This can either be `RabbitMQ` or `NATS`.
|
||||
2. **MESSAGE_BROKER**: Manages message exchange between SuperMQ core, optional, and external services. This can either be `NATS` or `RabbitMQ`. This is used to store messages for distributed processing.
|
||||
|
||||
Events store: This is used by SuperMQ services to store events for distributed processing. SuperMQ uses a single service to be the message broker and events store. This can either be 'NATS' or 'RabbitMQ'. Redis can also be used as an events store, but it requires a message broker to be deployed along with it for message exchange.
|
||||
Events store: This is used by SuperMQ services to store events for distributed processing. SuperMQ uses a single service to be the message broker and events store. This can either be `NATS` or `RabbitMQ`. Redis can also be used as an events store, but it requires a message broker to be deployed along with it for message exchange.
|
||||
|
||||
This is the same as MESSAGE_BROKER. This can either be 'NATS' or 'RabbitMQ' or 'Redis'. If Redis is used as an events store, then RabbitMQ or NATS is used as a message broker.
|
||||
## Supported Combinations
|
||||
|
||||
This is the same as MESSAGE_BROKER. This can either be `NATS` or `RabbitMQ` or `Redis`. If Redis is used as an events store, then RabbitMQ or NATS is used as a message broker.
|
||||
|
||||
The current deployment strategy for SuperMQ in `docker/docker-compose.yaml` is to use RabbitMQ as a MQTT_BROKER and NATS as a MESSAGE_BROKER and EVENTS_STORE.
|
||||
|
||||
Therefore, the following combinations are possible:
|
||||
Depending on the desired setup, the following broker configurations are valid:
|
||||
|
||||
- MQTT_BROKER: RabbitMQ, MESSAGE_BROKER: NATS, EVENTS_STORE: NATS
|
||||
- MQTT_BROKER: RabbitMQ, MESSAGE_BROKER: NATS, EVENTS_STORE: Redis
|
||||
- MQTT_BROKER: RabbitMQ, MESSAGE_BROKER: RabbitMQ, EVENTS_STORE: RabbitMQ
|
||||
- MQTT_BROKER: RabbitMQ, MESSAGE_BROKER: RabbitMQ, EVENTS_STORE: Redis
|
||||
- MQTT_BROKER: NATS, MESSAGE_BROKER: RabbitMQ, EVENTS_STORE: RabbitMQ
|
||||
- MQTT_BROKER: NATS, MESSAGE_BROKER: RabbitMQ, EVENTS_STORE: Redis
|
||||
- MQTT_BROKER: NATS, MESSAGE_BROKER: NATS, EVENTS_STORE: NATS
|
||||
- MQTT_BROKER: NATS, MESSAGE_BROKER: NATS, EVENTS_STORE: Redis
|
||||
- `MQTT_BROKER: RabbitMQ`, `MESSAGE_BROKER: NATS`, `EVENTS_STORE: NATS`
|
||||
- `MQTT_BROKER: RabbitMQ`, `MESSAGE_BROKER: NATS`, `EVENTS_STORE: Redis`
|
||||
- `MQTT_BROKER: RabbitMQ`, `MESSAGE_BROKER: RabbitMQ`, `EVENTS_STORE: RabbitMQ`
|
||||
- `MQTT_BROKER: RabbitMQ`, `MESSAGE_BROKER: RabbitMQ`, `EVENTS_STORE: Redis`
|
||||
- `MQTT_BROKER: NATS`, `MESSAGE_BROKER: RabbitMQ`, `EVENTS_STORE: RabbitMQ`
|
||||
- `MQTT_BROKER: NATS`, `MESSAGE_BROKER: RabbitMQ`, `EVENTS_STORE: Redis`
|
||||
- `MQTT_BROKER: NATS`, `MESSAGE_BROKER: NATS`, `EVENTS_STORE: NATS`
|
||||
- `MQTT_BROKER: NATS`, `MESSAGE_BROKER: NATS`, `EVENTS_STORE: Redis`
|
||||
|
||||
For Message brokers other than NATS, you would need to build the docker images with RabbitMQ as the build tag and change the `docker/.env`. For example, to use RabbitMQ as a message broker:
|
||||
> For non-default brokers (e.g. RabbitMQ as message broker), adjust the environment variables appropriately and rebuild Docker images. Example:
|
||||
|
||||
```bash
|
||||
SMQ_MESSAGE_BROKER_TYPE=msg_rabbitmq make dockers
|
||||
```
|
||||
|
||||
```env
|
||||
Then in `.env`:
|
||||
|
||||
```text
|
||||
SMQ_MESSAGE_BROKER_TYPE=msg_rabbitmq
|
||||
SMQ_MESSAGE_BROKER_URL=${SMQ_RABBITMQ_URL}
|
||||
```
|
||||
@@ -84,7 +90,7 @@ SMQ_MQTT_ADAPTER_WS_TARGET_PORT=8080
|
||||
SMQ_MQTT_ADAPTER_WS_TARGET_PATH=${SMQ_NATS_WS_TARGET_PATH}
|
||||
```
|
||||
|
||||
### RabbitMQ configuration
|
||||
### RabbitMQ configuration (as MQTT broker or MESSAGE_BROKER)
|
||||
|
||||
```yaml
|
||||
services:
|
||||
@@ -104,7 +110,7 @@ services:
|
||||
- supermq-base-net
|
||||
```
|
||||
|
||||
### Redis configuration
|
||||
### Redis configuration (as events store)
|
||||
|
||||
```yaml
|
||||
services:
|
||||
@@ -123,12 +129,47 @@ services:
|
||||
Nginx is the entry point for all traffic to SuperMQ.
|
||||
By using environment variables file at `docker/.env` you can modify the below given Nginx directive.
|
||||
|
||||
`SMQ_NGINX_SERVER_NAME` environmental variable is used to configure nginx directive `server_name`. If environmental variable `SMQ_NGINX_SERVER_NAME` is empty then default value `localhost` will set to `server_name`.
|
||||
| Environment Variable | Description |
|
||||
|----------------------|-------------|
|
||||
| `SMQ_NGINX_SERVER_NAME` | `SMQ_NGINX_SERVER_NAME` environmental variable is used to configure nginx directive `server_name`. If environmental variable `SMQ_NGINX_SERVER_NAME` is empty then default value `localhost` will set to `server_name`. |
|
||||
| `SMQ_NGINX_SERVER_CERT` | `SMQ_NGINX_SERVER_CERT` environmental variable is used to configure nginx directive `ssl_certificate`. If environmental variable `SMQ_NGINX_SERVER_CERT` is empty then by default server certificate in the path `docker/ssl/certs/supermq-server.crt` will be assigned. |
|
||||
| `SMQ_NGINX_SERVER_KEY` | `SMQ_NGINX_SERVER_KEY` environmental variable is used to configure nginx directive `ssl_certificate_key`. If environmental variable `SMQ_NGINX_SERVER_KEY` is empty then by default server certificate key in the path `docker/ssl/certs/supermq-server.key` will be assigned. |
|
||||
| `SMQ_NGINX_SERVER_CLIENT_CA` | `SMQ_NGINX_SERVER_CLIENT_CA` environmental variable is used to configure nginx directive `ssl_client_certificate`. If environmental variable `SMQ_NGINX_SERVER_CLIENT_CA` is empty then by default certificate in the path `docker/ssl/certs/ca.crt` will be assigned. |
|
||||
| `SMQ_NGINX_SERVER_DHPARAM` | `SMQ_NGINX_SERVER_DHPARAM` environmental variable is used to configure nginx directive `ssl_dhparam`. If environmental variable `SMQ_NGINX_SERVER_DHPARAM` is empty then by default file in the path `docker/ssl/dhparam.pem` will be assigned. |
|
||||
|
||||
`SMQ_NGINX_SERVER_CERT` environmental variable is used to configure nginx directive `ssl_certificate`. If environmental variable `SMQ_NGINX_SERVER_CERT` is empty then by default server certificate in the path `docker/ssl/certs/supermq-server.crt` will be assigned.
|
||||
Adjust these values in `.env` to configure TLS / SSL behavior for your deployment.
|
||||
|
||||
`SMQ_NGINX_SERVER_KEY` environmental variable is used to configure nginx directive `ssl_certificate_key`. If environmental variable `SMQ_NGINX_SERVER_KEY` is empty then by default server certificate key in the path `docker/ssl/certs/supermq-server.key` will be assigned.
|
||||
## Makefile Integration
|
||||
|
||||
`SMQ_NGINX_SERVER_CLIENT_CA` environmental variable is used to configure nginx directive `ssl_client_certificate`. If environmental variable `SMQ_NGINX_SERVER_CLIENT_CA` is empty then by default certificate in the path `docker/ssl/certs/ca.crt` will be assigned.
|
||||
The included `Makefile` defines build and Docker‑build targets for all SuperMQ services. Key points:
|
||||
|
||||
`SMQ_NGINX_SERVER_DHPARAM` environmental variable is used to configure nginx directive `ssl_dhparam`. If environmental variable `SMQ_NGINX_SERVER_DHPARAM` is empty then by default file in the path `docker/ssl/dhparam.pem` will be assigned.
|
||||
- `SERVICES`: list of core services (auth, clients, channels, http, coap, mqtt, ws, etc.)
|
||||
|
||||
- `DOCKERS`, `DOCKERS_DEV`: build targets for production and development Docker images
|
||||
|
||||
- Build arguments embed version, commit hash, and build timestamp into the binary
|
||||
|
||||
Build all services:
|
||||
|
||||
```bash
|
||||
make all # builds all services
|
||||
make dockers # builds all Docker images
|
||||
```
|
||||
|
||||
Start services with Docker compose:
|
||||
|
||||
```bash
|
||||
docker compose -f docker/docker-compose.yaml up
|
||||
```
|
||||
|
||||
To clean up:
|
||||
|
||||
```bash
|
||||
make cleandocker
|
||||
```
|
||||
|
||||
To run tests(unit tests + API tests)
|
||||
|
||||
```bash
|
||||
make test
|
||||
```
|
||||
|
||||
@@ -33,6 +33,8 @@ AM_CERTS_GRPC_CLIENT_TLS=
|
||||
AM_CERTS_GRPC_CA_CERTS=
|
||||
AM_CERTS_INSTANCE_ID=
|
||||
AM_CERTS_RELEASE_TAG=latest
|
||||
# WARNING: This is a development/testing secret only.
|
||||
# NEVER use this weak secret in production! Generate a strong random secret for production deployments.
|
||||
AM_CERTS_SECRET=12345678
|
||||
|
||||
## OpenBao PKI Config
|
||||
@@ -45,7 +47,7 @@ AM_CERTS_OPENBAO_PKI_PATH=pki
|
||||
AM_CERTS_OPENBAO_ROLE=absmach
|
||||
AM_CERTS_OPENBAO_PKI_CA_CN=Abstract Machines Certificate Authority
|
||||
AM_CERTS_OPENBAO_PKI_CA_OU=Abstract Machines
|
||||
AM_CERTS_OPENBAO_PKI_CA_O=AbstractMacines
|
||||
AM_CERTS_OPENBAO_PKI_CA_O=AbstractMachines
|
||||
AM_CERTS_OPENBAO_PKI_CA_C=FRANCE
|
||||
AM_CERTS_OPENBAO_PKI_CA_L=PARIS
|
||||
AM_CERTS_OPENBAO_PKI_CA_ST=PARIS
|
||||
|
||||
Reference in New Issue
Block a user