{"id":11,"date":"2026-08-29T17:59:36","date_gmt":"2026-08-29T17:59:36","guid":{"rendered":"http:\/\/192.168.15.145\/?p=11"},"modified":"2026-08-29T18:05:53","modified_gmt":"2026-08-29T18:05:53","slug":"nothing-breaks-new-york","status":"publish","type":"post","link":"https:\/\/cloudsolvd.com\/?p=11","title":{"rendered":"Easy IoT data infrastructure setup via docker"},"content":{"rendered":"\n<figure class=\"wp-block-image is-resized\"><img decoding=\"async\" src=\"https:\/\/cloudsolvd.com\/wp-content\/uploads\/2024\/11\/image-15.png\" alt=\"\" style=\"aspect-ratio:1.9583333333333333;width:940px;height:auto\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Miceuz\/docker-compose-mosquitto-influxdb-telegraf-grafana#easy-iot-data-infrastructure-setup-via-docker\"><\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Based on&nbsp;<a href=\"https:\/\/github.com\/iothon\/docker-compose-mqtt-influxdb-grafana\">https:\/\/github.com\/iothon\/docker-compose-mqtt-influxdb-grafana<\/a>&nbsp;and&nbsp;<a href=\"https:\/\/lucassardois.medium.com\/handling-iot-data-with-mqtt-telegraf-influxdb-and-grafana-5a431480217\">https:\/\/lucassardois.medium.com\/handling-iot-data-with-mqtt-telegraf-influxdb-and-grafana-5a431480217<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This docker compose installs and sets up:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/mosquitto.org\/\">Eclipse Mosquitto<\/a>\u00a0\u2013 An open source MQTT broker to collect your data via MQTT protocol<\/li>\n\n\n\n<li><a href=\"https:\/\/www.influxdata.com\/\">InfluxDB<\/a>\u00a0\u2013 The Time Series Data Platform to store your data in time series database<\/li>\n\n\n\n<li><a href=\"https:\/\/www.influxdata.com\/time-series-platform\/telegraf\/\">Telegraf<\/a>\u00a0\u2013 The open source server agent to connect Mosquitto and InfluxDB together<\/li>\n\n\n\n<li><a href=\"https:\/\/grafana.com\/\">Grafana<\/a>\u00a0\u2013 The open observability platform to draw some graphs and more<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">Setup process<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Miceuz\/docker-compose-mosquitto-influxdb-telegraf-grafana#setup-process\"><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Install docker<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Miceuz\/docker-compose-mosquitto-influxdb-telegraf-grafana#install-docker\"><\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install docker.io\nsudo apt install docker-compose \n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo usermod -aG docker iothon\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Clone this repository<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Miceuz\/docker-compose-mosquitto-influxdb-telegraf-grafana#clone-this-repository\"><\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>git clone https:\/\/github.com\/Miceuz\/docker-compose-mosquitto-influxdb-telegraf-grafana.git\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Run it<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Miceuz\/docker-compose-mosquitto-influxdb-telegraf-grafana#run-it\"><\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To download, setup and start all the services run<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd docker-compose-mosquitto-influxdb-telegraf-grafana\nsudo docker-compose up -d\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">To check the running setvices run<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo docker ps\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">To shutdown the whole thing run<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo docker-compose down\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Test your setup<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Miceuz\/docker-compose-mosquitto-influxdb-telegraf-grafana#test-your-setup\"><\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Post some messages into your Mosquitto so you\u2019ll be able to see some data in Grafana already:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo docker container exec mosquitto mosquitto_pub -t 'paper_wifi\/test\/' -m '{\"humidity\":21, \"temperature\":21, \"battery_voltage_mv\":3000}'\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Grafana<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Miceuz\/docker-compose-mosquitto-influxdb-telegraf-grafana#grafana\"><\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Open in your browser:&nbsp;<code>http:\/\/&lt;your-server-ip&gt;:3000<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Username and pasword are admin:admin. You should see a graph of the data you have entered with the&nbsp;<code>mosquitto_pub<\/code>&nbsp;command.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">InfluxDB<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Miceuz\/docker-compose-mosquitto-influxdb-telegraf-grafana#influxdb\"><\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can poke around your InfluxDB setup here:&nbsp;<code>http:\/\/&lt;your-server-ip&gt;:8086<\/code>&nbsp;Username and password are user:password1234<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Configuration<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Miceuz\/docker-compose-mosquitto-influxdb-telegraf-grafana#configuration\"><\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mosquitto<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Miceuz\/docker-compose-mosquitto-influxdb-telegraf-grafana#mosquitto\"><\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mosquitto is configured to allow anonymous connections and posting of messages<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>listener 1883\nallow_anonymous true\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">InfluxDB<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Miceuz\/docker-compose-mosquitto-influxdb-telegraf-grafana#influxdb-1\"><\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The configuration is fully in&nbsp;<code>docker-compose.yml<\/code>. Note the&nbsp;<code>DOCKER_INFLUXDB_INIT_ADMIN_TOKEN<\/code>&nbsp;\u2013 you can run a test with the one given, but you better re-generate it for your own security. This same token is repeated in several other config files, you have to update it there also. I did not find an easy way to generate it automagically in docker yet.&nbsp;<strong>Change it before you go live<\/strong>. You have been warned. Also change the username and password.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"> <code> influxdb:\n    image: influxdb\n    container_name: influxdb\n    restart: always\n    ports:\n      - \"8086:8086\"\n    networks:\n      - iot\n    volumes:\n      - influxdb-data:\/var\/lib\/influxdb2\n      - influxdb-config:\/etc\/influxdb2\n    environment:\n      - DOCKER_INFLUXDB_INIT_MODE=setup\n      - DOCKER_INFLUXDB_INIT_USERNAME=user\n      - DOCKER_INFLUXDB_INIT_PASSWORD=password1234\n      - DOCKER_INFLUXDB_INIT_ORG=some_org\n      - DOCKER_INFLUXDB_INIT_BUCKET=some_data\n      - DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=4eYvsu8wZCJ6tKuE2sxvFHkvYFwSMVK0011hEEiojvejzpSaij86vYQomN_12au6eK-2MZ6Knr-Sax201y70w==\n\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Telegraf<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Miceuz\/docker-compose-mosquitto-influxdb-telegraf-grafana#telegraf\"><\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Telegraf is responsible for piping mqtt messages to influxdb. It is set up to listen for topic&nbsp;<code>paper_wifi\/test<\/code>. You can alter this configuration according to your needs, check the official documentation on how to do that. Note the InfluxDB token you have to update.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;&#91;inputs.mqtt_consumer]]\n  servers = &#91;\"tcp:\/\/mosquitto:1883\"]\n  topics = &#91;\n    \"paper_wifi\/test\/#\"\n  ]\n  data_format = \"json\"\n\n&#91;&#91;outputs.influxdb_v2]]\n  urls = &#91;\"http:\/\/influxdb:8086\"]\n  token = \"4eYvsu8wZCJ6tKuE2sxvFHkvYFwSMVK0011hEEiojvejzpSaij86vYQomN_12au6eK-2MZ6Knr-Sax201y70w==\"\n  organization = \"some_org\"\n  bucket = \"some_data\"\n\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Grafana data source<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Miceuz\/docker-compose-mosquitto-influxdb-telegraf-grafana#grafana-data-source\"><\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Grafana is provisioned with a default data source pointing to the InfluxDB instance installed in this same compose. The configuration file is&nbsp;<code>grafana-provisioning\/datasources\/automatic.yml<\/code>. Note the InfluxDB token you have to update.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apiVersion: 1\n\ndatasources:\n  - name: InfluxDB_v2_Flux\n    type: influxdb\n    access: proxy\n    url: http:\/\/influxdb:8086\n    jsonData:\n      version: Flux\n      organization: some_org\n      defaultBucket: some_data\n      tlsSkipVerify: true\n    secureJsonData:\n      token: 4eYvsu8wZCJ6tKuE2sxvFHkvYFwSMVK0011hEEiojvejzpSaij86vYQomN_12au6eK-2MZ6Knr-Sax201y70w==\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Grafana dashboard<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Miceuz\/docker-compose-mosquitto-influxdb-telegraf-grafana#grafana-dashboard\"><\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Default Grafana dashboard is also set up in this directory:&nbsp;<code>grafana-provisioning\/dashboards<\/code><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Based on&nbsp;https:\/\/github.com\/iothon\/docker-compose-mqtt-influxdb-grafana&nbsp;and&nbsp;https:\/\/lucassardois.medium.com\/handling-iot-data-with-mqtt-telegraf-influxdb-and-grafana-5a431480217 This docker compose installs and sets up: Setup process Install docker Clone this repository Run it To download, setup and start all the services run To check the running setvices run To shutdown the whole thing run Test your setup Post some messages into your Mosquitto so you\u2019ll be able to see some&#8230;<\/p>\n","protected":false},"author":1,"featured_media":6,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-11","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/cloudsolvd.com\/index.php?rest_route=\/wp\/v2\/posts\/11","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudsolvd.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudsolvd.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudsolvd.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudsolvd.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=11"}],"version-history":[{"count":2,"href":"https:\/\/cloudsolvd.com\/index.php?rest_route=\/wp\/v2\/posts\/11\/revisions"}],"predecessor-version":[{"id":35,"href":"https:\/\/cloudsolvd.com\/index.php?rest_route=\/wp\/v2\/posts\/11\/revisions\/35"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudsolvd.com\/index.php?rest_route=\/wp\/v2\/media\/6"}],"wp:attachment":[{"href":"https:\/\/cloudsolvd.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=11"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudsolvd.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=11"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudsolvd.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=11"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}