Install Docker

Step 1.1 - Update system

sudo apt update

Step 1.2 - Install Docker & Compose

sudo apt install -y docker.io docker-compose

Step 1.3 - Allow non-root Docker usage

sudo usermod -aG docker $USER
newgrp docker

Step 1.4 - Verify Docker

docker --version
docker-compose --version

Create EMQX project folder

Step 2.1 - Create folder

mkdir emqx-demo
cd emqx-demo

Step 2.2 - Create data folders

mkdir data log

Create docker-compose.yml

Step 3.1 - Open editor

nano docker-compose.yml

Step 3.2 - Paste this exactly

version: '3.8'

services:
  emqx:
    image: emqx/emqx:latest
    container_name: emqx
    ports:
      - "1883:1883"     # MQTT
      - "18083:18083"   # Dashboard
    environment:
      EMQX_ALLOW_ANONYMOUS: "false"
      EMQX_DASHBOARD__DEFAULT_USERNAME: admin
      EMQX_DASHBOARD__DEFAULT_PASSWORD: admin
    volumes:
      - ./data:/opt/emqx/data
      - ./log:/opt/emqx/log
    restart: unless-stopped

Save and exit (CTRL+O, Enter, CTRL+X).

Start EMQX

Step 4.1 - Pull & run

docker-compose pull
docker-compose up -d

Step 4.2 - Confirm it’s running

docker ps

Access EMQX Dashboard

Step 5.1 - Open browser

Go to

http://localhost:18083

Step 5.2 - Login

Username: admin
Password: admin

Create Built-in Database auth

Step 6.1 - Click Create and chose:

Mechanism: Password-Based
Backend: Built-in Database

Add User

Step 7.1 - Click Users then Add

Step 7.2 - Creat user name and password of the users

Username: testuser
Password: testpass

Enable Authorization (ACL / permissions)

Authentication = who are you Authorization = what are you allowed to do

Step 8.1 - Open Authorization page

Step 8.2 - Create authorization source

Click Create

Backend: Built-in Database

Step 8.3 - Add permission for Username

Install Mosquitto clients

Step 9.1 - Install Mosquitto

sudo apt update
sudo apt install -y mosquitto-clients
sudo snap install mosquitto

Testing

Step 10.1 - Terminal 1 Subscribe

mosquitto_sub -h <broker_ip> -u testuser -P testpass -I amebaClient -t outTopic

or

mosquitto_sub -h localhost -u testuser -P testpass -I amebaClient -t outTopic

Step 10.1 - Terminal 2 Publish allowed

mosquitto_pub -h localhost -u testuser -P testpass -I amebaClient -t outTopic -m "hello world"

Testing with MQTT explore

Install program from MQTT Explore

Setup BASIC setting:

Setup ADVANCED setting:

Connect, then chose the topic and PUBLISH

Clean restart

Stop & remove old container

docker-compose down
sudo snap stop mosquitto

If you ran EMQX before with volumes and want a true reset:

rm -rf data log
mkdir data log

Find your PC’s local IP

ip addr show