Cara Bikin Broker MQTT + WebSocket di Raspberry Pi Pakai Docker Compose (Lengkap + Struktur Folder)


Kalau kamu lagi main-main sama IoT dan butuh broker MQTT yang simpel tapi fleksibel, Mosquitto adalah salah satu pilihan paling populer.
Di artikel ini kita bakal bikin broker Mosquitto di Raspberry Pi (atau server lain) pakai Docker Compose, lengkap dengan dukungan WebSocket supaya bisa diakses lewat Cloudflare Tunnel, browser, atau perangkat IoT kayak ESP32.


Kenapa Pakai Docker Compose?

  • Mudah: tinggal docker compose up -d langsung jalan.
  • Rapi: konfigurasi Mosquitto disimpan terpisah, gampang di-backup.
  • Auto-restart: service otomatis hidup lagi setelah reboot.

Struktur Folder

Biar gampang dipahami, kita buat struktur foldernya seperti ini:

mqtt-broker/
├── docker-compose.yml
└── mosquitto/
    ├── config/
    │   └── mosquitto.conf
    ├── data/
    └── log/

Keterangan:

  • docker-compose.yml → file compose utama
  • mosquitto/config/mosquitto.conf → konfigurasi Mosquitto (listener MQTT + WebSocket)
  • mosquitto/data → folder untuk data persistence
  • mosquitto/log → folder untuk file log Mosquitto

Buat foldernya:

mkdir -p ~/mqtt-broker/mosquitto/config
mkdir -p ~/mqtt-broker/mosquitto/data
mkdir -p ~/mqtt-broker/mosquitto/log
cd ~/mqtt-broker

Konfigurasi Mosquitto (Enable WebSocket)

Bikin file mosquitto.conf di mosquitto/config/:

nano mosquitto/config/mosquitto.conf

Isi:

persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log

# Listener MQTT default (TCP)
listener 1883
protocol mqtt

# Listener WebSocket (buat Cloudflare / browser)
listener 9001
protocol websockets

File Docker Compose

Buat file docker-compose.yml di folder mqtt-broker:

nano docker-compose.yml

Isi:

version: "3.8"

services:
  mosquitto:
    image: eclipse-mosquitto:latest
    container_name: mosquitto
    restart: unless-stopped
    ports:
      - "1883:1883"   # MQTT TCP
      - "9001:9001"   # WebSocket MQTT
    volumes:
      - ./mosquitto/config:/mosquitto/config
      - ./mosquitto/data:/mosquitto/data
      - ./mosquitto/log:/mosquitto/log

Jalankan Broker MQTT

Jalankan:

docker compose up -d

Cek status container:

docker ps

Harus terlihat port 1883 dan 9001 terbuka.


Uji Koneksi MQTT dan WebSocket

MQTT TCP (1883):

mosquitto_pub -h localhost -p 1883 -t test -m "halo mqtt"

MQTT WebSocket (9001):

  • Pastikan Cloudflare Tunnel diarahkan ke http://127.0.0.1:9001 untuk hostname mqtt.domainkamu.com.
  • Client dari luar cukup pakai URL wss://mqtt.domainkamu.com.

Contoh kode Go:

opts := mqtt.NewClientOptions()
opts.AddBroker("wss://mqtt.domainkamu.com")
opts.SetClientID("go-publisher")

client := mqtt.NewClient(opts)
if token := client.Connect(); token.Wait() && token.Error() != nil {
    panic(token.Error())
}

ESP32 pun bisa connect pakai wss:// dengan library MQTT yang support WebSocket.


Lihat Log & Masuk ke Container

Log Mosquitto:

tail -f mosquitto/log/mosquitto.log

Masuk shell container:

docker exec -it mosquitto sh

Keluar cukup ketik exit.


Penutup

Sekarang kamu punya broker MQTT pribadi yang:

  • Jalan di Docker Compose (praktis)
  • Bisa MQTT raw TCP dan MQTT over WebSocket
  • Siap diintegrasikan ke Cloudflare Tunnel supaya bisa diakses publik lewat TLS (wss://)

Cocok buat project IoT, ESP32, dashboard web, atau sekadar eksperimen sendiri. 🚀

Leave a Reply

Your email address will not be published. Required fields are marked *