मुख्य सामग्री पर जाएं

Mosquitto Docker: Docker और Docker Compose के साथ Eclipse Mosquitto MQTT Broker कैसे सेट करें

Docker कंटेनरों का उपयोग करके प्रोडक्शन के लिए तैयार Mosquitto MQTT ब्रोकर्स को डिप्लॉय करने की चरण-दर-चरण गाइड। इसमें प्रमाणीकरण, TLS एन्क्रिप्शन, परसिस्टेंस कॉन्फ़िगरेशन, और Home Assistant के साथ इंटीग्रेशन शामिल है।
अपडेट किया गया 2 अक्टू॰ 2026  · 14 मि॰ पढ़ें

AI के साथ खोजें

ChatGPTClaudePerplexity

शुरुआत से एक 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 कोर्स से शुरुआत करें ताकि आप बुनियादी बातें समझ सकें।

Mosquitto क्या है और Docker में इसका उपयोग क्यों करें

जब आपको केवल डिवाइसों के बीच तेज़, विश्वसनीय संचार चाहिए, तो भारी मैसेजिंग सिस्टम की जरूरत नहीं होती।

MQTT एक लाइटवेट पब्लिश-सब्सक्राइब प्रोटोकॉल है, जिसे सीमित बैंडविड्थ और उच्च विश्वसनीयता वाली परिस्थितियों के लिए डिज़ाइन किया गया है। सोचें IoT सेंसर, मोबाइल ऐप्स, या कोई भी परिदृश्य जहाँ डिवाइसों को बिना लगातार पोलिंग के छोटे संदेशों का तेज़ी से आदान-प्रदान करना होता है।

Mosquitto प्रकाशकों और ग्राहकों के बीच—यानी ब्रोकर्स—के रूप में मध्यस्थ का काम करता है। 

पब्लिशर्स विशिष्ट टॉपिक्स पर संदेश भेजते हैं। सब्सक्राइबर्स उन टॉपिक्स को सुनते हैं। Mosquitto रूटिंग संभालता है, यह सुनिश्चित करते हुए कि संदेश सही जगह पहुँचें—बिना इस आवश्यकता के कि पब्लिशर्स और सब्सक्राइबर्स एक-दूसरे के बारे में जानें।

यहाँ देखें कि Docker Mosquitto सेटअप को और बेहतर क्यों बनाता है:

  • प्लेटफ़ॉर्म्स पर एक समान सेटअप: Windows, macOS, या Linux—Docker कंटेनर हर जगह एक ही तरह चलता है। न प्लेटफ़ॉर्म-विशिष्ट इंस्टॉलर खोजने पड़ते हैं, न ही डिपेंडेंसी कॉन्फ्लिक्ट्स से जूझना पड़ता है।
  • आसान वर्ज़न मैनेजमेंट: आप इमेज टैग्स का उपयोग करके विशेष 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 कमांड सही पोर्ट मैपिंग और वॉल्यूम माउंट्स के साथ 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

Image 1 - Running Mosquitto with Docker

छवि 1 - Docker के साथ Mosquitto चलाना

इन फ्लैग्स का संक्षिप्त विवरण:

  • -d कंटेनर को बैकग्राउंड (डिटैच्ड मोड) में चलाता है
  • --name mosquitto कंटेनर को आसान संदर्भ के लिए एक फ्रेंडली नाम देता है
  • -p 1883:1883 आपके होस्ट के पोर्ट 1883 को कंटेनर के पोर्ट 1883 से मैप करता है
  • -v लोकल डायरेक्टरीज़ को कंटेनर के अंदर वॉल्यूम्स के रूप में माउंट करता है

Mosquitto 2.0+ डिफ़ॉल्ट रूप से लोकल-ओनली मोड में चलता है। इसका मतलब है कि यह केवल localhost से कनेक्शंस स्वीकार करता है जब तक कि आप अलग से कॉन्फ़िगर न करें। बाहरी कनेक्शंस की अनुमति देने के लिए आपको एक कॉन्फ़िगरेशन फाइल बनानी होगी।

Docker Compose का उपयोग

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

Image 2 - Running Mosquitto with Docker Compose

छवि 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 बॉक्स से बाहर बाहरी कनेक्शंस स्वीकार नहीं करेगा, इसके लिए आपको एक कॉन्फ़िगरेशन फाइल चाहिए।

बेसिक कॉन्फ़िगरेशन (mosquitto.conf)

अपनी 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

Image 3 - Mosquitto authentication

छवि 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/SSL सक्षम करना

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_pub और mosquitto_sub कमांड-लाइन टूल्स आपके ब्रोकर्स को टेस्ट करने का सबसे तेज़ तरीका प्रदान करते हैं।

अपने प्लेटफ़ॉर्म के अनुसार Mosquitto इंस्टॉल करके शुरू करें:

  • Linux (Ubuntu/Debian): sudo apt-get install mosquitto-clients
  • macOS: brew install mosquitto
  • Windows: आधिकारिक Eclipse Mosquitto वेबसाइट से डाउनलोड करें या WSL का उपयोग करें

आइए प्रमाणीकरण के बिना इसे टेस्ट करना शुरू करें। आपको दो टर्मिनल विंडो या टैब चाहिए होंगे। ये कमांड अलग-अलग सेशन में चलाएँ:

# 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"

पब्लिशिंग टैब में, आप यह देखेंगे:

Image 4 - Publishing a message

छवि 4 - संदेश पब्लिश करना

और सब्सक्राइब टैब में, आप तुरंत संदेश देखेंगे:

Image 5 - Subscribing to a Mosquitto topic

छवि 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"

पब्लिशिंग टैब में आप यह देखेंगे:

Image 6 - Publishing a message without auth

छवि 6 - बिना ऑथ के संदेश पब्लिश करना

और सब्सक्राइब टैब में, आप संदेश देखेंगे:

Image 7 - Subscribing to a Mosquitto topic without auth

छवि 7 - बिना ऑथ के Mosquitto टॉपिक को सब्सक्राइब करना

MQTT क्लाइंट्स के साथ परीक्षण

GUI क्लाइंट्स जटिल परिदृश्यों का परीक्षण करने और चल रहे मैसेज ट्रैफ़िक की मॉनिटरिंग को आसान बनाते हैं।

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

Image 8 - MQTT Explorer app

छवि 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 क्लाइंट से संदेश पब्लिश करें। स्क्रिप्ट कोई भी प्राप्त संदेश प्रिंट करेगी, जिससे पुष्टि होगी कि आपका ब्रोकर्स ट्रैफ़िक को सही तरह रूट कर रहा है।

संदेश पब्लिश करने के लिए आपको यह करना होगा:

Image 9 - Publishing a message for the Python example

छवि 9 - Python उदाहरण के लिए संदेश पब्लिश करना

और जिस टर्मिनल सेशन में Python स्क्रिप्ट चल रही है, उसमें आप यह देखेंगे:

Image 10 - Receiving a message for the Python example

छवि 10 - Python उदाहरण के लिए संदेश प्राप्त करना

काम कर रही पब्लिश और सब्सक्राइब ऑपरेशंस का मतलब है कि आपका Mosquitto Docker सेटअप वास्तविक एप्लिकेशनों के लिए तैयार है।

Home Assistant के साथ 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 (कंटेनर का नाम)
  • पोर्ट: 1883
  • यूज़रनेम/पासवर्ड: यदि प्रमाणीकरण सक्षम है तो आपके क्रेडेंशियल्स
  • अन्य सेटिंग्स डिफ़ॉल्ट रहने दें

Submit पर क्लिक करें और Home Assistant कनेक्शन टेस्ट करेगा। सफल होने पर, आप इंटीग्रेशंस सूची में MQTT देखेंगे।

Image 11 - Mosquitto configuration with Homelab

छवि 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}

होस्ट और कंटेनर के बीच परस्पर विरोधी UID/GID

यह लगातार परमिशन समस्याएँ पैदा करेंगे। कंटेनर यूज़र 1883 के रूप में चलने की उम्मीद करता है, लेकिन आपके होस्ट सिस्टम पर अलग ओनरशिप आवश्यकताएँ हो सकती हैं।

कंटेनर को आपके यूज़र के रूप में चलाने के लिए बाध्य करें:

docker run --user $(id -u):$(id -g) eclipse-mosquitto:latest

या अपने होस्ट डायरेक्टरी परमिशन को कंटेनर की अपेक्षाओं से मेल कराएँ। डेवलपमेंट के लिए कंटेनर वाला तरीका बेहतर काम करता है, जबकि प्रोडक्शन डिप्लॉयमेंट्स के लिए होस्ट परमिशन ठीक करना बेहतर रहता है।

जब चीज़ें काम नहीं कर रहीं, तो कंटेनर लॉग्स देखें—वे आम तौर पर आपको ठीक-ठीक बताते हैं कि समस्या क्या है।

उन्नत: Mosquitto Pro Edition फीचर्स

ओपन-सोर्स 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 डिप्लॉयमेंट को आसान बनाता है, लेकिन हर परिदृश्य के लिए यह परफेक्ट समाधान नहीं है।

फायदे

  • क्रॉस-प्लेटफ़ॉर्म कंसिस्टेंसी OS-विशिष्ट इंस्टॉलेशनों के सिरदर्द दूर करती है। वही Docker कमांड Windows, macOS और Linux पर काम करता है—अलग-अलग पैकेज मैनेजर्स खोजने या डिपेंडेंसी कॉन्फ्लिक्ट्स से जूझने की ज़रूरत नहीं। आपका डेवलपमेंट सेटअप बिल्कुल प्रोडक्शन से मेल खाता है, जिसका मतलब है डिप्लॉय करते समय कम सरप्राइज़।
  • सरल वर्ज़न अपग्रेड्स इमेज टैग्स बदलकर हो जाते हैं। पुराने वर्ज़न को अनइंस्टॉल करने और उम्मीद करने के बजाय कि अपग्रेड आपकी कॉन्फ़िग न तोड़े, बस नई इमेज पुल करें और कंटेनर रीस्टार्ट करें। कुछ गलत होने पर रोलबैक करने में सेकंड्स लगते हैं।
  • आसान बैकअप और माइग्रेशन वॉल्यूम्स उपयोग करने से आता है। mosquitto डायरेक्टरी को किसी दूसरी मशीन पर कॉपी करें, वही Docker कमांड चलाएँ, और आप फिर से ऑनलाइन हैं। क्लाउड प्रोवाइडर्स के बीच जाना या हार्डवेयर अपग्रेड करना एक साधारण फाइल ट्रांसफर बन जाता है।

नुकसान

Docker पूरी तरह फायदेमंद नहीं है।

  • वॉल्यूम परमिशन समस्याएँ कुछ ऑपरेटिंग सिस्टम्स पर सिरदर्द बनती हैं, खासकर Windows और Linux होस्ट्स के बीच स्विच करते समय। आप ओनरशिप समस्याएँ ठीक करने और UID/GID मिसमैचेस से निपटने में समय बिताएँगे—जो नेटिव इंस्टॉलेशन में नहीं होते।
  • प्रोडक्शन-ग्रेड सुरक्षा के लिए अतिरिक्त कॉन्फ़िगरेशन का मतलब है Docker कभी-कभी जटिलता बढ़ाता है, घटाता नहीं। आपको नेटवर्क नीतियाँ, कंटेनर सिक्योरिटी कॉन्टेक्स्ट्स और वॉल्यूम एन्क्रिप्शन मैनेज करने पड़ते हैं—Mosquitto की अपनी सुरक्षा सुविधाओं के ऊपर। नेटिव इंस्टॉलेशन आपको सीधे अपने OS के मौजूदा सिक्योरिटी फ़्रेमवर्क्स का उपयोग करने देते हैं।
  • संभावित प्रदर्शन गिरावट हाई-थ्रूपुट परिदृश्यों में हो सकती है जहाँ हर माइक्रोसेकंड मायने रखता है। कंटेनर नेटवर्किंग लेयर और वॉल्यूम माउंट्स वह ओवरहेड जोड़ते हैं जिसे नेटिव इंस्टॉलेशन टालते हैं। अधिकतर IoT एप्लिकेशनों के लिए यह अंतर नगण्य है, लेकिन रियल-टाइम इंडस्ट्रियल सिस्टम्स लेटेंसी नोटिस कर सकते हैं।

जब आपको विभिन्न वातावरणों में एकसमान डिप्लॉयमेंट और आसान मैनेजमेंट चाहिए होता है, तब Docker बाज़ी मारता है।

निष्कर्ष

Docker में Mosquitto चलाने से आपको एक विश्वसनीय MQTT ब्रोकर्स मिलता है जो सभी वातावरणों में एकसमान रूप से काम करता है। चाहे आप IoT डिवाइसेज़ का प्रोटोटाइप बना रहे हों, होम ऑटोमेशन सिस्टम्स बना रहे हों, या डेवलपमेंट में सेंसर कनेक्ट कर रहे हों—Docker सेटअप की जटिलता हटाता है और आपको अपने असली प्रोजेक्ट पर ध्यान केंद्रित करने देता है।

यदि आप Mosquitto को प्रोडक्शन में ले जाने की योजना बना रहे हैं, तो यह याद रखें:

  • इंटरनेट पर एक्सपोज़ करने से पहले अपने ब्रोकर्स को सुरक्षित करें
  • mosquitto_passwd के साथ प्रमाणीकरण सक्षम करें, उचित सर्टिफिकेट्स के साथ TLS एन्क्रिप्शन कॉन्फ़िगर करें
  • केवल ज़रूरतमंद क्लाइंट्स तक ही एक्सेस सीमित रखें

असुरक्षित MQTT ब्रोकर्स हमलावरों के लिए डिवाइस कम्युनिकेशंस की जासूसी करने या दुर्भावनापूर्ण कमांड इंजेक्ट करने का खुला दरवाज़ा बन जाता है।

एंटरप्राइज़ डिप्लॉयमेंट्स के लिए जिन्हें रोल-आधारित एक्सेस कंट्रोल, क्लस्टरिंग, या LDAP इंटीग्रेशन जैसी उन्नत सुविधाएँ चाहिए, Mosquitto Pro Edition ओपन-सोर्स वर्ज़न से आगे जाकर आवश्यक मैनेजमेंट टूल्स और स्केलेबिलिटी प्रदान करता है।

क्या आप अपना Docker और Kubernetes गेम बेहतर करने के लिए तैयार हैं? हमारे Containerization and Virtualization with Docker and Kubernetes स्किल ट्रैक में नामांकित हों, प्रासंगिक कौशल बनाएं और नौकरी पाएं।

Mosquitto Docker FAQs

Mosquitto को नेटिव तरीके से चलाने और Docker में चलाने में क्या अंतर है?

Docker क्रॉस-प्लेटफ़ॉर्म कंसिस्टेंसी प्रदान करता है और डिपेंडेंसी कॉन्फ्लिक्ट्स को समाप्त करता है जो नेटिव इंस्टॉलेशनों को परेशान करते हैं। आपका Mosquitto सेटअप Windows, macOS और Linux पर एक समान काम करता है—प्लेटफ़ॉर्म-विशिष्ट पैकेज खोजने की ज़रूरत नहीं। Docker वर्ज़न अपग्रेड और रोलबैक को भी सरल बनाता है—सिर्फ इमेज टैग बदलें और कंटेनर रीस्टार्ट करें। हालाँकि, हाई-थ्रूपुट परिदृश्यों में नेटिव इंस्टॉलेशन थोड़े बेहतर प्रदर्शन दे सकते हैं।

क्या Mosquitto चलाने के लिए मुझे Docker Compose की आवश्यकता है, या मैं सामान्य Docker कमांड्स का उपयोग कर सकता/सकती हूँ?

आप बिल्कुल docker run का उपयोग करके रेगुलर Docker कमांड्स के साथ Mosquitto चला सकते हैं। Docker Compose केवल मैनेजमेंट को आसान बनाता है, खासकर जब आप Mosquitto के साथ Home Assistant या Node-RED जैसी कई सर्विसेज़ चला रहे हों। यदि आप केवल Mosquitto अकेले चला रहे हैं, तो एक साधारण docker run कमांड पूरी तरह ठीक काम करता है।

क्या Docker में Mosquitto प्रोडक्शन उपयोग के लिए पर्याप्त सुरक्षित है?

उचित कॉन्फ़िगरेशन के साथ Mosquitto Docker प्रोडक्शन-रेडी हो सकता है। आपको अनाम एक्सेस अक्षम करना होगा, mosquitto_passwd के साथ प्रमाणीकरण सेट करना होगा, TLS एन्क्रिप्शन कॉन्फ़िगर करना होगा, और नेटवर्क एक्सेस को केवल विश्वसनीय क्लाइंट्स तक सीमित करना होगा। कंटेनर स्वयं कोई अतिरिक्त भेद्यता नहीं जोड़ता, लेकिन Mosquitto की कॉन्फ़िगरेशन और Docker वातावरण—दोनों को सुरक्षित करना आपकी ज़िम्मेदारी है।

मेरा Mosquitto कंटेनर स्टार्ट तो होता है लेकिन बाहरी कनेक्शंस से इनकार क्यों करता है?

Mosquitto 2.0+ डिफ़ॉल्ट रूप से लोकल-ओनली मोड में होता है, जो कंटेनर के अंदर केवल localhost से कनेक्शंस स्वीकार करता है। आपको listener 1883 और allow_anonymous true (टेस्टिंग के लिए) या उपयुक्त प्रमाणीकरण सेटिंग्स के साथ एक mosquitto.conf फाइल बनानी होगी। इस कॉन्फ़िग फाइल को अपनी माउंटेड /mosquitto/config डायरेक्टरी में रखें और कंटेनर रीस्टार्ट करें।

जब Mosquitto माउंटेड वॉल्यूम्स पर लिखने की कोशिश करता है तो "Permission denied" एरर कैसे ठीक करूँ?

Mosquitto कंटेनर यूज़र ID 1883 के रूप में चलता है, लेकिन आपके होस्ट डायरेक्टरीज़ की ओनरशिप अलग हो सकती है। ओनरशिप ठीक करने के लिए sudo chown -R 1883:1883 mosquitto/ चलाएँ, या पहले sudo useradd -u 1883 mosquitto से mosquitto यूज़र बनाएं और फिर ओनरशिप बदलें। कुछ सिस्टम्स पर, आप कंटेनर को --user $(id -u):$(id -g) के साथ भी चला सकते हैं ताकि यह आपके होस्ट यूज़र से मेल खाए।


Dario Radečić's photo
Author
Dario Radečić
LinkedIn
क्रोएशिया में स्थित सीनियर डेटा साइंटिस्ट। 700 से अधिक प्रकाशित लेखों के साथ टॉप टेक राइटर, जिनसे 10M+ व्यूज़ प्राप्त हुए। Machine Learning Automation with TPOT के पुस्तक लेखक।
विषय
Docker
डेटा इंजीनियरिंग

Top DataCamp Courses

कोर्स

Docker परिचय

4 घंटा
52.5K
Docker का परिचय पाएं और डेटा प्रोफेशनल के टूलकिट में इसकी अहमियत जानें. Docker कंटेनर, इमेज और अन्य के बारे में जानें।
विवरण देखेंRight Arrow
पाठ्यक्रम शुरू करें

लर्निंग पाथ

कंटेनरीकरण और वर्चुअलाइजेशन Docker और Kubernetes के साथ

13 घंटा
Docker और Kubernetes की शक्ति सीखें, यह इंटरैक्टिव ट्रैक आपको आधुनिक परिवेशों में एप्लिकेशन बनाने और तैनात करने में सक्षम बनाएगा।
और देखेंRight Arrow