# How to setup Mosquitto MQTT Broker using docker These instructions will work on any Debian based OS including Ubuntu, RaspberryPi, WSL2 etc... (For non-Debian distros, commands for installation need to be tweaked) _By default the config allows only to use local connections for security reasons but since authentication is enabled below, that's not the case._ ## 1. Install docker Latest instructions are [here](https://docs.docker.com/engine/install/ubuntu/) on docker website. You can also use this script - [install-docker.sh](/install-docker.sh) ## 2. Create base folder for mqtt configuration ```bash mkdir mqtt5 cd mqtt5 # for storing mosquitto.conf and pwfile (for password) mkdir config ``` ## 3. Create Mosquitto config file - mosquitto.conf ```bash nano config/mosquitto.conf ``` Basic configuration file content below including websocket config ``` allow_anonymous false listener 1883 listener 9001 protocol websockets persistence true password_file /mosquitto/config/pwfile persistence_file mosquitto.db persistence_location /mosquitto/data/ ``` ## 4. Create Mosquitto password file - pwfile ```bash touch config/pwfile ``` ## 5. Create docker-compose file called 'docker-compose.yml' ```yml version: "3.7" services: # mqtt5 eclipse-mosquitto mqtt5: image: eclipse-mosquitto container_name: mqtt5 ports: - "1883:1883" #default mqtt port - "9001:9001" #default mqtt port for websockets volumes: - ./config:/mosquitto/config:rw - ./data:/mosquitto/data:rw - ./log:/mosquitto/log:rw restart: unless-stopped # volumes for mapping data,config and log volumes: config: data: log: networks: default: name: mqtt5-network ``` ## 6. Create and run docker container for MQTT ```bash # In case you don't have docker-compose you can install it sudo apt install docker-compose # Run the docker container for mqtt sudo docker-compose -p mqtt5 up -d ``` ### Check if the container is up and working (note down container-id) ```bash sudo docker ps ``` ## 7. Create a user/password in the pwfile ```bash # login interactively into the mqtt container sudo docker exec -it sh # Create new password file and add user and it will prompt for password mosquitto_passwd -c /mosquitto/config/pwfile user1 # Add additional users (remove the -c option) and it will prompt for password mosquitto_passwd /mosquitto/config/pwfile user2 # delete user command format mosquitto_passwd -D /mosquitto/config/pwfile # type 'exit' to exit out of docker container prompt ``` Command line help for `mosquitto_passwd` command above ``` mosquitto_passwd is a tool for managing password files for mosquitto. Usage: mosquitto_passwd [-H sha512 | -H sha512-pbkdf2] [-c | -D] passwordfile username mosquitto_passwd [-H sha512 | -H sha512-pbkdf2] [-c] -b passwordfile username password mosquitto_passwd -U passwordfile -b : run in batch mode to allow passing passwords on the command line. -c : create a new password file. This will overwrite existing files. -D : delete the username rather than adding/updating its password. -H : specify the hashing algorithm. Defaults to sha512-pbkdf2, which is recommended. Mosquitto 1.6 and earlier defaulted to sha512. -U : update a plain text password file to use hashed passwords ``` Then restart the container ```bash sudo docker restart ```