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 -dlangsung 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 utamamosquitto/config/mosquitto.conf→ konfigurasi Mosquitto (listener MQTT + WebSocket)mosquitto/data→ folder untuk data persistencemosquitto/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:9001untuk hostnamemqtt.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. 🚀