Ana içeriğe geç

Mosquitto Docker: Docker ve Docker Compose ile Eclipse Mosquitto MQTT Broker Nasıl Kurulur

Docker konteynerlerini kullanarak üretime hazır bir Mosquitto MQTT broker’ı dağıtmak için adım adım rehber. Kimlik doğrulama, TLS şifreleme, kalıcılık yapılandırması ve Home Assistant entegrasyonu dahildir.
· 14 dk. oku

Yapay Zeka ile Keşfedin

Sıfırdan bir MQTT broker kurmak, saatlerce yapılandırma ve hata ayıklama gerektirmemeli.

Eclipse Mosquitto, MQTT v5, 3.1.1 ve 3.1 protokollerini uygulayan açık kaynaklı bir MQTT broker’dır; IoT cihazları, ev otomasyonu sistemleri, bulut uygulamaları ve mesaj odaklı her mimari için idealdir. Ancak Mosquitto’yu doğrudan sisteminize kurmak ve yapılandırmak, çoğu zaman bağımlılık çatışmalarına, izin sorunlarına ve platforma özgü problemlerine yol açarak geliştirme sürenizi tüketir. Sonuçta, gerçek uygulamanızı geliştirmek yerine kurulumla mücadeleye daha çok zaman harcarsınız.

Docker, Mosquitto’yu herhangi bir platformda çalıştırmak için tutarlı ve izole bir ortam sağlayarak bu dertleri ortadan kaldırır. Özel yapılandırmalar, kimlik doğrulama ve kalıcılık ile birlikte dakikalar içinde tamamen işlevsel bir MQTT broker’ı çalıştırabilirsiniz.

Bu rehberde, Docker ve Docker Compose kullanarak Eclipse Mosquitto’yu dağıtmayı, kimlik doğrulama ve günlüklemeyi yapılandırmayı, veri kalıcılığını ayarlamayı ve broker’ınızı gerçek MQTT istemcileriyle test etmeyi adım adım göstereceğim.

Docker’a tamamen yabancı mısınız? Öncelikle Introduction to Docker kursumuzu öneririm; temelleri kavramanıza yardımcı olur.

Mosquitto Nedir ve Neden Docker’da Kullanılır

İhtiyacınız olan tek şey cihazlar arasında hızlı ve güvenilir iletişimse, ağır bir mesajlaşma sistemine ihtiyacınız yok.

MQTT, bant genişliğinin kısıtlı olduğu ve güvenilirliğin önemli olduğu durumlar için tasarlanmış hafif bir yayınla-abone ol (publish-subscribe) protokolüdür. IoT sensörleri, mobil uygulamalar veya cihazların küçük mesajları sürekli yoklama olmadan hızlıca değiştirmesi gereken her senaryoyu düşünün.

Mosquitto, yayımlayıcılar ve aboneler arasında aracılık yapan - broker - görevi görür. 

Yayımlayıcılar belirli konulara (topic) mesaj gönderir. Aboneler bu konuları dinler. Mosquitto, yönlendirmeyi üstlenerek, yayımlayıcı ve abonelerin birbirini bilmesine gerek kalmadan mesajların doğru yere ulaşmasını sağlar.

Docker’ın Mosquitto kurulumlarını daha da iyi hale getirmesinin nedenleri şunlardır:

  • Platformlar arası tutarlı kurulum: Windows, macOS veya Linux - Docker konteyneri her yerde aynı şekilde çalışır. Platforma özgü yükleyicileri aramak veya bağımlılık çatışmalarıyla uğraşmak yok.
  • Kolay sürüm yönetimi: Görüntü etiketleriyle belirli Mosquitto sürümlerini sabitleyebilir, bir şey bozulduğunda geri alabilir ve ana sisteminize dokunmadan yeni sürümleri test edebilirsiniz.
  • Gerçek taşınabilirlik: Aynı Docker Mosquitto kurulumu geliştirme, hazırlık ve üretimde çalışır. Yerel ortamınız sunucularınızdaki ile birebir örtüşür.

Mosquitto iki sürümde gelir: açık kaynak sürümü (çoğu kullanım senaryosunu karşılar) ve kümeleme ile gelişmiş güvenlik gibi özellikler sunan Cedalo’nun ticari Pro Edition’ı. Çoğu proje için açık kaynak sürüm tüm ihtiyaçlarınızı karşılar.

Şimdi ön koşullara değineceğim, ardından Mosquitto kurulumuna geçeceğiz.

Ön Koşullar

Mosquitto’yu dağıtmadan önce sisteminizde Docker’ın çalışır durumda olması gerekir.

Docker Desktop, tek pakette tüm gereklilikleri sunduğu için Windows ve macOS kullanıcıları için en iyi seçenektir. Linux kullanıcıları Docker CLI’yı paket yöneticileri üzerinden veya Docker’ın resmi deposundan doğrudan kurabilir.

Docker Compose zorunlu değildir, ancak çoklu konteyner kurulumlarını yönetmeyi ciddi ölçüde kolaylaştırır. Çoğu Docker Desktop kurulumunda Compose varsayılan olarak gelir. Linux kullanıyorsanız ayrı kurmanız gerekebilir.

Ayrıca temel komut satırı becerilerine ihtiyacınız olacak. Abartı yok; komut çalıştırmak, dizinlerde gezinmek ve metin dosyaları düzenlemek yeterli.

Adım Adım Kurulum

Mosquitto’yu Docker’da çalıştırmak üç adımdan oluşur: dizinleri oluşturun, konteyneri çalıştırın ve isteğe bağlı olarak kolay yönetim için Docker Compose ayarlayın.

Gerekli dizinleri oluşturma

Mosquitto, yapılandırma, veri ve günlükleri için düzenli bir depolamaya ihtiyaç duyar.

Başlamak için bunları oluşturun:

mkdir mosquitto-docker
cd mosquitto-docker
mkdir config data logs

Bu, Mosquitto’nun yapılandırma dosyaları, kalıcı veriler ve günlük çıktısı için düzenli klasörler oluşturur.

Her dizinin görevi:

  • /mosquitto/config, mosquitto.conf ve ek yapılandırma dosyalarını saklar
  • /mosquitto/data, kalıcı mesaj verilerini ve abonelik bilgilerini tutar
  • /mosquitto/log, hata ayıklama ve izleme için Mosquitto’nun günlük dosyalarını içerir

Bu dizinler Docker konteyneri içinde hacim (volume) olarak bağlanır; böylece ayarlarınız ve verileriniz konteyner yeniden başlatmalarında korunur.

Mosquitto’yu Docker ile çalıştırma

Temel Docker komutu, doğru port eşlemesi ve hacim bağlamalarıyla Mosquitto’yu çalıştırır.

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

Görsel 1 - Docker ile Mosquitto’yu çalıştırma

Görsel 1 - Docker ile Mosquitto’yu çalıştırma

Bayrakları kısaca açıklayayım:

  • -d konteyneri arka planda (bağımsız modda) çalıştırır
  • --name mosquitto konteynere kolay referans için anlamlı bir ad verir
  • -p 1883:1883 ana makinenizdeki 1883 portunu konteynerdeki 1883’e eşler
  • -v yerel dizinleri konteyner içinde hacim olarak bağlar

Mosquitto 2.0+ varsayılan olarak yalnızca yerel (local-only) modda çalışır. Bu, aksi yapılandırılmadıkça yalnızca localhost’tan gelen bağlantıları kabul ettiği anlamına gelir. Harici bağlantılara izin vermek için bir yapılandırma dosyası oluşturmanız gerekir.

Docker Compose kullanma

Mosquitto docker compose, özellikle birden fazla hizmet çalıştırırken, kurulumu yönetmeyi çok daha basit hale getirir.

docker-compose.yml dosyası oluşturup aşağıdaki içeriği yapıştırın:

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

Şununla başlatın:

docker-compose up -d

Görsel 2 - Docker Compose ile Mosquitto’yu çalıştırma

Görsel 2 - Docker Compose ile Mosquitto’yu çalıştırma

Hacim eşlemeleri Docker komutundakiyle aynı şekilde çalışır, ancak Compose karmaşıklığı sizin yerinize yönetir. Port yapılandırması tüm yaygın MQTT protokollerini kapsar: standart MQTT (1883), güvenli MQTTS (8883) ve WebSocket bağlantıları (9001).

Compose, çok hizmetli kurulumlarda gerçekten parlıyor. Örneğin Mosquitto ile birlikte Home Assistant, Node-RED veya diğer IoT araçlarını çalıştırıyorsanız, her şeyi tek bir dosyada tanımlayıp topluca başlatabilirsiniz.

Şimdi yapılandırmaya daha derinlemesine bakalım.

Daha ileri düzey Docker kavramlarını kafa karıştırıcı mı buluyorsunuz? Intermediate Docker kursumuz temellerin de ötesine geçer.

Mosquitto’yu Yapılandırma

Mosquitto, varsayılan olarak harici bağlantıları kabul etmez; bunu sağlamak için bir yapılandırma dosyasına ihtiyacınız var.

Temel yapılandırma (mosquitto.conf)

mosquitto/config dizininizde bir mosquitto.conf dosyası oluşturup şunları ekleyin:

# 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 ayarı, istemcilerin kimlik bilgisi olmadan bağlanmasına izin verir. Bu, geliştirme veya dahili ağlar için uygundur ancak üretim ortamlarında devre dışı bırakmak istersiniz. allow_anonymous false ayarlandığında her istemci kullanıcı adı ve şifre ile kimlik doğrulamak zorundadır.

9001 portundaki WebSocket dinleyicisi, tarayıcı tabanlı MQTT istemcilerini etkinleştirir. Web uygulamaları Paho MQTT gibi JavaScript kütüphaneleri kullanarak broker’ınıza doğrudan bağlanabilir.

Kimlik doğrulama ayarlama

Kimlik doğrulama için bir parola dosyası oluşturmanız ve yapılandırmanızı güncellemeniz gerekir.

Parola dosyasını konteyner içinde oluşturun:

docker exec -it mosquitto mosquitto_passwd -c /mosquitto/config/passwd username

Görsel 3 - Mosquitto kimlik doğrulama

Görsel 3 - Mosquitto kimlik doğrulama

Bu, yeni bir parola dosyası oluşturur ve sizden parola girmenizi ister. Ek kullanıcılar için -c bayrağını kaldırın:

docker exec -it mosquitto mosquitto_passwd /mosquitto/config/passwd another_user

Şimdi, kimliği zorunlu kılmak için mosquitto.conf dosyanızı güncelleyin:

# 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

Parola dosyası, bağladığınız config hacminde saklanır; böylece konteyner yeniden başlatmalarında korunur.

TLS/SSL etkinleştirme

TLS şifreleme, MQTT trafiğinizi dinlemeye ve kurcalamaya karşı korur.

mosquitto.conf dosyanıza şu satırları ekleyin:

# 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

Alan adınız için SSL sertifikaları edinmeniz gerekir. Let’s Encrypt ücretsiz sertifikalar sağlar ya da sertifika üretimini otomatik yöneten Caddy Server gibi ters proxy’ler kullanabilirsiniz. Sertifika dosyalarınızı konteyner içinde erişilebilir olmaları için mosquitto/config dizinine yerleştirin.

Kalıcılık ve günlükleme

Kalıcılık, mesajları ve abonelikleri diske kaydeder; doğru günlükleme ise bağlantı sorunlarını ayıklamanıza yardımcı olur.

mosquitto.conf içinde kalıcılığı şu şekilde yapılandırabilirsiniz:

# 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

Günlükleme için ise detaylı günlüklemeyi şöyle ayarlayabilirsiniz:

# 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 seçenekleri, nelerin günlüğe yazılacağını filtrelemenizi sağlar:

  • Üretim izlemesi için error ve warning
  • Genel operasyonel içgörüler için notice ve information
  • Bağlantı sorunlarını gidermek için debug

Hacim bağlamaları, hem kalıcı verilerin hem de günlüklerin konteyner yeniden başlatmalarında korunmasını sağlar. Veri dizini tüm kalıcı mesajları ve abonelik bilgilerini saklarken, günlük dizini hata ayıklama bilgilerinizi ana sistemden erişilebilir kılar.

Yapılandırma dosyaları, konteynerleri yeniden inşa etmeye gerek kalmadan Mosquitto’nun davranışı üzerinde tam kontrol sağlar.

Kurulumu Test Etme

İstemcilerin bağlanabildiğini ve mesaj alışverişi yapabildiğini doğrulamadıkça broker’ınız işe yaramaz.

mosquitto_pub ve mosquitto_sub kullanma

mosquitto_pub ve mosquitto_sub komut satırı araçları, broker’ınızı test etmenin en hızlı yolunu sunar.

Platformunuza göre Mosquitto’yu kurarak başlayın:

  • Linux (Ubuntu/Debian): sudo apt-get install mosquitto-clients
  • macOS: brew install mosquitto
  • Windows: Resmi Eclipse Mosquitto web sitesinden indirin veya WSL kullanın

Önce kimlik doğrulama olmadan test edelim. İki terminal penceresine veya sekmesine ihtiyacınız olacak. Bu komutları ayrı oturumlarda çalıştırın:

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

Yayın yapan sekmede şunu göreceksiniz:

Görsel 4 - Mesaj yayımlama

Görsel 4 - Mesaj yayımlama

Abone olan sekmede ise mesajı anında göreceksiniz:

Görsel 5 - Mosquitto konusunda abone olma

Görsel 5 - Mosquitto konusunda abone olma

Kimlik doğrulama gerekiyorsa komutlar oldukça benzer — sadece kullanıcı adı ve şifre geçmeniz gerekir:

# 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 istemcilerini yerel olarak kurmak istemiyorsanız, onları Docker konteyneriniz içinde çalıştırın:

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

Yayın yapan sekmede şunu göreceksiniz:

Görsel 6 - Kimlik doğrulamasız mesaj yayımlama

Görsel 6 - Kimlik doğrulamasız mesaj yayımlama

Abone olan sekmede ise mesajı göreceksiniz:

Görsel 7 - Kimlik doğrulamasız Mosquitto konusunda abone olma

Görsel 7 - Kimlik doğrulamasız Mosquitto konusunda abone olma

MQTT istemcileriyle test etme

GUI istemcileri, karmaşık senaryoları test etmeyi ve devam eden mesaj trafiğini izlemeyi kolaylaştırır.

MQTT Explorer, konuları gezmek ve mesaj göndermek için temiz bir arayüz sunar. localhost:1883’e bağlanın; tüm aktif konuların ağaç görünümünü göreceksiniz. Mesaj akışlarını hata ayıklamak ve konu yapınızı anlamak için idealdir.

Görsel 8 - MQTT Explorer uygulaması

Görsel 8 - MQTT Explorer uygulaması

MQTTX, betik yazma ve toplu mesaj gönderme gibi daha gelişmiş özellikler sunar. Her iki istemci de kimlik doğrulama, TLS bağlantıları ve WebSocket protokollerini destekler.

Home Assistant kullanıcıları MQTT entegrasyonunu doğrudan geliştirici araçlarından test edebilir. MQTT entegrasyonuna broker ayrıntılarınızı ekleyin ve yerleşik yayın/abone arayüzünü kullanın.

Programatik test için Paho MQTT Python istemcisi iyi çalışır:

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()

Bu betiği bir terminalde çalıştırın, ardından başka bir terminalden veya GUI istemcisinden mesajlar yayınlayın. Betik aldığı tüm mesajları yazdırır ve broker’ınızın trafiği doğru şekilde yönlendirdiğini doğrular.

Bir mesaj yayımlamak için yapmanız gerekenler şunlar:

Görsel 9 - Python örneği için mesaj yayımlama

Görsel 9 - Python örneği için mesaj yayımlama

Ve Python betiğinin çalıştığı terminal oturumunda şunu göreceksiniz:

Görsel 10 - Python örneği için mesaj alma

Görsel 10 - Python örneği için mesaj alma

Yayın ve abonelik işlemlerinin çalışması, Mosquitto Docker kurulumunuzun gerçek uygulamalar için hazır olduğu anlamına gelir.

Mosquitto Docker’ı Home Assistant ile Entegre Etme

Mosquitto’yu Docker’da Home Assistant ile birlikte çalıştırmak, sıfır ağ yapılandırması derdiyle eksiksiz bir IoT mesajlaşma merkezi oluşturur.

Docker Compose bunu basitleştirir. Her iki hizmet de ek portları açmadan veya IP adresleriyle uğraşmadan Docker’ın dahili ağı üzerinden iletişim kurabilir.

Her iki hizmeti de çalıştıran eksiksiz bir docker-compose.yml şöyle:

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 bölümü, her iki konteynerin de birbirine adla ulaşabildiği paylaşılan bir ağ oluşturur. Home Assistant, localhost veya IP adresleri yerine mosquitto:1883’e bağlanabilir.

Her iki hizmeti de şu komutla başlatın:

docker-compose up -d

Sonraki adımda MQTT entegrasyonunu Home Assistant’ın web arayüzü üzerinden yapılandırın. Ayarlar > Cihazlar ve Servisler > Entegrasyon Ekle yolunu izleyin, ardından "MQTT"yi arayın.

Şu bağlantı ayrıntılarını girin:

  • Broker: mosquitto (konteyner adı)
  • Port: 1883
  • Kullanıcı Adı/Şifre: Kimlik doğrulama etkinse kimlik bilgileriniz
  • Diğer ayarları varsayılan bırakın

Gönder’e tıklayın; Home Assistant bağlantıyı test edecektir. Başarılı olursa, entegrasyonlar listenizde MQTT’yi görürsünüz.

Görsel 11 - Homelab ile Mosquitto yapılandırması

Görsel 11 - Homelab ile Mosquitto yapılandırması

Artık MQTT cihazları ekleyebilir, mesaj yayımlayan otomasyonlar oluşturabilir ve konular üzerinden sensör verilerini izleyebilirsiniz. Home Assistant’ın MQTT entegrasyonu, uyumlu cihazlar için cihaz keşfini otomatik olarak yönetir.

Yaygın Sorunları Giderme

Docker Mosquitto ile ilgili sorunların çoğu, bağlantıları engelleyen izinler, portlar veya yapılandırma hatalarından kaynaklanır.

Bağlanan hacimlerde izin hataları 

Bunlar, konteynerin ana makine dizinlerinize yazamaması durumunda ortaya çıkar. Günlüklerde "Permission denied" veya "Cannot create directory" gibi hatalar görürsünüz.

Dizinlerinizde doğru sahipliği ayarlayarak düzeltin:

sudo chown -R 1883:1883 mosquitto/

Mosquitto konteyneri 1883 kullanıcı kimliğiyle çalışır; bu nedenle ana makine dizinlerinizin buna uyması gerekir. Bazı sistemlerde önce kullanıcı oluşturmanız gerekebilir:

sudo useradd -u 1883 mosquitto
sudo chown -R mosquitto:mosquitto mosquitto/

Port çatışmaları

Bunlar, 1883 portunu başka bir şey kullandığında oluşur. O portta ne çalıştığını kontrol edin:

# Linux/macOS
sudo lsof -i :1883

# Windows
netstat -an | findstr :1883

Portu başka bir servis kullanıyorsa ya onu durdurun ya da Mosquitto’yu farklı bir porta eşleyin:

docker run -p 1884:1883 eclipse-mosquitto:latest

Yalnızca yerel mod harici bağlantıları engelliyor

Bu durum, konteyneriniz çalışırken bile görülebilir. Mosquitto 2.0+, aksi belirtilmedikçe varsayılan olarak yalnızca localhost’tan gelen bağlantıları kabul eder.

Harici bağlantılara izin vermek için basit bir mosquitto.conf dosyası oluşturun:

listener 1883
allow_anonymous true

Bu dosyayı mosquitto/config dizininize yerleştirin ve konteyneri yeniden başlatın.

Başlangıçta boş dizinler

Bu, hacim bağlamalarının doğru çalışmadığı anlamına gelir. Yollarınızın mutlak olduğundan ve dizinlerin mevcut olduğundan emin olun:

# Wrong - relative path might not work
-v ./mosquitto/config:/mosquitto/config

# Better - absolute path
-v $(pwd)/mosquitto/config:/mosquitto/config

Konteyneri başlatmadan önce dizinleri oluşturun:

mkdir -p mosquitto/{config,data,log}

Ana makine ve konteyner arasında çakışan UID/GID’ler

Bunlar kalıcı izin sorunlarına neden olur. Konteyner 1883 kullanıcısı olarak çalışmayı bekler, ancak ana makinenizde farklı sahiplik gereksinimleri olabilir.

Konteyneri kendi kullanıcınızla çalışmaya zorlayın:

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

Ya da ana makine dizin izinlerinizi konteyner beklentilerine göre ayarlayın. Geliştirme için konteyner yaklaşımı daha iyi çalışırken, üretim dağıtımlarında ana makine izinlerini düzeltmek daha uygundur.

Bir şeyler çalışmadığında konteyner günlüklerini kontrol edin — genellikle sorunun ne olduğunu açıkça söylerler.

İleri Düzey: Mosquitto Pro Edition Özellikleri

Açık kaynak Mosquitto çoğu kullanım senaryosunu kapsar, ancak kurumsal ortamlar yalnızca Pro Edition’ın sunduğu özelliklere ihtiyaç duyar.

Rol tabanlı kullanıcı yönetimi, farklı kullanıcı grupları için ayrıntılı izinler tanımlamanıza olanak tanır. Tek tek kullanıcı erişimlerini yönetmek yerine “sensor-readers”, “actuator-controllers” veya “admin-users” gibi roller oluşturur ve izinleri rollere atarsınız. Kullanıcılar atandıkları rollerin izinlerini devralır; bu da yüzlerce veya binlerce cihazda erişimi yönetmeyi kolaylaştırır.

Erişimi konu desenleri, IP aralıkları veya zaman pencerelerine göre kısıtlayabilirsiniz. Farklı güvenlik gereksinimlerine sahip karmaşık IoT dağıtımlarını yönetirken ACL dosyalarını elle yapılandırmaktan çok daha etkilidir.

Gelişmiş kimlik doğrulama seçenekleri basit kullanıcı adı/şifre kombinasyonlarının ötesine geçer. JWT belirteç doğrulaması, Auth0, Okta veya şirketinizin SSO sistemi gibi mevcut kimlik sağlayıcılarıyla bütünleşir. LDAP entegrasyonu, Active Directory veya diğer kurumsal dizin servislerine doğrudan bağlanır.

Derinlemesine inceleme ve izleme size mesaj akışlarına, bağlantı kalıplarına ve broker performansına gerçek zamanlı görünürlük kazandırır. Pro Edition; en çok bant genişliği tüketen istemcileri, en yüksek mesaj oranına sahip konuları ve darboğazların oluştuğu yerleri gösteren yerleşik paneller sunar.

Mesaj gecikmesi, kuyruk derinlikleri ve istemci davranış kalıpları hakkında ayrıntılı metrikler elde edersiniz. Bu veriler, konu yapılarını optimize etmenize ve tüm sistemi etkilemeden önce sorunlu istemcileri belirlemenize yardımcı olur.

Veritabanı ve bulut servis entegrasyonları özel köprü (bridge) uygulamalarına olan ihtiyacı ortadan kaldırır. Pro Edition; mesajları PostgreSQL, MongoDB, InfluxDB, AWS IoT Core, Azure IoT Hub veya Google Cloud IoT’ye otomatik olarak iletebilir. Hangi mesajların nereye gideceğini konu desenleri, mesaj içeriği veya istemci metaverisine göre belirleyen yönlendirme kuralları tanımlarsınız.

Kalıcı kuyruklar yüksek hacimli senaryoları yönetir ve standart Mosquitto kalıcılığının yetmediği durumlarda devreye girer. Pro Edition, çevrimdışı istemciler için milyonlarca mesajı arabelleğe alabilir ve yükü birden çok broker örneğine dağıtabilir. Bellek tüketimini önleyen ve mesaj sırası garantilerini koruyan otomatik kuyruk yönetimi içerir.

Kümeleme desteği, mesaj yükünü paylaşan ve yedeklilik sağlayan birden çok broker örneğini çalıştırmanıza olanak tanır. Bir broker devre dışı kaldığında, istemciler mesaj veya abonelik kaybı olmadan otomatik olarak sağlıklı örneklere yeniden bağlanır.

Pro Edition, kendinizin aylarca geliştirmek zorunda kalacağı kurumsal düzeyde güvenilirlik ve yönetim özelliklerine ihtiyaç duyduğunuzda mantıklıdır.

Docker’da Mosquitto Kullanmanın Artıları ve Eksileri

Docker dağıtımı kolaylaştırır, ancak her senaryo için mükemmel bir çözüm değildir.

Artılar

  • Platformlar arası tutarlılık, işletim sistemine özgü kurulumların baş ağrılarını ortadan kaldırır. Aynı Docker komutu Windows, macOS ve Linux’ta çalışır; farklı paket yöneticileri peşinde koşmak veya bağımlılık çatışmalarıyla uğraşmak yok. Geliştirme ortamınız üretimle birebir eşleşir; bu da dağıtımda daha az sürpriz demektir.
  • Basit sürüm yükseltmeleri, görüntü etiketini değiştirerek yapılır. Eski sürümü kaldırıp yükseltmenin yapılandırmanızı bozmayacağını ummak yerine yeni bir görüntü çekip konteyneri yeniden başlatırsınız. Bir şeyler ters giderse geri almak saniyeler sürer.
  • Kolay yedekleme ve taşıma, veriler için hacimler kullanmaktan gelir. mosquitto dizinini başka bir makineye kopyalayın, aynı Docker komutunu çalıştırın ve yeniden çevrimiçi olun. Bulut sağlayıcıları arasında geçiş yapmak veya donanımı yükseltmek, basit bir dosya transferine dönüşür.

Eksiler

Docker her açıdan kusursuz değildir.

  • Hacim izin sorunları belirli işletim sistemlerinde, özellikle Windows ile Linux ana makineleri arasında geçiş yaparken sık görülür. Sahiplik problemlerini düzeltmeye ve yerel/konteyner UID/GID uyuşmazlıklarıyla uğraşmaya zaman harcarsınız; yerel kurulumda olmayacak dertler.
  • Üretim düzeyi güvenlik için ek yapılandırma gereksinimi, Docker’ın karmaşıklık eklemesi anlamına gelebilir. Mosquitto’nun kendi güvenlik özelliklerine ek olarak ağ ilkelerini, konteyner güvenlik bağlamlarını ve hacim şifrelemeyi yönetmeniz gerekir. Yerel kurulumlar, işletim sisteminizin mevcut güvenlik çerçevelerini doğrudan kullanmanıza olanak tanır.
  • Olası performans etkisi, her mikrosaniyenin önemli olduğu yüksek verim senaryolarda görülebilir. Konteyner ağ katmanı ve hacim bağlamaları, yerel kurulumların kaçındığı bir ek yük getirir. Çoğu IoT uygulaması için bu fark ihmal edilebilir, ancak gerçek zamanlı endüstriyel sistemler gecikmeyi hissedebilir.

Farklı ortamlar arasında tutarlı dağıtımlar ve kolay yönetim gerektiğinde Docker kazanır.

Sonuç

Mosquitto’yu Docker’da çalıştırmak, tüm ortamlarda tutarlı şekilde çalışan güvenilir bir MQTT broker sağlar. IoT cihaz prototipleme, ev otomasyon sistemleri kurma veya geliştirmede sensörleri bağlama fark etmeksizin, Docker kurulum karmaşıklığını ortadan kaldırır ve sizi asıl projenize odaklanmaya bırakır.

Mosquitto’yu üretime almayı planlıyorsanız şunları unutmayın:

  • Broker’ınızı internete açmadan önce güvenli hale getirin
  • mosquitto_passwd ile kimlik doğrulamayı etkinleştirin, uygun sertifikalarla TLS şifrelemeyi yapılandırın
  • Erişimi yalnızca ihtiyaç duyan istemcilerle sınırlayın

Güvenliği zayıf bir MQTT broker, saldırganların cihaz iletişimlerini izlemesi veya kötü amaçlı komutlar enjekte etmesi için açık bir kapı haline gelir.

Rol tabanlı erişim denetimi, kümeleme veya LDAP entegrasyonu gibi gelişmiş özelliklere ihtiyaç duyan kurumsal dağıtımlarda, Mosquitto Pro Edition açık kaynak sürümünün ötesine geçen yönetim araçları ve ölçeklenebilirlik sunar.

Docker ve Kubernetes becerilerinizi geliştirmeye hazır mısınız? Containerization and Virtualization with Docker and Kubernetes beceri yoluna kaydolun; yetkinlik kazanın ve işe girin.

Mosquitto Docker SSS

Mosquitto’yu yerel olarak çalıştırmakla Docker’da çalıştırmak arasındaki fark nedir?

Docker, platformlar arası tutarlılık sağlar ve yerel kurulumlarda baş gösteren bağımlılık çatışmalarını ortadan kaldırır. Mosquitto kurulumunuz, platforma özgü paketleri aramaya gerek kalmadan Windows, macOS ve Linux’ta aynı şekilde çalışır. Docker ayrıca sürüm yükseltmelerini ve geri almaları basitleştirir — sadece görüntü etiketini değiştirip konteyneri yeniden başlatmanız yeterlidir. Ancak, yüksek verim senaryolarında yerel kurulumlar biraz daha iyi performans sunabilir.

Mosquitto’yu çalıştırmak için Docker Compose’a ihtiyacım var mı, yoksa normal Docker komutlarını kullanabilir miyim?

Kesinlikle docker run kullanarak standart Docker komutlarıyla Mosquitto’yu çalıştırabilirsiniz. Docker Compose sadece yönetimi kolaylaştırır; özellikle Mosquitto ile birlikte Home Assistant veya Node-RED gibi birden fazla hizmet çalıştırdığınızda. Yalnızca Mosquitto’yu tek başına çalıştırıyorsanız, basit bir docker run komutu gayet yeterlidir.

Docker’da Mosquitto, üretim kullanımı için yeterince güvenli mi?

Doğru yapılandırma ile Docker’daki Mosquitto üretime hazır olabilir. mosquitto_passwd ile anonim erişimi devre dışı bırakmalı, kimlik doğrulamayı ayarlamalı, TLS şifrelemeyi yapılandırmalı ve ağ erişimini yalnızca güvenilir istemcilerle sınırlamalısınız. Konteynerin kendisi ek güvenlik açıkları getirmez, ancak hem Mosquitto yapılandırmasını hem de Docker ortamını güvenceye almak sizin sorumluluğunuzdadır.

Mosquitto konteynerim başlıyor ama harici bağlantıları neden reddediyor?

Mosquitto 2.0+ varsayılan olarak yalnızca yerel moda sahiptir; bu da konteyner içindeki localhost’tan gelen bağlantıları kabul ettiği anlamına gelir. listener 1883 ve test için allow_anonymous true (ya da uygun kimlik doğrulama ayarları) içeren bir mosquitto.conf dosyası oluşturmanız gerekir. Bu yapılandırmayı bağladığınız /mosquitto/config dizinine yerleştirip konteyneri yeniden başlatın.

Mosquitto, bağlanan hacimlere yazmaya çalıştığında görülen "Permission denied" hatalarını nasıl düzeltirim?

Mosquitto konteyneri 1883 kullanıcı kimliğiyle çalışır, ancak ana makine dizinlerinizin sahipliği farklı olabilir. Sahipliği düzeltmek için sudo chown -R 1883:1883 mosquitto/ çalıştırın; ya da önce sudo useradd -u 1883 mosquitto ile mosquitto kullanıcısını oluşturup ardından sahipliği değiştirin. Bazı sistemlerde konteyneri ana kullanıcıya uydurmak için --user $(id -u):$(id -g) ile de çalıştırabilirsiniz.

Dario Radečić

Yazar

Dario Radečić

Hırvatistan merkezli Kıdemli Veri Bilimci. 700’ün üzerinde yayımlanmış makaleyle 10 M+ görüntüleme elde eden, önde gelen bir teknoloji yazarı. TPOT ile Makine Öğrenimi Otomasyonu kitabının yazarı.

Konular

İlgili