Last chance! 50% off DataCamp Premium
Sale ends in
शुरुआत से एक MQTT ब्रोकर्स सेट करना घंटों की कॉन्फ़िगरेशन और ट्रबलशूटिंग नहीं लेना चाहिए।
Eclipse Mosquitto एक ओपन-सोर्स MQTT ब्रोकर्स है जो MQTT v5, 3.1.1, और 3.1 प्रोटोकॉल लागू करता है, जिससे यह IoT डिवाइस, होम ऑटोमेशन सिस्टम, क्लाउड एप्लिकेशन, और किसी भी मैसेज-ड्रिवन आर्किटेक्चर के लिए उपयुक्त बनता है। लेकिन Mosquitto को सीधे अपने सिस्टम पर इंस्टॉल और कॉन्फ़िगर करना अक्सर डिपेंडेंसी कॉन्फ्लिक्ट, परमिशन समस्याओं और प्लेटफ़ॉर्म-विशिष्ट झंझटों की ओर ले जाता है, जो आपका डेवलपमेंट समय खा जाते हैं। आप अपनी असली एप्लिकेशन बनाने के बजाय सेटअप से लड़ने में अधिक समय बिता देते हैं।
Docker इन सिरदर्दों को दूर करता है, क्योंकि यह किसी भी प्लेटफ़ॉर्म पर Mosquitto चलाने के लिए एक सुसंगत, आइसोलेटेड वातावरण प्रदान करता है। आप मिनटों में एक पूर्ण रूप से कार्यात्मक MQTT ब्रोकर्स चला सकते हैं, जिसमें कस्टम कॉन्फ़िगरेशन, प्रमाणीकरण और परसिस्टेंस शामिल हो।
इस गाइड में, मैं आपको Docker और Docker Compose का उपयोग करके Eclipse Mosquitto को डिप्लॉय करने, प्रमाणीकरण और लॉगिंग कॉन्फ़िगर करने, डेटा परसिस्टेंस सेट करने, और वास्तविक MQTT क्लाइंट्स के साथ अपने ब्रोकर्स का परीक्षण करने के चरणों से परिचित कराऊंगा।
क्या आप Docker में बिल्कुल नए हैं? मैं सलाह दूंगा कि आप हमारी Introduction to Docker कोर्स से शुरुआत करें ताकि आप बुनियादी बातें समझ सकें।
जब आपको केवल डिवाइसों के बीच तेज़, विश्वसनीय संचार चाहिए, तो भारी मैसेजिंग सिस्टम की जरूरत नहीं होती।
MQTT एक लाइटवेट पब्लिश-सब्सक्राइब प्रोटोकॉल है, जिसे सीमित बैंडविड्थ और उच्च विश्वसनीयता वाली परिस्थितियों के लिए डिज़ाइन किया गया है। सोचें IoT सेंसर, मोबाइल ऐप्स, या कोई भी परिदृश्य जहाँ डिवाइसों को बिना लगातार पोलिंग के छोटे संदेशों का तेज़ी से आदान-प्रदान करना होता है।
Mosquitto प्रकाशकों और ग्राहकों के बीच—यानी ब्रोकर्स—के रूप में मध्यस्थ का काम करता है।
पब्लिशर्स विशिष्ट टॉपिक्स पर संदेश भेजते हैं। सब्सक्राइबर्स उन टॉपिक्स को सुनते हैं। Mosquitto रूटिंग संभालता है, यह सुनिश्चित करते हुए कि संदेश सही जगह पहुँचें—बिना इस आवश्यकता के कि पब्लिशर्स और सब्सक्राइबर्स एक-दूसरे के बारे में जानें।
यहाँ देखें कि Docker Mosquitto सेटअप को और बेहतर क्यों बनाता है:
Mosquitto दो रूपों में आता है: ओपन-सोर्स वर्ज़न (जो अधिकांश उपयोग मामलों को संभालता है) और Cedalo का कमर्शियल Pro Edition, जिसमें क्लस्टरिंग और उन्नत सुरक्षा जैसी सुविधाएँ हैं। अधिकांश प्रोजेक्ट्स के लिए ओपन-सोर्स वर्ज़न आपकी सभी जरूरतें पूरी कर देता है।
अब मैं प्रीरिक्विज़िट्स पर जाऊँगा और फिर हम इंस्टॉल करने में उतरेंगे।
Mosquitto डिप्लॉय करने से पहले आपके सिस्टम पर Docker चलना चाहिए।
Docker Desktop Windows और macOS उपयोगकर्ताओं के लिए सबसे अच्छा काम करता है क्योंकि इसमें एक ही पैकेज में आपको जो चाहिए सब शामिल होता है। Linux उपयोगकर्ता Docker CLI सीधे अपने पैकेज मैनेजर से या Docker के आधिकारिक रिपॉजिटरी से इंस्टॉल कर सकते हैं।
Docker Compose अनिवार्य नहीं है, लेकिन यह मल्टी-कंटेनर सेटअप्स को मैनेज करना काफी आसान बना देता है। अधिकांश Docker Desktop इंस्टॉलेशन में डिफ़ॉल्ट रूप से Compose शामिल होता है। यदि आप Linux पर हैं, तो आपको इसे अलग से इंस्टॉल करना पड़ सकता है।
आपको बुनियादी कमांड-लाइन कौशल भी चाहिए—कुछ खास नहीं, बस कमांड चलाने, डायरेक्टरी नेविगेट करने और टेक्स्ट फाइलें एडिट करने की क्षमता।
mosquitto docker चलाने के लिए तीन कदम हैं: डायरेक्टरी बनाएँ, कंटेनर चलाएँ, और वैकल्पिक रूप से आसान प्रबंधन के लिए Docker Compose सेट करें।
Mosquitto को अपनी कॉन्फ़िगरेशन, डेटा और लॉग्स के लिए सुव्यवस्थित स्टोरेज चाहिए।
शुरू करने के लिए इन्हें बनाएँ:
mkdir mosquitto-docker
cd mosquitto-docker
mkdir config data logs
यह आपको Mosquitto की कॉन्फ़िगरेशन फाइलों, परसिस्टेंट डेटा और लॉग आउटपुट के लिए व्यवस्थित फोल्डर्स देता है।
हर डायरेक्टरी का काम यह है:
/mosquitto/config में mosquitto.conf और कोई भी अतिरिक्त कॉन्फ़िगरेशन फाइलें स्टोर होती हैं/mosquitto/data परसिस्टेंट मैसेज डेटा और सब्सक्रिप्शन जानकारी रखता है/mosquitto/log में Mosquitto की लॉग फाइलें डिबगिंग और मॉनिटरिंग के लिए रहती हैंये डायरेक्टरी Docker कंटेनर के अंदर वॉल्यूम्स के रूप में माउंट होती हैं, ताकि आपके सेटिंग्स और डेटा कंटेनर रिस्टार्ट्स के बाद भी सुरक्षित रहें।
बेसिक Docker कमांड सही पोर्ट मैपिंग और वॉल्यूम माउंट्स के साथ Mosquitto को चलाता है।
docker run -d \
--name mosquitto \
-p 1883:1883 \
-v $(pwd)/mosquitto/config:/mosquitto/config \
-v $(pwd)/mosquitto/data:/mosquitto/data \
-v $(pwd)/mosquitto/log:/mosquitto/log \
eclipse-mosquitto:latest

छवि 1 - Docker के साथ Mosquitto चलाना
इन फ्लैग्स का संक्षिप्त विवरण:
-d कंटेनर को बैकग्राउंड (डिटैच्ड मोड) में चलाता है--name mosquitto कंटेनर को आसान संदर्भ के लिए एक फ्रेंडली नाम देता है-p 1883:1883 आपके होस्ट के पोर्ट 1883 को कंटेनर के पोर्ट 1883 से मैप करता है-v लोकल डायरेक्टरीज़ को कंटेनर के अंदर वॉल्यूम्स के रूप में माउंट करता हैMosquitto 2.0+ डिफ़ॉल्ट रूप से लोकल-ओनली मोड में चलता है। इसका मतलब है कि यह केवल localhost से कनेक्शंस स्वीकार करता है जब तक कि आप अलग से कॉन्फ़िगर न करें। बाहरी कनेक्शंस की अनुमति देने के लिए आपको एक कॉन्फ़िगरेशन फाइल बनानी होगी।
Mosquitto docker compose इंस्टॉलेशन को मैनेज करना बहुत सरल बना देता है, खासकर जब आप कई सर्विसेज़ चला रहे हों।
एक docker-compose.yml फाइल बनाएँ और नीचे दी गई सामग्री पेस्ट करें:
services:
mosquitto:
image: eclipse-mosquitto:latest
container_name: mosquitto
restart: unless-stopped
ports:
- "1883:1883" # MQTT
- "8883:8883" # MQTTS (secure)
- "9001:9001" # WebSockets
volumes:
- ./mosquitto/config:/mosquitto/config
- ./mosquitto/data:/mosquitto/data
- ./mosquitto/log:/mosquitto/log
इसे इस कमांड से शुरू करें:
docker-compose up -d

छवि 2 - Docker Compose के साथ Mosquitto चलाना
वॉल्यूम मैपिंग्स Docker कमांड की तरह ही काम करती हैं, लेकिन Compose जटिलता संभाल लेता है। पोर्ट कॉन्फ़िगरेशन सभी सामान्य MQTT प्रोटोकॉल कवर करता है: स्टैंडर्ड MQTT (1883), सुरक्षित MQTTS (8883), और WebSocket कनेक्शंस (9001)।
मल्टी-सर्विस सेटअप्स में Compose सचमुच चमकता है। उदाहरण के लिए, यदि आप Mosquitto के साथ Home Assistant, Node-RED, या अन्य IoT टूल्स चला रहे हैं, तो आप सब कुछ एक ही फाइल में परिभाषित कर सकते हैं और सभी सर्विसेज़ को साथ में शुरू कर सकते हैं।
अब आगे कॉन्फ़िगरेशन को और गहराई से देखते हैं।
क्या उन्नत Docker अवधारणाएँ आपको भ्रमित करती हैं? हमारा Intermediate Docker कोर्स बुनियाद से आगे जाकर चीज़ें समझाता है।
Mosquitto बॉक्स से बाहर बाहरी कनेक्शंस स्वीकार नहीं करेगा, इसके लिए आपको एक कॉन्फ़िगरेशन फाइल चाहिए।
अपनी mosquitto/config डायरेक्टरी में एक mosquitto.conf फाइल बनाएँ और निम्नलिखित जोड़ें:
# Basic listener configuration
listener 1883
allow_anonymous true
# WebSocket listener
listener 9001
protocol websockets
allow_anonymous true
# Persistence
persistence true
persistence_location /mosquitto/data/
# Logging
log_dest file /mosquitto/log/mosquitto.log
log_type error
log_type warning
log_type notice
log_type information
allow_anonymous true सेटिंग क्लाइंट्स को बिना क्रेडेंशियल्स के कनेक्ट होने देती है। यह डेवलपमेंट या इंटरनल नेटवर्क्स के लिए ठीक है, लेकिन प्रोडक्शन वातावरण में आपको इसे अक्षम करना चाहिए। जब आप allow_anonymous false सेट करते हैं, तो हर क्लाइंट को यूज़रनेम और पासवर्ड से ऑथेंटिकेट करना होगा।
पोर्ट 9001 पर WebSocket लिस्नर ब्राउज़र-आधारित MQTT क्लाइंट्स को सक्षम करता है। वेब एप्लिकेशन Paho MQTT जैसी जावास्क्रिप्ट लाइब्रेरी का उपयोग करके सीधे आपके ब्रोकर्स से कनेक्ट हो सकते हैं।
प्रमाणीकरण के लिए एक पासवर्ड फाइल बनानी और अपनी कॉन्फ़िगरेशन अपडेट करनी पड़ती है।
कंटेनर के अंदर एक पासवर्ड फाइल जनरेट करें:
docker exec -it mosquitto mosquitto_passwd -c /mosquitto/config/passwd username

छवि 3 - Mosquitto प्रमाणीकरण
यह एक नई पासवर्ड फाइल बनाता है और आपको पासवर्ड दर्ज करने के लिए कहता है। अतिरिक्त उपयोगकर्ताओं के लिए, -c फ्लैग हटा दें:
docker exec -it mosquitto mosquitto_passwd /mosquitto/config/passwd another_user
अब, अपने mosquitto.conf को प्रमाणीकरण अनिवार्य करने के लिए अपडेट करें:
# Disable anonymous access
allow_anonymous false
# Point to password file
password_file /mosquitto/config/passwd
# Basic MQTT listener
listener 1883
# WebSocket listener
listener 9001
protocol websockets
# Persistence
persistence true
persistence_location /mosquitto/data/
# Logging
log_dest file /mosquitto/log/mosquitto.log
log_type error
log_type warning
log_type notice
log_type information
पासवर्ड फाइल आपके माउंटेड कॉन्फ़िग वॉल्यूम में स्टोर होती है, इसलिए यह कंटेनर रिस्टार्ट्स के बीच भी बनी रहती है।
TLS एन्क्रिप्शन आपके MQTT ट्रैफ़िक को सूँघे जाने और छेड़छाड़ से बचाता है।
इन लाइनों को अपनी mosquitto.conf में जोड़ें:
# Secure MQTT listener
listener 8883
cafile /mosquitto/config/ca.crt
certfile /mosquitto/config/server.crt
keyfile /mosquitto/config/server.key
# Secure WebSocket listener
listener 9002
protocol websockets
cafile /mosquitto/config/ca.crt
certfile /mosquitto/config/server.crt
keyfile /mosquitto/config/server.key
आपको अपने डोमेन के लिए SSL सर्टिफिकेट प्राप्त करने होंगे। Let's Encrypt मुफ्त सर्टिफिकेट प्रदान करता है, या आप Caddy Server जैसे रिवर्स प्रॉक्सी का उपयोग कर सकते हैं जो सर्टिफिकेट जेनरेशन को स्वतः संभाल लेते हैं। अपने सर्टिफिकेट फाइलों को mosquitto/config डायरेक्टरी में रखें ताकि वे कंटेनर के अंदर उपलब्ध रहें।
परसिस्टेंस संदेशों और सब्सक्रिप्शन्स को डिस्क पर सेव करता है, जबकि सही लॉगिंग आपको कनेक्शन समस्याओं को डिबग करने में मदद करती है।
आप mosquitto.conf में परसिस्टेंस इस तरह कॉन्फ़िगर कर सकते हैं:
# 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 1d
लॉगिंग के लिए, इस तरह डिटेल्ड लॉगिंग सेट कर सकते हैं:
# 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 true
log_type विकल्प आपको यह फ़िल्टर करने देते हैं कि क्या लॉग होना चाहिए:
error और warning प्रोडक्शन मॉनिटरिंग के लिएnotice और information सामान्य ऑपरेशनल इनसाइट्स के लिएdebug कनेक्शन समस्याओं की ट्रबलशूटिंग के लिएआपके वॉल्यूम माउंट्स यह सुनिश्चित करते हैं कि परसिस्टेंस डेटा और लॉग्स कंटेनर रिस्टार्ट्स के बाद भी बने रहें। डेटा डायरेक्टरी सभी परसिस्टेंट संदेश और सब्सक्रिप्शन जानकारी स्टोर करती है, जबकि लॉग डायरेक्टरी होस्ट सिस्टम से सुलभ डिबगिंग जानकारी रखती है।
कॉन्फ़िगरेशन फाइलें आपको कंटेनर रीबिल्ड किए बिना Mosquitto के व्यवहार पर पूरा नियंत्रण देती हैं।
जब तक आप यह सत्यापित नहीं कर लेते कि क्लाइंट कनेक्ट होकर संदेशों का आदान-प्रदान कर सकते हैं, तब तक आपका ब्रोकर्स उपयोगी नहीं है।
mosquitto_pub और mosquitto_sub कमांड-लाइन टूल्स आपके ब्रोकर्स को टेस्ट करने का सबसे तेज़ तरीका प्रदान करते हैं।
अपने प्लेटफ़ॉर्म के अनुसार Mosquitto इंस्टॉल करके शुरू करें:
sudo apt-get install mosquitto-clientsbrew install mosquittoआइए प्रमाणीकरण के बिना इसे टेस्ट करना शुरू करें। आपको दो टर्मिनल विंडो या टैब चाहिए होंगे। ये कमांड अलग-अलग सेशन में चलाएँ:
# Subscribe to a topic (run this first)
mosquitto_sub -h localhost -p 1883 -t test/topic
# Publish a message (run in another terminal)
mosquitto_pub -h localhost -p 1883 -t test/topic -m "Hello MQTT"
पब्लिशिंग टैब में, आप यह देखेंगे:

छवि 4 - संदेश पब्लिश करना
और सब्सक्राइब टैब में, आप तुरंत संदेश देखेंगे:

छवि 5 - Mosquitto टॉपिक को सब्सक्राइब करना
यदि प्रमाणीकरण आवश्यक है, तो कमांड काफ़ी समान हैं—बस यूज़रनेम और पासवर्ड पास करना होगा:
# Subscribe with username and password
mosquitto_sub -h localhost -p 1883 -t test/topic -u username -P password
# Publish with credentials
mosquitto_pub -h localhost -p 1883 -t test/topic -m "Authenticated message" -u username -P password
यदि आप Mosquitto क्लाइंट्स को लोकल रूप से इंस्टॉल नहीं करना चाहते, तो उन्हें अपने Docker कंटेनर के अंदर चलाएँ:
# Subscribe using the container
docker exec -it mosquitto mosquitto_sub -h localhost -t test/topic
# Publish using the container
docker exec -it mosquitto mosquitto_pub -h localhost -t test/topic -m "Container message"
पब्लिशिंग टैब में आप यह देखेंगे:

छवि 6 - बिना ऑथ के संदेश पब्लिश करना
और सब्सक्राइब टैब में, आप संदेश देखेंगे:

छवि 7 - बिना ऑथ के Mosquitto टॉपिक को सब्सक्राइब करना
GUI क्लाइंट्स जटिल परिदृश्यों का परीक्षण करने और चल रहे मैसेज ट्रैफ़िक की मॉनिटरिंग को आसान बनाते हैं।
MQTT Explorer टॉपिक्स ब्राउज़ करने और संदेश भेजने के लिए एक साफ़ इंटरफ़ेस प्रदान करता है। localhost:1883 से कनेक्ट करें और आप सभी सक्रिय टॉपिक्स का ट्री व्यू देखेंगे। यह मैसेज फ्लो को डिबग करने और आपके टॉपिक स्ट्रक्चर को समझने के लिए बिल्कुल सही है।

छवि 8 - MQTT Explorer ऐप
MQTTX स्क्रिप्टिंग और बल्क मैसेज सेंडिंग जैसी और उन्नत सुविधाएँ प्रदान करता है। दोनों क्लाइंट्स प्रमाणीकरण, TLS कनेक्शंस और WebSocket प्रोटोकॉल्स को सपोर्ट करते हैं।
Home Assistant उपयोगकर्ता डेवलपर टूल्स से सीधे MQTT इंटीग्रेशन का परीक्षण कर सकते हैं। MQTT इंटीग्रेशन में अपने ब्रोकर्स का विवरण जोड़ें और बिल्ट-इन पब्लिश/सब्सक्राइब इंटरफ़ेस का उपयोग करें।
प्रोग्रामेटिक परीक्षण के लिए, Paho MQTT Python क्लाइंट अच्छा काम करता है:
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
print(f"Connected with result code {rc}")
client.subscribe("test/topic")
def on_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()
इस स्क्रिप्ट को एक टर्मिनल में चलाएँ, फिर दूसरे टर्मिनल या GUI क्लाइंट से संदेश पब्लिश करें। स्क्रिप्ट कोई भी प्राप्त संदेश प्रिंट करेगी, जिससे पुष्टि होगी कि आपका ब्रोकर्स ट्रैफ़िक को सही तरह रूट कर रहा है।
संदेश पब्लिश करने के लिए आपको यह करना होगा:

छवि 9 - Python उदाहरण के लिए संदेश पब्लिश करना
और जिस टर्मिनल सेशन में Python स्क्रिप्ट चल रही है, उसमें आप यह देखेंगे:

छवि 10 - Python उदाहरण के लिए संदेश प्राप्त करना
काम कर रही पब्लिश और सब्सक्राइब ऑपरेशंस का मतलब है कि आपका Mosquitto Docker सेटअप वास्तविक एप्लिकेशनों के लिए तैयार है।
Docker में Home Assistant के साथ Mosquitto चलाने से बिना किसी नेटवर्क कॉन्फ़िगरेशन झंझट के एक पूर्ण IoT मैसेजिंग हब बन जाता है।
Docker Compose इसे सरल बना देता है। दोनों सर्विसेज़ Docker के इंटरनल नेटवर्क के माध्यम से बिना अतिरिक्त पोर्ट एक्सपोज़ किए या IP पतों से जूझे बिना संचार कर सकती हैं।
यहाँ एक पूर्ण docker-compose.yml है जो दोनों सर्विसेज़ चलाता है:
services:
mosquitto:
image: eclipse-mosquitto:latest
container_name: mosquitto
restart: unless-stopped
ports:
- "1883:1883"
- "9001:9001"
volumes:
- ./mosquitto/config:/mosquitto/config
- ./mosquitto/data:/mosquitto/data
- ./mosquitto/log:/mosquitto/log
networks:
- homeassistant
homeassistant:
image: ghcr.io/home-assistant/home-assistant:stable
container_name: homeassistant
restart: unless-stopped
ports:
- "8123:8123"
volumes:
- ./homeassistant:/config
- /etc/localtime:/etc/localtime:ro
networks:
- homeassistant
depends_on:
- mosquitto
networks:
homeassistant:
driver: bridge
networks सेक्शन एक साझा नेटवर्क बनाता है जहाँ दोनों कंटेनर नाम से एक-दूसरे तक पहुँच सकते हैं। Home Assistant mosquitto:1883 से कनेक्ट कर सकता है, localhost या IP पतों का उपयोग करने की ज़रूरत नहीं।
दोनों सर्विसेज़ को इस कमांड से शुरू करें:
docker-compose up -d
अगला कदम, Home Assistant के वेब इंटरफ़ेस से MQTT इंटीग्रेशन कॉन्फ़िगर करें। Settings > Devices & Services > Add Integration पर जाएँ, फिर "MQTT" खोजें।
ये कनेक्शन विवरण दर्ज करें:
mosquitto (कंटेनर का नाम)1883Submit पर क्लिक करें और Home Assistant कनेक्शन टेस्ट करेगा। सफल होने पर, आप इंटीग्रेशंस सूची में MQTT देखेंगे।

छवि 11 - Homelab के साथ Mosquitto कॉन्फ़िगरेशन
अब आप MQTT डिवाइस जोड़ सकते हैं, ऑटोमेशन बना सकते हैं जो संदेश प्रकाशित करते हैं, और टॉपिक्स के माध्यम से सेंसर डेटा मॉनिटर कर सकते हैं। Home Assistant का MQTT इंटीग्रेशन संगत डिवाइसों के लिए स्वतः डिवाइस डिस्कवरी संभालता है।
अधिकांश docker mosquitto समस्याएँ परमिशन, पोर्ट्स, या कॉन्फ़िगरेशन गलतियों तक सिमटती हैं जो कनेक्शन ब्लॉक करती हैं।
ऐसा तब होता है जब कंटेनर आपके होस्ट डायरेक्टरीज़ में लिख नहीं पाता। आपको लॉग्स में "Permission denied" या "Cannot create directory" जैसे एरर संदेश दिखेंगे।
इसे अपनी डायरेक्टरीज़ पर सही ओनरशिप सेट करके ठीक करें:
sudo chown -R 1883:1883 mosquitto/
Mosquitto कंटेनर यूज़र ID 1883 के रूप में चलता है, इसलिए आपके होस्ट डायरेक्टरीज़ को मेल खाना चाहिए। कुछ सिस्टम्स पर, आपको पहले यूज़र बनाना पड़ सकता है:
sudo useradd -u 1883 mosquitto
sudo chown -R mosquitto:mosquitto mosquitto/
यह तब होता है जब कुछ और पोर्ट 1883 का उपयोग कर रहा होता है। देखें उस पोर्ट पर क्या चल रहा है:
# Linux/macOS
sudo lsof -i :1883
# Windows
netstat -an | findstr :1883
यदि कोई अन्य सर्विस पोर्ट का उपयोग कर रही है, तो या तो उसे रोकें या Mosquitto को किसी अन्य पोर्ट पर मैप करें:
docker run -p 1884:1883 eclipse-mosquitto:latest
यह तब भी होता है जब आपका कंटेनर चल रहा हो। Mosquitto 2.0+ डिफ़ॉल्ट रूप से केवल localhost से कनेक्शंस स्वीकार करता है, जब तक कि आप अलग से कॉन्फ़िगर न करें।
बाहरी कनेक्शंस की अनुमति देने के लिए एक बेसिक mosquitto.conf फाइल बनाएँ:
listener 1883
allow_anonymous true
इस फाइल को अपनी mosquitto/config डायरेक्टरी में रखें और कंटेनर रीस्टार्ट करें।
इसका मतलब है कि आपके वॉल्यूम माउंट्स सही से काम नहीं कर रहे। जाँचें कि आपके पाथ्स एब्सोल्यूट हों और डायरेक्टरीज़ मौजूद हों:
# Wrong - relative path might not work
-v ./mosquitto/config:/mosquitto/config
# Better - absolute path
-v $(pwd)/mosquitto/config:/mosquitto/config
कंटेनर शुरू करने से पहले डायरेक्टरीज़ बना लें:
mkdir -p mosquitto/{config,data,log}
यह लगातार परमिशन समस्याएँ पैदा करेंगे। कंटेनर यूज़र 1883 के रूप में चलने की उम्मीद करता है, लेकिन आपके होस्ट सिस्टम पर अलग ओनरशिप आवश्यकताएँ हो सकती हैं।
कंटेनर को आपके यूज़र के रूप में चलाने के लिए बाध्य करें:
docker run --user $(id -u):$(id -g) eclipse-mosquitto:latest
या अपने होस्ट डायरेक्टरी परमिशन को कंटेनर की अपेक्षाओं से मेल कराएँ। डेवलपमेंट के लिए कंटेनर वाला तरीका बेहतर काम करता है, जबकि प्रोडक्शन डिप्लॉयमेंट्स के लिए होस्ट परमिशन ठीक करना बेहतर रहता है।
जब चीज़ें काम नहीं कर रहीं, तो कंटेनर लॉग्स देखें—वे आम तौर पर आपको ठीक-ठीक बताते हैं कि समस्या क्या है।
ओपन-सोर्स Mosquitto अधिकांश उपयोग मामलों को कवर करता है, लेकिन एंटरप्राइज़ वातावरण को वे फीचर्स चाहिए होते हैं जो केवल Pro Edition देता है।
रोल-आधारित यूज़र प्रबंधन आपको अलग-अलग यूज़र समूहों के लिए सूक्ष्म परमिशन परिभाषित करने देता है। व्यक्तिगत यूज़र एक्सेस मैनेज करने की बजाय, आप "sensor-readers," "actuator-controllers," या "admin-users" जैसे रोल बनाते हैं और पूरे रोल्स को परमिशन असाइन करते हैं। यूज़र्स अपने असाइन किए गए रोल्स की परमिशन विरासत में लेते हैं, जिससे सैकड़ों या हज़ारों डिवाइसों में एक्सेस मैनेज करना आसान हो जाता है।
आप टॉपिक पैटर्न्स, IP रेंजेज़, या टाइम विंडोज़ के आधार पर एक्सेस सीमित कर सकते हैं। विभिन्न सुरक्षा आवश्यकताओं वाले जटिल IoT डिप्लॉयमेंट्स मैनेज करते समय यह मैन्युअली ACL फाइलें कॉन्फ़िगर करने से बेहतर है।
उन्नत प्रमाणीकरण विकल्प साधारण यूज़रनेम/पासवर्ड से आगे जाते हैं। JWT टोकन ऑथेंटिकेशन मौजूदा आइडेंटिटी प्रोवाइडर्स जैसे Auth0, Okta, या आपकी कंपनी के SSO सिस्टम से एकीकृत होता है। LDAP इंटीग्रेशन सीधे Active Directory या अन्य एंटरप्राइज़ डायरेक्टरी सेवाओं से जुड़ता है।
डीप इंस्पेक्शन और मॉनिटरिंग आपको मैसेज फ्लो, कनेक्शन पैटर्न, और ब्रोकर्स प्रदर्शन में रियल-टाइम विजिबिलिटी देता है। Pro Edition में बिल्ट-इन डैशबोर्ड्स शामिल हैं जो दिखाते हैं कि कौन से क्लाइंट्स सबसे अधिक बैंडविड्थ खा रहे हैं, किन टॉपिक्स पर सबसे अधिक मैसेज रेट है, और कहाँ बॉटलनेक्स बन रहे हैं।
आपको मैसेज लेटेंसी, क्यू डेप्थ्स, और क्लाइंट बिहेवियर पैटर्न्स पर विस्तृत मेट्रिक्स मिलते हैं। यह डेटा आपको टॉपिक स्ट्रक्चर्स को ऑप्टिमाइज़ करने और समस्याग्रस्त क्लाइंट्स की पहचान करने में मदद करता है—उनके पूरे सिस्टम पर असर डालने से पहले।
डेटाबेस और क्लाउड सर्विस इंटीग्रेशन कस्टम ब्रिज एप्लिकेशनों की आवश्यकता समाप्त कर देते हैं। Pro Edition स्वतः PostgreSQL, MongoDB, InfluxDB, AWS IoT Core, Azure IoT Hub, या Google Cloud IoT को संदेश फ़ॉरवर्ड कर सकता है। आप रूटिंग नियम परिभाषित करते हैं जो टॉपिक पैटर्न्स, संदेश सामग्री, या क्लाइंट मेटाडेटा के आधार पर तय करते हैं कि कौन से संदेश कहाँ जाएँ।
परसिस्टेंट क्यूज़ हाई-वॉल्यूम परिदृश्यों को संभालती हैं जहाँ स्टैंडर्ड Mosquitto परसिस्टेंस पर्याप्त नहीं होती। Pro Edition ऑफ़लाइन क्लाइंट्स के लिए लाखों संदेश बफ़र कर सकता है और लोड को कई ब्रोकर्स इंस्टेंसेज़ में वितरित कर सकता है। इसमें ऑटोमैटिक क्यू मैनेजमेंट शामिल है, जो मेमोरी समाप्त होने से रोकता है और संदेश ऑर्डरिंग की गारंटी बनाए रखता है।
क्लस्टरिंग सपोर्ट आपको कई ब्रोकर्स इंस्टेंसेज़ चलाने देता है जो मैसेज लोड साझा करते हैं और फेलओवर सुरक्षा प्रदान करते हैं। जब एक ब्रोकर्स डाउन हो जाता है, तो क्लाइंट्स संदेशों या सब्सक्रिप्शन्स को खोए बिना स्वतः स्वस्थ इंस्टेंसेज़ से फिर से कनेक्ट हो जाते हैं।
जब आपको एंटरप्राइज़-ग्रेड विश्वसनीयता और मैनेजमेंट फीचर्स चाहिए होते हैं—जिन्हें खुद बनाने में महीनों लग जाते—तब Pro Edition समझदारी है।
Docker डिप्लॉयमेंट को आसान बनाता है, लेकिन हर परिदृश्य के लिए यह परफेक्ट समाधान नहीं है।
mosquitto डायरेक्टरी को किसी दूसरी मशीन पर कॉपी करें, वही Docker कमांड चलाएँ, और आप फिर से ऑनलाइन हैं। क्लाउड प्रोवाइडर्स के बीच जाना या हार्डवेयर अपग्रेड करना एक साधारण फाइल ट्रांसफर बन जाता है।Docker पूरी तरह फायदेमंद नहीं है।
जब आपको विभिन्न वातावरणों में एकसमान डिप्लॉयमेंट और आसान मैनेजमेंट चाहिए होता है, तब Docker बाज़ी मारता है।
Docker में Mosquitto चलाने से आपको एक विश्वसनीय MQTT ब्रोकर्स मिलता है जो सभी वातावरणों में एकसमान रूप से काम करता है। चाहे आप IoT डिवाइसेज़ का प्रोटोटाइप बना रहे हों, होम ऑटोमेशन सिस्टम्स बना रहे हों, या डेवलपमेंट में सेंसर कनेक्ट कर रहे हों—Docker सेटअप की जटिलता हटाता है और आपको अपने असली प्रोजेक्ट पर ध्यान केंद्रित करने देता है।
यदि आप Mosquitto को प्रोडक्शन में ले जाने की योजना बना रहे हैं, तो यह याद रखें:
mosquitto_passwd के साथ प्रमाणीकरण सक्षम करें, उचित सर्टिफिकेट्स के साथ TLS एन्क्रिप्शन कॉन्फ़िगर करेंअसुरक्षित MQTT ब्रोकर्स हमलावरों के लिए डिवाइस कम्युनिकेशंस की जासूसी करने या दुर्भावनापूर्ण कमांड इंजेक्ट करने का खुला दरवाज़ा बन जाता है।
एंटरप्राइज़ डिप्लॉयमेंट्स के लिए जिन्हें रोल-आधारित एक्सेस कंट्रोल, क्लस्टरिंग, या LDAP इंटीग्रेशन जैसी उन्नत सुविधाएँ चाहिए, Mosquitto Pro Edition ओपन-सोर्स वर्ज़न से आगे जाकर आवश्यक मैनेजमेंट टूल्स और स्केलेबिलिटी प्रदान करता है।
क्या आप अपना Docker और Kubernetes गेम बेहतर करने के लिए तैयार हैं? हमारे Containerization and Virtualization with Docker and Kubernetes स्किल ट्रैक में नामांकित हों, प्रासंगिक कौशल बनाएं और नौकरी पाएं।
Docker क्रॉस-प्लेटफ़ॉर्म कंसिस्टेंसी प्रदान करता है और डिपेंडेंसी कॉन्फ्लिक्ट्स को समाप्त करता है जो नेटिव इंस्टॉलेशनों को परेशान करते हैं। आपका Mosquitto सेटअप Windows, macOS और Linux पर एक समान काम करता है—प्लेटफ़ॉर्म-विशिष्ट पैकेज खोजने की ज़रूरत नहीं। Docker वर्ज़न अपग्रेड और रोलबैक को भी सरल बनाता है—सिर्फ इमेज टैग बदलें और कंटेनर रीस्टार्ट करें। हालाँकि, हाई-थ्रूपुट परिदृश्यों में नेटिव इंस्टॉलेशन थोड़े बेहतर प्रदर्शन दे सकते हैं।
आप बिल्कुल docker run का उपयोग करके रेगुलर Docker कमांड्स के साथ Mosquitto चला सकते हैं। Docker Compose केवल मैनेजमेंट को आसान बनाता है, खासकर जब आप Mosquitto के साथ Home Assistant या Node-RED जैसी कई सर्विसेज़ चला रहे हों। यदि आप केवल Mosquitto अकेले चला रहे हैं, तो एक साधारण docker run कमांड पूरी तरह ठीक काम करता है।
उचित कॉन्फ़िगरेशन के साथ Mosquitto Docker प्रोडक्शन-रेडी हो सकता है। आपको अनाम एक्सेस अक्षम करना होगा, mosquitto_passwd के साथ प्रमाणीकरण सेट करना होगा, TLS एन्क्रिप्शन कॉन्फ़िगर करना होगा, और नेटवर्क एक्सेस को केवल विश्वसनीय क्लाइंट्स तक सीमित करना होगा। कंटेनर स्वयं कोई अतिरिक्त भेद्यता नहीं जोड़ता, लेकिन Mosquitto की कॉन्फ़िगरेशन और Docker वातावरण—दोनों को सुरक्षित करना आपकी ज़िम्मेदारी है।
Mosquitto 2.0+ डिफ़ॉल्ट रूप से लोकल-ओनली मोड में होता है, जो कंटेनर के अंदर केवल localhost से कनेक्शंस स्वीकार करता है। आपको listener 1883 और allow_anonymous true (टेस्टिंग के लिए) या उपयुक्त प्रमाणीकरण सेटिंग्स के साथ एक mosquitto.conf फाइल बनानी होगी। इस कॉन्फ़िग फाइल को अपनी माउंटेड /mosquitto/config डायरेक्टरी में रखें और कंटेनर रीस्टार्ट करें।
Mosquitto कंटेनर यूज़र ID 1883 के रूप में चलता है, लेकिन आपके होस्ट डायरेक्टरीज़ की ओनरशिप अलग हो सकती है। ओनरशिप ठीक करने के लिए sudo chown -R 1883:1883 mosquitto/ चलाएँ, या पहले sudo useradd -u 1883 mosquitto से mosquitto यूज़र बनाएं और फिर ओनरशिप बदलें। कुछ सिस्टम्स पर, आप कंटेनर को --user $(id -u):$(id -g) के साथ भी चला सकते हैं ताकि यह आपके होस्ट यूज़र से मेल खाए।
Top DataCamp Courses
कोर्स
कोर्स
लर्निंग पाथ