Mosquitto Docker: Cara Menyiapkan Broker Eclipse Mosquitto MQTT dengan Docker dan Docker Compose
Panduan langkah demi langkah untuk menerapkan broker Mosquitto MQTT siap produksi menggunakan container Docker. Termasuk autentikasi, enkripsi TLS, konfigurasi persistensi, dan integrasi dengan Home Assistant.
Menyiapkan broker MQTT dari nol seharusnya tidak memakan waktu berjam-jam untuk konfigurasi dan pemecahan masalah.
Eclipse Mosquitto adalah broker MQTT open-source yang mengimplementasikan protokol MQTT v5, 3.1.1, dan 3.1, sehingga cocok untuk perangkat IoT, sistem automasi rumah, aplikasi cloud, dan arsitektur berbasis pesan apa pun. Namun memasang dan mengonfigurasi Mosquitto langsung di sistem Anda sering kali menimbulkan konflik dependensi, masalah izin, dan persoalan spesifik platform yang menghabiskan waktu pengembangan Anda. Alih-alih membangun aplikasi, Anda justru disibukkan oleh proses setup.
Docker menghilangkan sakit kepala ini dengan menyediakan lingkungan yang konsisten dan terisolasi untuk menjalankan Mosquitto di platform mana pun. Anda bisa menjalankan broker MQTT yang sepenuhnya fungsional dalam hitungan menit, lengkap dengan konfigurasi kustom, autentikasi, dan persistensi.
Dalam panduan ini, saya akan memandu Anda menerapkan Eclipse Mosquitto menggunakan Docker dan Docker Compose, mengonfigurasi autentikasi dan logging, menyiapkan persistensi data, serta menguji broker Anda dengan klien MQTT nyata.
Baru pertama kali menggunakan Docker? Saya sarankan mulai dari kursus Introduction to Docker kami untuk memahami dasar-dasarnya.
Apa Itu Mosquitto dan Mengapa Menggunakannya di Docker
Anda tidak memerlukan sistem messaging yang berat ketika yang Anda butuhkan hanyalah komunikasi cepat dan andal antar perangkat.
MQTT adalah protokol publish-subscribe yang ringan, dirancang untuk situasi dengan bandwidth terbatas dan reliabilitas yang krusial. Bayangkan sensor IoT, aplikasi seluler, atau skenario apa pun saat perangkat perlu bertukar pesan kecil dengan cepat tanpa polling terus-menerus.
Mosquitto bertindak sebagai perantara — broker — antara publisher dan subscriber.
Publisher mengirim pesan ke topik tertentu. Subscriber mendengarkan topik tersebut. Mosquitto menangani perutean, memastikan pesan dikirim ke tempat yang tepat tanpa publisher dan subscriber perlu saling mengetahui.
Inilah alasan Docker membuat setup Mosquitto semakin baik:
Setup konsisten lintas platform: Windows, macOS, atau Linux — container Docker berjalan persis dengan cara yang sama. Tidak perlu mencari installer spesifik platform atau menghadapi konflik dependensi.
Manajemen versi yang mudah: Anda dapat mengunci versi Mosquitto tertentu menggunakan tag image, rollback jika terjadi masalah, dan menguji versi baru tanpa menyentuh sistem host.
Portabilitas sesungguhnya: Setup docker mosquitto yang sama bekerja di development, staging, dan produksi. Lingkungan lokal Anda sesuai dengan yang berjalan di server.
Mosquitto hadir dalam dua varian: versi open-source (yang mencakup sebagian besar use case) dan Pro Edition komersial dari Cedalo dengan fitur lanjutan seperti clustering dan keamanan yang ditingkatkan. Untuk sebagian besar proyek, versi open-source sudah memenuhi kebutuhan.
Selanjutnya, saya akan membahas prasyarat lalu kita akan langsung memasang Mosquitto.
Prasyarat
Anda perlu menjalankan Docker di sistem Anda sebelum dapat menerapkan Mosquitto.
Docker Desktop paling cocok untuk pengguna Windows dan macOS karena mencakup semua yang Anda butuhkan dalam satu paket. Pengguna Linux dapat memasang Docker CLI langsung melalui manajer paket mereka atau dari repositori resmi Docker.
Docker Compose tidak wajib, tetapi membuat pengelolaan setup multi-container jauh lebih mudah. Sebagian besar instalasi Docker Desktop sudah menyertakan Compose secara default. Jika Anda menggunakan Linux, Anda mungkin perlu memasangnya secara terpisah.
Anda juga memerlukan keterampilan dasar baris perintah. Tidak rumit, cukup kemampuan menjalankan perintah, menavigasi direktori, dan mengedit file teks.
Setup Langkah demi Langkah
Menjalankan mosquitto docker memerlukan tiga langkah: membuat direktori, menjalankan container, dan opsional menyiapkan Docker Compose untuk pengelolaan yang lebih mudah.
Membuat direktori yang diperlukan
Mosquitto memerlukan penyimpanan yang terorganisasi untuk konfigurasi, data, dan log.
Buat direktori berikut untuk memulai:
mkdir mosquitto-docker
cd mosquitto-docker
mkdir config data logsDidukung oleh
Ini memberi Anda folder yang rapi untuk file konfigurasi Mosquitto, data persisten, dan keluaran log.
Berikut fungsi masing-masing direktori:
/mosquitto/config menyimpan mosquitto.conf dan file konfigurasi tambahan
/mosquitto/data menampung data pesan persisten dan informasi langganan
/mosquitto/log berisi file log Mosquitto untuk debugging dan pemantauan
Direktori ini akan di-mount sebagai volume di dalam container Docker, sehingga pengaturan dan data Anda tetap ada saat container dimulai ulang.
Menjalankan Mosquitto dengan Docker
Perintah Docker dasar menjalankan Mosquitto dengan pemetaan port dan mount volume yang tepat.
docker run -d\--name mosquitto \-p1883:1883 \-v$(pwd)/mosquitto/config:/mosquitto/config \-v$(pwd)/mosquitto/data:/mosquitto/data \-v$(pwd)/mosquitto/log:/mosquitto/log \
eclipse-mosquitto:latestDidukung oleh
Gambar 1 - Menjalankan Mosquitto dengan Docker
Berikut penjelasan flag yang digunakan:
-d menjalankan container di latar belakang (detached mode)
--name mosquitto memberi container nama yang mudah diingat
-p 1883:1883 memetakan port 1883 pada host ke port 1883 di container
-v me-mount direktori lokal sebagai volume di dalam container
Mosquitto 2.0+ berjalan dalam mode lokal saja secara default. Artinya, hanya menerima koneksi dari localhost kecuali Anda mengonfigurasikannya sebaliknya. Anda perlu membuat file konfigurasi untuk mengizinkan koneksi eksternal.
Menggunakan Docker Compose
Docker compose untuk Mosquitto membuat pengelolaan instalasi jauh lebih sederhana, terutama saat Anda menjalankan banyak layanan.
Buat file docker-compose.yml dan tempelkan isi berikut:
Gambar 2 - Menjalankan Mosquitto dengan Docker Compose
Pemetaan volume bekerja sama seperti perintah Docker, tetapi Compose menangani kerumitannya. Konfigurasi port mencakup semua protokol MQTT umum: MQTT standar (1883), MQTTS aman (8883), dan koneksi WebSocket (9001).
Compose sangat berguna untuk setup multi-layanan. Misalnya, jika Anda menjalankan Home Assistant, Node-RED, atau alat IoT lain bersama Mosquitto, Anda dapat mendefinisikan semuanya dalam satu file dan memulai semua layanan sekaligus.
Selanjutnya, mari kita bahas konfigurasi lebih dalam.
Apakah konsep Docker tingkat lanjut terasa membingungkan? Kursus Intermediate Docker kami membahas lebih dari dasar-dasar.
Mengonfigurasi Mosquitto
Mosquitto tidak akan menerima koneksi eksternal secara default, Anda memerlukan file konfigurasi untuk itu.
Konfigurasi dasar (mosquitto.conf)
Buat file mosquitto.conf di direktori mosquitto/config Anda dan tambahkan berikut ini:
Pengaturan allow_anonymous true memungkinkan klien terhubung tanpa kredensial. Ini baik untuk pengembangan atau jaringan internal, tetapi Anda sebaiknya menonaktifkannya untuk lingkungan produksi. Saat Anda mengatur allow_anonymous false, setiap klien harus diautentikasi dengan nama pengguna dan kata sandi.
Listener WebSocket pada port 9001 mengaktifkan klien MQTT berbasis browser. Aplikasi web dapat terhubung langsung ke broker menggunakan pustaka JavaScript seperti Paho MQTT.
Menyiapkan autentikasi
Autentikasi memerlukan pembuatan file kata sandi dan memperbarui konfigurasi Anda.
Buat file kata sandi di dalam container:
dockerexec-it mosquitto mosquitto_passwd -c /mosquitto/config/passwd usernameDidukung oleh
Gambar 3 - Autentikasi Mosquitto
Perintah ini membuat file kata sandi baru dan meminta Anda memasukkan kata sandi. Untuk pengguna tambahan, hilangkan flag -c:
dockerexec-it mosquitto mosquitto_passwd /mosquitto/config/passwd another_userDidukung oleh
Sekarang, perbarui mosquitto.conf Anda untuk mewajibkan autentikasi:
Anda perlu memperoleh sertifikat SSL untuk domain Anda. Let's Encrypt menyediakan sertifikat gratis, atau Anda dapat menggunakan reverse proxy seperti Caddy Server yang menangani pembuatan sertifikat secara otomatis. Tempatkan file sertifikat Anda di direktori mosquitto/config agar tersedia di dalam container.
Persistensi dan logging
Persistensi menyimpan pesan dan langganan ke disk, sementara logging yang tepat membantu Anda men-debug masalah koneksi.
Anda dapat mengonfigurasi persistensi di mosquitto.conf seperti ini:
# Enable persistence
persistence true
persistence_location /mosquitto/data/
# Save to disk every 300 seconds
autosave_interval 300# Keep messages for offline clients
persistent_client_expiration 1dDidukung oleh
Untuk logging, berikut cara menyiapkan logging terperinci:
# Log to file and stdout
log_dest file /mosquitto/log/mosquitto.log
log_dest stdout
# Choose what to log
log_type error
log_type warning
log_type notice
log_type information
log_type debug
# Log connection details
connection_messages true
log_timestamp trueDidukung oleh
Opsi log_type memungkinkan Anda memfilter apa yang dicatat:
error dan warning untuk pemantauan produksi
notice dan information untuk wawasan operasional umum
debug untuk menelusuri masalah koneksi
Mount volume Anda memastikan data persistensi dan log tetap ada saat container dimulai ulang. Direktori data menyimpan semua pesan persisten dan informasi langganan, sementara direktori log menyimpan informasi debugging yang dapat diakses dari sistem host.
File konfigurasi memberi Anda kendali penuh atas perilaku Mosquitto tanpa perlu membangun ulang container.
Menguji Setup
Broker Anda belum berguna sampai Anda memastikan klien dapat terhubung dan bertukar pesan.
Menggunakan mosquitto_pub dan mosquitto_sub
Alat baris perintah mosquitto_pub dan mosquitto_sub menyediakan cara tercepat untuk menguji broker Anda.
Mulailah dengan memasang Mosquitto, sesuai platform Anda:
Linux (Ubuntu/Debian): sudo apt-get install mosquitto-clients
macOS:brew install mosquitto
Windows: Unduh dari situs resmi Eclipse Mosquitto atau gunakan WSL
Mari mulai menguji tanpa autentikasi. Anda membutuhkan dua jendela atau tab terminal. Jalankan perintah ini di sesi terpisah:
# Subscribe to a topic (run this first)
mosquitto_sub -h localhost -p1883-t test/topic
# Publish a message (run in another terminal)
mosquitto_pub -h localhost -p1883-t test/topic -m"Hello MQTT"Didukung oleh
Di tab publikasi, Anda akan melihat ini:
Gambar 4 - Mempublikasikan pesan
Dan di tab subscribe, Anda akan langsung melihat pesannya:
Gambar 5 - Berlangganan topik Mosquitto
Jika Anda memerlukan autentikasi, perintahnya serupa — Anda hanya perlu menyertakan nama pengguna dan kata sandi:
# Subscribe with username and password
mosquitto_sub -h localhost -p1883-t test/topic -u username -P password
# Publish with credentials
mosquitto_pub -h localhost -p1883-t test/topic -m"Authenticated message"-u username -P passwordDidukung oleh
Jika Anda tidak ingin memasang klien Mosquitto secara lokal, jalankan di dalam container Docker Anda:
# Subscribe using the containerdockerexec-it mosquitto mosquitto_sub -h localhost -t test/topic
# Publish using the containerdockerexec-it mosquitto mosquitto_pub -h localhost -t test/topic -m"Container message"Didukung oleh
Anda akan melihat ini di tab publikasi:
Gambar 6 - Mempublikasikan pesan tanpa autentikasi
Dan di tab subscribe, Anda akan melihat pesannya:
Gambar 7 - Berlangganan topik Mosquitto tanpa autentikasi
Menguji dengan klien MQTT
Klien GUI memudahkan pengujian skenario kompleks dan memantau lalu lintas pesan yang sedang berlangsung.
MQTT Explorer menyediakan antarmuka yang rapi untuk menelusuri topik dan mengirim pesan. Sambungkan ke localhost:1883 dan Anda akan melihat tampilan pohon semua topik aktif. Ini ideal untuk debugging alur pesan dan memahami struktur topik Anda.
Gambar 8 - Aplikasi MQTT Explorer
MQTTX menawarkan fitur yang lebih canggih seperti scripting dan pengiriman pesan massal. Kedua klien mendukung autentikasi, koneksi TLS, dan protokol WebSocket.
Pengguna Home Assistant dapat menguji integrasi MQTT langsung dari developer tools. Tambahkan detail broker Anda ke integrasi MQTT dan gunakan antarmuka publish/subscribe bawaan.
Untuk pengujian terprogram, klien Paho MQTT Python bekerja dengan baik:
import paho.mqtt.client as mqtt
defon_connect(client, userdata, flags, rc):print(f"Connected with result code {rc}")
client.subscribe("test/topic")defon_message(client, userdata, msg):print(f"Received: {msg.payload.decode()}")
client = mqtt.Client()# client.username_pw_set("username", "password") # If using auth
client.on_connect = on_connect
client.on_message = on_message
client.connect("localhost",1883,60)
client.loop_forever()Didukung oleh
Jalankan skrip ini di satu terminal, lalu publikasikan pesan dari terminal lain atau klien GUI. Skrip akan mencetak pesan yang diterimanya, memastikan broker Anda merutekan trafik dengan benar.
Berikut yang perlu Anda lakukan untuk mempublikasikan pesan:
Gambar 9 - Mempublikasikan pesan untuk contoh Python
Dan Anda akan melihat ini di sesi terminal yang menjalankan skrip Python:
Gambar 10 - Menerima pesan untuk contoh Python
Operasi publish dan subscribe yang berfungsi menandakan setup Mosquitto Docker Anda siap untuk aplikasi nyata.
Mengintegrasikan Mosquitto Docker dengan Home Assistant
Menjalankan Mosquitto berdampingan dengan Home Assistant di Docker menciptakan hub messaging IoT lengkap tanpa repot konfigurasi jaringan.
Docker Compose membuatnya sederhana. Kedua layanan dapat berkomunikasi melalui jaringan internal Docker tanpa mengekspos port tambahan atau menangani alamat IP.
Berikut docker-compose.yml lengkap yang menjalankan kedua layanan:
Bagian networks membuat jaringan bersama di mana kedua container dapat saling menjangkau berdasarkan nama. Home Assistant dapat terhubung ke mosquitto:1883 alih-alih menggunakan localhost atau alamat IP.
Selanjutnya, konfigurasikan integrasi MQTT melalui antarmuka web Home Assistant. Arahkan ke Settings > Devices & Services > Add Integration, lalu cari "MQTT."
Masukkan detail koneksi berikut:
Broker: mosquitto (nama container)
Port: 1883
Username/Password: Kredensial Anda jika autentikasi diaktifkan
Biarkan pengaturan lainnya tetap default
Klik Submit dan Home Assistant akan menguji koneksi. Jika berhasil, Anda akan melihat MQTT muncul di daftar integrasi.
Gambar 11 - Konfigurasi Mosquitto dengan Homelab
Sekarang Anda dapat menambahkan perangkat MQTT, membuat automasi yang mempublikasikan pesan, dan memantau data sensor melalui topik. Integrasi MQTT Home Assistant menangani penemuan perangkat secara otomatis untuk perangkat yang kompatibel.
Pemecahan Masalah Umum
Sebagian besar masalah docker mosquitto berkutat pada izin, port, atau kesalahan konfigurasi yang memblokir koneksi.
Kesalahan izin pada volume yang di-mount
Ini terjadi ketika container tidak dapat menulis ke direktori host Anda. Anda akan melihat pesan error seperti "Permission denied" atau "Cannot create directory" di log.
Perbaiki dengan mengatur kepemilikan yang tepat pada direktori Anda:
Container Mosquitto berjalan sebagai user ID 1883, jadi direktori host Anda harus disesuaikan. Di beberapa sistem, Anda mungkin perlu membuat pengguna terlebih dahulu:
sudouseradd-u1883 mosquitto
sudochown-R mosquitto:mosquitto mosquitto/Didukung oleh
Konflik port
Ini terjadi saat ada proses lain yang menggunakan port 1883. Periksa apa yang berjalan pada port tersebut:
# Linux/macOSsudolsof-i :1883
# Windowsnetstat-an| findstr :1883Didukung oleh
Jika layanan lain menggunakan port tersebut, hentikan atau petakan Mosquitto ke port lain:
docker run -p1884:1883 eclipse-mosquitto:latestDidukung oleh
Mode lokal saja mencegah koneksi eksternal
Ini terjadi bahkan saat container Anda berjalan. Mosquitto 2.0+ secara default hanya menerima koneksi dari localhost kecuali Anda mengonfigurasikannya sebaliknya.
Buat file mosquitto.conf dasar untuk mengizinkan koneksi eksternal:
Ini akan menyebabkan masalah izin yang persisten. Container diharapkan berjalan sebagai user 1883, tetapi sistem host Anda mungkin memiliki kebutuhan kepemilikan yang berbeda.
Paksa container berjalan sebagai pengguna Anda:
docker run --user$(id-u):$(id-g) eclipse-mosquitto:latestDidukung oleh
Atau sesuaikan izin direktori host Anda agar sesuai dengan ekspektasi container. Pendekatan container lebih baik untuk pengembangan, sementara memperbaiki izin host lebih cocok untuk penerapan produksi.
Periksa log container ketika ada masalah — biasanya log memberi tahu Anda secara jelas letak masalahnya.
Tingkat Lanjut: Fitur Mosquitto Pro Edition
Mosquitto open-source mencakup sebagian besar use case, tetapi lingkungan enterprise memerlukan fitur yang hanya tersedia di Pro Edition.
Manajemen pengguna berbasis peran memungkinkan Anda mendefinisikan izin granular untuk berbagai grup pengguna. Alih-alih mengelola akses pengguna satu per satu, Anda membuat peran seperti "sensor-readers", "actuator-controllers", atau "admin-users" dan menetapkan izin ke seluruh peran. Pengguna mewarisi izin dari peran yang ditugaskan, sehingga lebih mudah mengelola akses di ratusan atau ribuan perangkat.
Anda dapat membatasi akses berdasarkan pola topik, rentang IP, atau jendela waktu. Ini jauh lebih baik daripada mengonfigurasi file ACL secara manual saat Anda mengelola deployment IoT yang kompleks dengan kebutuhan keamanan berbeda-beda.
Opsi autentikasi lanjutan melampaui kombinasi nama pengguna/kata sandi sederhana. Autentikasi token JWT terintegrasi dengan penyedia identitas yang ada seperti Auth0, Okta, atau sistem SSO perusahaan Anda. Integrasi LDAP terhubung langsung ke Active Directory atau layanan direktori enterprise lainnya.
Inspeksi dan pemantauan mendalam memberi Anda visibilitas waktu nyata atas aliran pesan, pola koneksi, dan kinerja broker. Pro Edition menyertakan dashboard bawaan yang menampilkan klien mana yang mengonsumsi bandwidth terbanyak, topik mana dengan laju pesan tertinggi, dan di mana bottleneck terbentuk.
Anda mendapatkan metrik terperinci tentang latensi pesan, kedalaman antrean, dan pola perilaku klien. Data ini membantu Anda mengoptimalkan struktur topik dan mengidentifikasi klien bermasalah sebelum memengaruhi seluruh sistem.
Integrasi basis data dan layanan cloud menghilangkan kebutuhan aplikasi bridge kustom. Pro Edition dapat meneruskan pesan secara otomatis ke PostgreSQL, MongoDB, InfluxDB, AWS IoT Core, Azure IoT Hub, atau Google Cloud IoT. Anda mendefinisikan aturan perutean yang menentukan pesan mana pergi ke mana berdasarkan pola topik, konten pesan, atau metadata klien.
Antrean persisten menangani skenario volume tinggi saat persistensi standar Mosquitto tidak memadai. Pro Edition dapat melakukan buffer jutaan pesan untuk klien offline dan mendistribusikan beban di beberapa instance broker. Termasuk manajemen antrean otomatis yang mencegah kehabisan memori dan mempertahankan jaminan urutan pesan.
Dukungan clustering memungkinkan Anda menjalankan beberapa instance broker yang berbagi beban pesan dan menyediakan perlindungan failover. Saat satu broker down, klien secara otomatis tersambung ke instance yang sehat tanpa kehilangan pesan atau langganan.
Pro Edition masuk akal ketika Anda memerlukan keandalan dan fitur manajemen tingkat enterprise yang akan memakan waktu berbulan-bulan jika dibangun sendiri.
Kelebihan dan Kekurangan Menggunakan Mosquitto di Docker
Docker memudahkan deployment, tetapi bukan solusi sempurna untuk setiap skenario.
Kelebihan
Konsistensi lintas platform menghilangkan kerumitan instalasi spesifik OS. Perintah Docker yang sama bekerja di Windows, macOS, dan Linux tanpa perlu mencari manajer paket berbeda atau menangani konflik dependensi. Setup pengembangan Anda persis sama dengan produksi, sehingga lebih sedikit kejutan saat deployment.
Pembaruan versi sederhana cukup dengan mengganti tag image. Alih-alih mencopot versi lama dan berharap pembaruan tidak merusak konfigurasi, Anda hanya menarik image baru dan memulai ulang container. Rollback hanya butuh hitungan detik jika terjadi masalah.
Backup dan migrasi mudah berkat penggunaan volume untuk data Anda. Salin direktori mosquitto ke mesin lain, jalankan perintah Docker yang sama, dan Anda kembali online. Pindah antar penyedia cloud atau upgrade hardware menjadi sesederhana transfer file.
Kekurangan
Docker tidak selalu tanpa cela.
Masalah izin volume sering terjadi pada sistem operasi tertentu, terutama saat berpindah antara host Windows dan Linux. Anda akan menghabiskan waktu memperbaiki kepemilikan dan menangani ketidaksesuaian UID/GID yang tidak akan ada pada instalasi native.
Konfigurasi ekstra untuk keamanan tingkat produksi berarti Docker menambah kompleksitas alih-alih menguranginya. Anda harus mengelola kebijakan jaringan, konteks keamanan container, dan enkripsi volume di atas fitur keamanan Mosquitto sendiri. Instalasi native memungkinkan Anda menggunakan kerangka keamanan OS yang sudah ada secara langsung.
Potensi penurunan kinerja terjadi pada skenario throughput tinggi di mana setiap mikrodetik berarti. Lapisan jaringan container dan mount volume menambah overhead yang dihindari oleh instalasi native. Untuk sebagian besar aplikasi IoT perbedaan ini dapat diabaikan, tetapi sistem industri waktu nyata mungkin merasakan latensi.
Docker unggul saat Anda membutuhkan deployment yang konsisten dan pengelolaan mudah di berbagai lingkungan.
Kesimpulan
Menjalankan Mosquitto di Docker memberi Anda broker MQTT andal yang bekerja konsisten di semua lingkungan. Baik Anda membuat prototipe perangkat IoT, membangun sistem automasi rumah, atau menghubungkan sensor di lingkungan pengembangan, Docker menghilangkan kerumitan setup dan memungkinkan Anda fokus pada proyek inti.
Jika Anda berencana membawa Mosquitto ke produksi, ingat hal ini:
Amankan broker Anda sebelum mengeksposnya ke internet
Aktifkan autentikasi dengan mosquitto_passwd, konfigurasikan enkripsi TLS dengan sertifikat yang tepat
Batasi akses hanya untuk klien yang membutuhkannya
Broker MQTT yang tidak diamankan menjadi pintu terbuka bagi penyerang untuk memantau komunikasi perangkat atau menyuntikkan perintah berbahaya.
Untuk deployment enterprise yang membutuhkan fitur lanjutan seperti kontrol akses berbasis peran, clustering, atau integrasi LDAP, Mosquitto Pro Edition menyediakan alat manajemen dan skalabilitas yang melampaui versi open-source.
Apa perbedaan menjalankan Mosquitto secara native dibanding di Docker?⌄
Docker menyediakan konsistensi lintas platform dan menghilangkan konflik dependensi yang sering terjadi pada instalasi native. Setup Mosquitto Anda bekerja identik di Windows, macOS, dan Linux tanpa perlu mencari paket spesifik platform. Docker juga memudahkan pembaruan versi dan rollback — cukup ganti tag image dan mulai ulang container. Namun, instalasi native dapat menawarkan kinerja sedikit lebih baik untuk skenario throughput tinggi.
Apakah saya perlu Docker Compose untuk menjalankan Mosquitto, atau bisa menggunakan perintah Docker biasa?⌄
Anda tentu bisa menjalankan Mosquitto dengan perintah Docker biasa menggunakan docker run. Docker Compose hanya memudahkan pengelolaan, terutama saat Anda menjalankan banyak layanan seperti Home Assistant atau Node-RED bersamaan dengan Mosquitto. Jika Anda hanya menjalankan Mosquitto saja, perintah docker run sederhana sudah sangat memadai.
Apakah Mosquitto di Docker cukup aman untuk penggunaan produksi?⌄
Mosquitto di Docker bisa siap produksi dengan konfigurasi yang tepat. Anda perlu menonaktifkan akses anonim, menyiapkan autentikasi dengan mosquitto_passwd, mengonfigurasi enkripsi TLS, dan membatasi akses jaringan hanya untuk klien tepercaya. Container itu sendiri tidak menambah kerentanan keamanan, tetapi Anda bertanggung jawab mengamankan konfigurasi Mosquitto dan lingkungan Docker.
Mengapa container Mosquitto saya berjalan tetapi menolak koneksi eksternal?⌄
Mosquitto 2.0+ secara default berada di mode lokal saja, yang hanya menerima koneksi dari localhost di dalam container. Anda perlu membuat file mosquitto.conf dengan listener 1883 dan allow_anonymous true (untuk pengujian) atau pengaturan autentikasi yang tepat. Tempatkan file config ini di direktori /mosquitto/config yang di-mount dan mulai ulang container.
Bagaimana cara memperbaiki error "Permission denied" saat Mosquitto menulis ke volume yang di-mount?⌄
Container Mosquitto berjalan sebagai user ID 1883, tetapi direktori host Anda mungkin memiliki kepemilikan berbeda. Jalankan sudo chown -R 1883:1883 mosquitto/ untuk memperbaiki kepemilikan, atau buat pengguna mosquitto terlebih dahulu dengan sudo useradd -u 1883 mosquitto lalu ubah kepemilikan. Di beberapa sistem, Anda juga bisa menjalankan container dengan --user $(id -u):$(id -g) agar sesuai dengan pengguna host Anda.
Senior Data Scientist yang berbasis di Kroasia. Penulis Tekno Teratas dengan lebih dari 700 artikel yang telah diterbitkan, menghasilkan lebih dari 10 juta tayangan. Penulis buku Machine Learning Automation with TPOT.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Pelajari kekuatan Docker dan Kubernetes, jalur interaktif ini akan memungkinkan Anda untuk membangun dan mengimplementasikan aplikasi di lingkungan modern.
Menyiapkan broker MQTT dari nol seharusnya tidak memakan waktu berjam-jam untuk konfigurasi dan pemecahan masalah.
Eclipse Mosquitto adalah broker MQTT open-source yang mengimplementasikan protokol MQTT v5, 3.1.1, dan 3.1, sehingga cocok untuk perangkat IoT, sistem automasi rumah, aplikasi cloud, dan arsitektur berbasis pesan apa pun. Namun memasang dan mengonfigurasi Mosquitto langsung di sistem Anda sering kali menimbulkan konflik dependensi, masalah izin, dan persoalan spesifik platform yang menghabiskan waktu pengembangan Anda. Alih-alih membangun aplikasi, Anda justru disibukkan oleh proses setup.
Docker menghilangkan sakit kepala ini dengan menyediakan lingkungan yang konsisten dan terisolasi untuk menjalankan Mosquitto di platform mana pun. Anda bisa menjalankan broker MQTT yang sepenuhnya fungsional dalam hitungan menit, lengkap dengan konfigurasi kustom, autentikasi, dan persistensi.
Dalam panduan ini, saya akan memandu Anda menerapkan Eclipse Mosquitto menggunakan Docker dan Docker Compose, mengonfigurasi autentikasi dan logging, menyiapkan persistensi data, serta menguji broker Anda dengan klien MQTT nyata.
Baru pertama kali menggunakan Docker? Saya sarankan mulai dari kursus Introduction to Docker kami untuk memahami dasar-dasarnya.
Apa Itu Mosquitto dan Mengapa Menggunakannya di Docker
Anda tidak memerlukan sistem messaging yang berat ketika yang Anda butuhkan hanyalah komunikasi cepat dan andal antar perangkat.
MQTT adalah protokol publish-subscribe yang ringan, dirancang untuk situasi dengan bandwidth terbatas dan reliabilitas yang krusial. Bayangkan sensor IoT, aplikasi seluler, atau skenario apa pun saat perangkat perlu bertukar pesan kecil dengan cepat tanpa polling terus-menerus.
Mosquitto bertindak sebagai perantara — broker — antara publisher dan subscriber.
Publisher mengirim pesan ke topik tertentu. Subscriber mendengarkan topik tersebut. Mosquitto menangani perutean, memastikan pesan dikirim ke tempat yang tepat tanpa publisher dan subscriber perlu saling mengetahui.
Inilah alasan Docker membuat setup Mosquitto semakin baik:
Mosquitto hadir dalam dua varian: versi open-source (yang mencakup sebagian besar use case) dan Pro Edition komersial dari Cedalo dengan fitur lanjutan seperti clustering dan keamanan yang ditingkatkan. Untuk sebagian besar proyek, versi open-source sudah memenuhi kebutuhan.
Selanjutnya, saya akan membahas prasyarat lalu kita akan langsung memasang Mosquitto.
Prasyarat
Anda perlu menjalankan Docker di sistem Anda sebelum dapat menerapkan Mosquitto.
Docker Desktop paling cocok untuk pengguna Windows dan macOS karena mencakup semua yang Anda butuhkan dalam satu paket. Pengguna Linux dapat memasang Docker CLI langsung melalui manajer paket mereka atau dari repositori resmi Docker.
Docker Compose tidak wajib, tetapi membuat pengelolaan setup multi-container jauh lebih mudah. Sebagian besar instalasi Docker Desktop sudah menyertakan Compose secara default. Jika Anda menggunakan Linux, Anda mungkin perlu memasangnya secara terpisah.
Anda juga memerlukan keterampilan dasar baris perintah. Tidak rumit, cukup kemampuan menjalankan perintah, menavigasi direktori, dan mengedit file teks.
Setup Langkah demi Langkah
Menjalankan mosquitto docker memerlukan tiga langkah: membuat direktori, menjalankan container, dan opsional menyiapkan Docker Compose untuk pengelolaan yang lebih mudah.
Membuat direktori yang diperlukan
Mosquitto memerlukan penyimpanan yang terorganisasi untuk konfigurasi, data, dan log.
Buat direktori berikut untuk memulai:
Ini memberi Anda folder yang rapi untuk file konfigurasi Mosquitto, data persisten, dan keluaran log.
Berikut fungsi masing-masing direktori:
/mosquitto/configmenyimpanmosquitto.confdan file konfigurasi tambahan/mosquitto/datamenampung data pesan persisten dan informasi langganan/mosquitto/logberisi file log Mosquitto untuk debugging dan pemantauanDirektori ini akan di-mount sebagai volume di dalam container Docker, sehingga pengaturan dan data Anda tetap ada saat container dimulai ulang.
Menjalankan Mosquitto dengan Docker
Perintah Docker dasar menjalankan Mosquitto dengan pemetaan port dan mount volume yang tepat.
Gambar 1 - Menjalankan Mosquitto dengan Docker
Berikut penjelasan flag yang digunakan:
-dmenjalankan container di latar belakang (detached mode)--name mosquittomemberi container nama yang mudah diingat-p 1883:1883memetakan port 1883 pada host ke port 1883 di container-vme-mount direktori lokal sebagai volume di dalam containerMosquitto 2.0+ berjalan dalam mode lokal saja secara default. Artinya, hanya menerima koneksi dari localhost kecuali Anda mengonfigurasikannya sebaliknya. Anda perlu membuat file konfigurasi untuk mengizinkan koneksi eksternal.
Menggunakan Docker Compose
Docker compose untuk Mosquitto membuat pengelolaan instalasi jauh lebih sederhana, terutama saat Anda menjalankan banyak layanan.
Buat file
docker-compose.ymldan tempelkan isi berikut:Mulai dengan perintah:
Gambar 2 - Menjalankan Mosquitto dengan Docker Compose
Pemetaan volume bekerja sama seperti perintah Docker, tetapi Compose menangani kerumitannya. Konfigurasi port mencakup semua protokol MQTT umum: MQTT standar (1883), MQTTS aman (8883), dan koneksi WebSocket (9001).
Compose sangat berguna untuk setup multi-layanan. Misalnya, jika Anda menjalankan Home Assistant, Node-RED, atau alat IoT lain bersama Mosquitto, Anda dapat mendefinisikan semuanya dalam satu file dan memulai semua layanan sekaligus.
Selanjutnya, mari kita bahas konfigurasi lebih dalam.
Apakah konsep Docker tingkat lanjut terasa membingungkan? Kursus Intermediate Docker kami membahas lebih dari dasar-dasar.
Mengonfigurasi Mosquitto
Mosquitto tidak akan menerima koneksi eksternal secara default, Anda memerlukan file konfigurasi untuk itu.
Konfigurasi dasar (mosquitto.conf)
Buat file
mosquitto.confdi direktorimosquitto/configAnda dan tambahkan berikut ini:Pengaturan
allow_anonymous truememungkinkan klien terhubung tanpa kredensial. Ini baik untuk pengembangan atau jaringan internal, tetapi Anda sebaiknya menonaktifkannya untuk lingkungan produksi. Saat Anda mengaturallow_anonymous false, setiap klien harus diautentikasi dengan nama pengguna dan kata sandi.Listener WebSocket pada port 9001 mengaktifkan klien MQTT berbasis browser. Aplikasi web dapat terhubung langsung ke broker menggunakan pustaka JavaScript seperti Paho MQTT.
Menyiapkan autentikasi
Autentikasi memerlukan pembuatan file kata sandi dan memperbarui konfigurasi Anda.
Buat file kata sandi di dalam container:
Gambar 3 - Autentikasi Mosquitto
Perintah ini membuat file kata sandi baru dan meminta Anda memasukkan kata sandi. Untuk pengguna tambahan, hilangkan flag
-c:Sekarang, perbarui
mosquitto.confAnda untuk mewajibkan autentikasi:File kata sandi disimpan di volume config yang di-mount, sehingga tetap ada di antara restart container.
Mengaktifkan TLS/SSL
Enkripsi TLS melindungi lalu lintas MQTT Anda dari penyadapan dan manipulasi.
Tambahkan baris berikut ke
mosquitto.confAnda:Anda perlu memperoleh sertifikat SSL untuk domain Anda. Let's Encrypt menyediakan sertifikat gratis, atau Anda dapat menggunakan reverse proxy seperti Caddy Server yang menangani pembuatan sertifikat secara otomatis. Tempatkan file sertifikat Anda di direktori
mosquitto/configagar tersedia di dalam container.Persistensi dan logging
Persistensi menyimpan pesan dan langganan ke disk, sementara logging yang tepat membantu Anda men-debug masalah koneksi.
Anda dapat mengonfigurasi persistensi di
mosquitto.confseperti ini:Untuk logging, berikut cara menyiapkan logging terperinci:
Opsi
log_typememungkinkan Anda memfilter apa yang dicatat:errordanwarninguntuk pemantauan produksinoticedaninformationuntuk wawasan operasional umumdebuguntuk menelusuri masalah koneksiMount volume Anda memastikan data persistensi dan log tetap ada saat container dimulai ulang. Direktori data menyimpan semua pesan persisten dan informasi langganan, sementara direktori log menyimpan informasi debugging yang dapat diakses dari sistem host.
File konfigurasi memberi Anda kendali penuh atas perilaku Mosquitto tanpa perlu membangun ulang container.
Menguji Setup
Broker Anda belum berguna sampai Anda memastikan klien dapat terhubung dan bertukar pesan.
Menggunakan mosquitto_pub dan mosquitto_sub
Alat baris perintah
mosquitto_pubdanmosquitto_submenyediakan cara tercepat untuk menguji broker Anda.Mulailah dengan memasang Mosquitto, sesuai platform Anda:
sudo apt-get install mosquitto-clientsbrew install mosquittoMari mulai menguji tanpa autentikasi. Anda membutuhkan dua jendela atau tab terminal. Jalankan perintah ini di sesi terpisah:
Di tab publikasi, Anda akan melihat ini:
Gambar 4 - Mempublikasikan pesan
Dan di tab subscribe, Anda akan langsung melihat pesannya:
Gambar 5 - Berlangganan topik Mosquitto
Jika Anda memerlukan autentikasi, perintahnya serupa — Anda hanya perlu menyertakan nama pengguna dan kata sandi:
Jika Anda tidak ingin memasang klien Mosquitto secara lokal, jalankan di dalam container Docker Anda:
Anda akan melihat ini di tab publikasi:
Gambar 6 - Mempublikasikan pesan tanpa autentikasi
Dan di tab subscribe, Anda akan melihat pesannya:
Gambar 7 - Berlangganan topik Mosquitto tanpa autentikasi
Menguji dengan klien MQTT
Klien GUI memudahkan pengujian skenario kompleks dan memantau lalu lintas pesan yang sedang berlangsung.
MQTT Explorer menyediakan antarmuka yang rapi untuk menelusuri topik dan mengirim pesan. Sambungkan ke
localhost:1883dan Anda akan melihat tampilan pohon semua topik aktif. Ini ideal untuk debugging alur pesan dan memahami struktur topik Anda.Gambar 8 - Aplikasi MQTT Explorer
MQTTX menawarkan fitur yang lebih canggih seperti scripting dan pengiriman pesan massal. Kedua klien mendukung autentikasi, koneksi TLS, dan protokol WebSocket.
Pengguna Home Assistant dapat menguji integrasi MQTT langsung dari developer tools. Tambahkan detail broker Anda ke integrasi MQTT dan gunakan antarmuka publish/subscribe bawaan.
Untuk pengujian terprogram, klien Paho MQTT Python bekerja dengan baik:
Jalankan skrip ini di satu terminal, lalu publikasikan pesan dari terminal lain atau klien GUI. Skrip akan mencetak pesan yang diterimanya, memastikan broker Anda merutekan trafik dengan benar.
Berikut yang perlu Anda lakukan untuk mempublikasikan pesan:
Gambar 9 - Mempublikasikan pesan untuk contoh Python
Dan Anda akan melihat ini di sesi terminal yang menjalankan skrip Python:
Gambar 10 - Menerima pesan untuk contoh Python
Operasi publish dan subscribe yang berfungsi menandakan setup Mosquitto Docker Anda siap untuk aplikasi nyata.
Mengintegrasikan Mosquitto Docker dengan Home Assistant
Menjalankan Mosquitto berdampingan dengan Home Assistant di Docker menciptakan hub messaging IoT lengkap tanpa repot konfigurasi jaringan.
Docker Compose membuatnya sederhana. Kedua layanan dapat berkomunikasi melalui jaringan internal Docker tanpa mengekspos port tambahan atau menangani alamat IP.
Berikut
docker-compose.ymllengkap yang menjalankan kedua layanan:Bagian
networksmembuat jaringan bersama di mana kedua container dapat saling menjangkau berdasarkan nama. Home Assistant dapat terhubung kemosquitto:1883alih-alih menggunakan localhost atau alamat IP.Mulai kedua layanan dengan:
Selanjutnya, konfigurasikan integrasi MQTT melalui antarmuka web Home Assistant. Arahkan ke Settings > Devices & Services > Add Integration, lalu cari "MQTT."
Masukkan detail koneksi berikut:
mosquitto(nama container)1883Klik Submit dan Home Assistant akan menguji koneksi. Jika berhasil, Anda akan melihat MQTT muncul di daftar integrasi.
Gambar 11 - Konfigurasi Mosquitto dengan Homelab
Sekarang Anda dapat menambahkan perangkat MQTT, membuat automasi yang mempublikasikan pesan, dan memantau data sensor melalui topik. Integrasi MQTT Home Assistant menangani penemuan perangkat secara otomatis untuk perangkat yang kompatibel.
Pemecahan Masalah Umum
Sebagian besar masalah docker mosquitto berkutat pada izin, port, atau kesalahan konfigurasi yang memblokir koneksi.
Kesalahan izin pada volume yang di-mount
Ini terjadi ketika container tidak dapat menulis ke direktori host Anda. Anda akan melihat pesan error seperti "Permission denied" atau "Cannot create directory" di log.
Perbaiki dengan mengatur kepemilikan yang tepat pada direktori Anda:
Container Mosquitto berjalan sebagai user ID 1883, jadi direktori host Anda harus disesuaikan. Di beberapa sistem, Anda mungkin perlu membuat pengguna terlebih dahulu:
Konflik port
Ini terjadi saat ada proses lain yang menggunakan port 1883. Periksa apa yang berjalan pada port tersebut:
Jika layanan lain menggunakan port tersebut, hentikan atau petakan Mosquitto ke port lain:
Mode lokal saja mencegah koneksi eksternal
Ini terjadi bahkan saat container Anda berjalan. Mosquitto 2.0+ secara default hanya menerima koneksi dari localhost kecuali Anda mengonfigurasikannya sebaliknya.
Buat file
mosquitto.confdasar untuk mengizinkan koneksi eksternal:Tempatkan file ini di direktori
mosquitto/configAnda dan mulai ulang container.Direktori kosong saat startup
Ini berarti mount volume Anda tidak berfungsi dengan benar. Periksa apakah path bersifat absolut dan direktori ada:
Buat direktori sebelum memulai container:
UID/GID bentrok antara host dan container
Ini akan menyebabkan masalah izin yang persisten. Container diharapkan berjalan sebagai user 1883, tetapi sistem host Anda mungkin memiliki kebutuhan kepemilikan yang berbeda.
Paksa container berjalan sebagai pengguna Anda:
Atau sesuaikan izin direktori host Anda agar sesuai dengan ekspektasi container. Pendekatan container lebih baik untuk pengembangan, sementara memperbaiki izin host lebih cocok untuk penerapan produksi.
Periksa log container ketika ada masalah — biasanya log memberi tahu Anda secara jelas letak masalahnya.
Tingkat Lanjut: Fitur Mosquitto Pro Edition
Mosquitto open-source mencakup sebagian besar use case, tetapi lingkungan enterprise memerlukan fitur yang hanya tersedia di Pro Edition.
Manajemen pengguna berbasis peran memungkinkan Anda mendefinisikan izin granular untuk berbagai grup pengguna. Alih-alih mengelola akses pengguna satu per satu, Anda membuat peran seperti "sensor-readers", "actuator-controllers", atau "admin-users" dan menetapkan izin ke seluruh peran. Pengguna mewarisi izin dari peran yang ditugaskan, sehingga lebih mudah mengelola akses di ratusan atau ribuan perangkat.
Anda dapat membatasi akses berdasarkan pola topik, rentang IP, atau jendela waktu. Ini jauh lebih baik daripada mengonfigurasi file ACL secara manual saat Anda mengelola deployment IoT yang kompleks dengan kebutuhan keamanan berbeda-beda.
Opsi autentikasi lanjutan melampaui kombinasi nama pengguna/kata sandi sederhana. Autentikasi token JWT terintegrasi dengan penyedia identitas yang ada seperti Auth0, Okta, atau sistem SSO perusahaan Anda. Integrasi LDAP terhubung langsung ke Active Directory atau layanan direktori enterprise lainnya.
Inspeksi dan pemantauan mendalam memberi Anda visibilitas waktu nyata atas aliran pesan, pola koneksi, dan kinerja broker. Pro Edition menyertakan dashboard bawaan yang menampilkan klien mana yang mengonsumsi bandwidth terbanyak, topik mana dengan laju pesan tertinggi, dan di mana bottleneck terbentuk.
Anda mendapatkan metrik terperinci tentang latensi pesan, kedalaman antrean, dan pola perilaku klien. Data ini membantu Anda mengoptimalkan struktur topik dan mengidentifikasi klien bermasalah sebelum memengaruhi seluruh sistem.
Integrasi basis data dan layanan cloud menghilangkan kebutuhan aplikasi bridge kustom. Pro Edition dapat meneruskan pesan secara otomatis ke PostgreSQL, MongoDB, InfluxDB, AWS IoT Core, Azure IoT Hub, atau Google Cloud IoT. Anda mendefinisikan aturan perutean yang menentukan pesan mana pergi ke mana berdasarkan pola topik, konten pesan, atau metadata klien.
Antrean persisten menangani skenario volume tinggi saat persistensi standar Mosquitto tidak memadai. Pro Edition dapat melakukan buffer jutaan pesan untuk klien offline dan mendistribusikan beban di beberapa instance broker. Termasuk manajemen antrean otomatis yang mencegah kehabisan memori dan mempertahankan jaminan urutan pesan.
Dukungan clustering memungkinkan Anda menjalankan beberapa instance broker yang berbagi beban pesan dan menyediakan perlindungan failover. Saat satu broker down, klien secara otomatis tersambung ke instance yang sehat tanpa kehilangan pesan atau langganan.
Pro Edition masuk akal ketika Anda memerlukan keandalan dan fitur manajemen tingkat enterprise yang akan memakan waktu berbulan-bulan jika dibangun sendiri.
Kelebihan dan Kekurangan Menggunakan Mosquitto di Docker
Docker memudahkan deployment, tetapi bukan solusi sempurna untuk setiap skenario.
Kelebihan
mosquittoke mesin lain, jalankan perintah Docker yang sama, dan Anda kembali online. Pindah antar penyedia cloud atau upgrade hardware menjadi sesederhana transfer file.Kekurangan
Docker tidak selalu tanpa cela.
Docker unggul saat Anda membutuhkan deployment yang konsisten dan pengelolaan mudah di berbagai lingkungan.
Kesimpulan
Menjalankan Mosquitto di Docker memberi Anda broker MQTT andal yang bekerja konsisten di semua lingkungan. Baik Anda membuat prototipe perangkat IoT, membangun sistem automasi rumah, atau menghubungkan sensor di lingkungan pengembangan, Docker menghilangkan kerumitan setup dan memungkinkan Anda fokus pada proyek inti.
Jika Anda berencana membawa Mosquitto ke produksi, ingat hal ini:
mosquitto_passwd, konfigurasikan enkripsi TLS dengan sertifikat yang tepatBroker MQTT yang tidak diamankan menjadi pintu terbuka bagi penyerang untuk memantau komunikasi perangkat atau menyuntikkan perintah berbahaya.
Untuk deployment enterprise yang membutuhkan fitur lanjutan seperti kontrol akses berbasis peran, clustering, atau integrasi LDAP, Mosquitto Pro Edition menyediakan alat manajemen dan skalabilitas yang melampaui versi open-source.
Siap meningkatkan kemampuan Docker dan Kubernetes Anda? Daftar di jalur keterampilan Containerization and Virtualization with Docker and Kubernetes untuk membangun keterampilan relevan dan dilirik perekrut.