28/07/2020

8 Steps to Instal Mosquitto, InfluxDB and Grafana via Docker

By snorlaxprime

Now that you have Home Assistant installed, you will need to install MQTT broker to allow interaction between your IoT devices with Home Assistant. In this post, we are going to install the Mosquitto MQTT broker.

step 1. To start you can execute the following command

docker pull eclipse-mosquitto

This will download the latest image.

Step 2. Sharing info between host and Docker container

Before starting the container we need to make sure that the information are being shared between the host system and the Docker container. In order to do this you will need to create three directory: config, data and log under the mosquitto default directory.

Let us assume that your mosquitto default directory will be under the folder called mosquitto. So you can create them using the following command:

mkdir mosquitto
mkdir mosquitto\config
mkdir mosquitto\data
mkdir mosquitto\log

Step 3. Create the mosquitto config

Now that you have created the above folder structure it is time to create the configuration in the config folder using the following command

nano mosquitto/config/mosquitto.conf

Copy and paste the following context:

pid_file /var/run/mosquitto.pid

persistence true
persistence_location /mosquitto/data/

log_dest file /mosquitto/log/mosquitto.log
log_dest stdout

password_file /mosquitto/config/mosquitto.passwd
allow_anonymous false

You can saved the file using ^O and close nano using ^X.

Step 4. Change permission of the mosquitto configuration folder

To ensure that the Docker container get the permission to access these folder, you can change the permission using the chown command. Use the following command to give Mosquitto access to the mosquitto folder via port 1883.

chown -R 1883:1883 ~/mosquitto

Step 5. Create the Mosquitto container

Now you can create the Mosquitto container using the following command:

docker run -it -p 1883:1883 --name mosquitto -v ~/mosquitoconfig -v ~/mosquitto/data:/mosquitto/data -v ~/mosquitto/log:/mosquitto/log eclipse-mosquitto

The Mosquitto container should be running now, you can check this using the following command

sudo docker container ls -a

You can also see the container ID for Mosquitto, my container id is ca115f8382cf , yours will be differed. You will need this for the next step to setup the username and password for Mosquitto.

Step 6. Setup username and password for Mosquitto

It is important to setup the username and password for the Mosquitto to ensure that you have security in place right from the beginning.

Access the shell of the container using the following command:

docker exec -it ca115f8382cf sh

type the following command to set your username and password. In this case I am using effendy as my username.

mosquitto_passwd -c /mosquitto/config/mosquitto.passwd effendy

You will be prompted for the password twice, make sure you noted this as you will need the username and password for the IoT devices to be able to post messages to Mosquitto.

Step 7. Install InfluxDB via Docker

Now we can install InfluxDB using the following command

docker pull influxdb

We also need to share host and container for InfluxDB. So we create a folder called influxdb using the following command

mkdir influxdb

To start Influxdb you can call the following:

docker run --name influxdb -p 8086:8086 -v influxdb:/var/lib/influxdb influxdb

Step 8. Install Grafana via Docker

Pull the grafana image using the following command

docker pull grafana/grafana

To start Grafana you can execute the following command:

docker run -d --name=grafana -p 3000:3000 grafana/grafana

Now you should see the Home Assistant, Mosquitto, Influxdb and Grafana all running:

Now that all the are setup we are ready to push MQTT message to Home Assistant and being able to save it into InfluxDB and subsequently display it using Grafana.