Uygulamalı Eğitimler

Mosquitto MQTT Broker Kurulumu (Ubuntu, Debian, Windows, macOS)

Mosquitto MQTT broker’ını Ubuntu, Debian, Windows veya macOS’a kurun, servis olarak çalıştırın, mosquitto_sub/pub ile test edin ve 2.x local only modunu çözün.

Güncellendi · 7 dk okuma

Eclipse Mosquitto en yaygın kullanılan açık kaynak MQTT broker’ıdır: küçük, hızlı ve neredeyse her işletim sistemi için mevcut. Bu eğitimde Mosquitto’yu Ubuntu, Debian, Windows ve macOS’a nasıl kuracağınızı, arka planda servis olarak nasıl çalıştıracağınızı, komut satırı client’larıyla nasıl doğrulayacağınızı ve Mosquitto 2.x’in en yaygın tuzağından — broker’ın uzak bağlantıları sessizce reddetmesinden — nasıl kaçınacağınızı göreceksiniz.

MQTT’de yeni misiniz? Önce MQTT nedir yazısını okuyun; host’a hiçbir şey kurmak istemiyorsanız Mosquitto’yu Docker’da çalıştırma rehberine bakın.

Mosquitto’yu Ubuntu ve Debian’a kurma

Mosquitto, Ubuntu ve Debian’ın varsayılan depolarında bulunur. Broker ve CLI client’ları ayrı paketlerdir, bu yüzden ikisini birden kurun:

Ubuntu / Debian
sudo apt update
sudo apt install -y mosquitto mosquitto-clients

Dağıtım paketleri upstream sürümlerin gerisinde kalabilir. Ubuntu’da en yeni sürüme ihtiyacınız varsa Mosquitto projesi bir PPA yayınlar:

İsteğe bağlı: PPA’dan en yeni sürüm (Ubuntu)
sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
sudo apt update
sudo apt install -y mosquitto mosquitto-clients

Hangi sürümün kurulduğunu kontrol edin:

bash
mosquitto -h | head -n 1

Mosquitto’yu systemd servisi olarak çalıştırma

Debian paketi bir mosquitto systemd unit’i kaydeder ve genellikle onu hemen başlatır. Yönetmek için alışılmış komutları kullanın:

systemd
sudo systemctl enable --now mosquitto   # start now and at boot
sudo systemctl status mosquitto         # is it running?
sudo systemctl restart mosquitto        # after editing the config
journalctl -u mosquitto -f              # follow the logs

Ana yapılandırma dosyası /etc/mosquitto/mosquitto.conf’tur. Bu dosya /etc/mosquitto/conf.d/ içindeki her *.conf dosyasını dahil eder; kendi ayarlarınız için en temiz yer burasıdır.

Mosquitto’yu Windows’a kurma

  1. Windows kurulum dosyasını (64-bit .exe) mosquitto.org/download adresindeki resmi indirme sayfasından indirin.
  2. Çalıştırın. Mosquitto’nun Windows servisi olarak çalışmasını istiyorsanız Service bileşenini seçili bırakın. Varsayılan kurulum yolu C:\Program Files\mosquitto’dur.
  3. mosquitto_pub ve mosquitto_sub her terminalden çalışsın diye bu klasörü PATH’inize ekleyin.

Servisi yönetici yetkili bir PowerShell veya Komut İstemi’nden başlatın:

Windows (yönetici)
net start mosquitto
# or run in the foreground with verbose logging:
cd "C:\Program Files\mosquitto"
.\mosquitto.exe -c mosquitto.conf -v

Mosquitto’yu macOS’a kurma

Homebrew ile tek satırlık bir iştir ve Homebrew’un servis yöneticisi onu arka planda çalışır halde tutar:

macOS (Homebrew)
brew install mosquitto
brew services start mosquitto     # run as a background service
brew services info mosquitto      # check status

Yapılandırma dosyası Homebrew’un prefix’i altında bulunur: Apple Silicon’da /opt/homebrew/etc/mosquitto/mosquitto.conf, Intel Mac’lerde ise /usr/local/etc/mosquitto/mosquitto.conf. Client’lar aynı formül içinde gelir.

Kurulumu mosquitto_sub ve mosquitto_pub ile doğrulama

Broker’ın çalıştığı makinede iki terminal açın. Birincisinde abone olun:

Terminal 1 — abone olma
mosquitto_sub -h localhost -t 'test/#' -v

İkincisinden publish edin:

Terminal 2 — publish
mosquitto_pub -h localhost -t 'test/hello' -m 'Mosquitto works'

Terminal 1’de test/hello Mosquitto works çıktısını görmelisiniz. Tüm parametreler için mosquitto_pub ve mosquitto_sub kopya kâğıdımızı açık tutun.

Mosquitto 2.x’teki "local only mode" tuzağı

localhost testi çalışıyor, ama başka bir makinedeki client connection refused hatası alıyor. Bu tasarım gereğidir. 2.0 sürümünden beri, mosquitto.conf hiçbir listener tanımlamıyorsa Mosquitto yalnızca loopback arayüzüne bağlanır ve log’a şuna benzer bir şey yazar:

mosquitto log
Starting in local only mode. Connections will only be possible from clients running on this machine.
Create a configuration file which defines a listener to allow remote access.

Mosquitto 2.x ayrıca bir listener tanımladığınız anda varsayılan olarak allow_anonymous false kullanır. Yani portu açmak yetmez — client’ların nasıl kimlik doğrulayacağına da karar vermeniz gerekir. Küçük bir yapılandırma dosyası oluşturun:

/etc/mosquitto/conf.d/local.conf — yalnızca hızlı test için
listener 1883
allow_anonymous true
/etc/mosquitto/conf.d/local.conf — önerilen
listener 1883
allow_anonymous false
password_file /etc/mosquitto/passwd

Broker’ı yeniden başlatın (sudo systemctl restart mosquitto); port artık ağdan erişilebilir olur. Parola dosyasının oluşturulması, ACL ve TLS eklenmesi Mosquitto’yu güvenli hale getirme rehberinde adım adım anlatılıyor. Direktifleri ezberlemeden bir yapılandırma oluşturmak için mosquitto.conf oluşturucuyu kullanın.

İsteğe bağlı: WebSocket’leri etkinleştirme

Tarayıcı client’ları ham TCP kullanamaz. Broker’ınızı bir web sayfasından test etmek için WebSockets protokolüyle ikinci bir listener ekleyin (bkz. MQTT over WebSockets ve MQTT portları):

WebSocket listener’ı
listener 9001
protocol websockets

HTTPS üzerinden sunulan bir sayfanın yalnızca wss:// bağlantıları açabileceğini unutmayın; dolayısıyla public web’deki bir tarayıcı client’ı için o listener’da TLS de gerekecektir. O noktaya gelmeden önce, tarayıcıda bir public test broker’ına karşı MQTT’yi deneyimleyebilirsiniz:

Online MQTT istemcisinde deneyin

Mosquitto dosyalarını nerede tutar

PlatformYapılandırmaLog’lar
Ubuntu / Debian/etc/mosquitto/mosquitto.conf + conf.d//var/log/mosquitto/mosquitto.log ve journalctl -u mosquitto
WindowsC:\Program Files\mosquitto\mosquitto.conflog_dest file neyi gösteriyorsa orası; aksi halde ön planda -v kullanın
macOS (Homebrew)$(brew --prefix)/etc/mosquitto/mosquitto.confbrew services info mosquitto log yolunu gösterir

Platform ne olursa olsun, bir şey başlamadığında terminalde mosquitto -c <path-to-conf> -v çalıştırın: yapılandırma hatalarını bir servis log’unda saklamak yerine doğrudan ekrana yazar. Önce servisi durdurun, aksi halde port zaten kullanımda olduğu için ön plandaki instance başarısız olur.

Yeni bir kurulumda sorun giderme

BelirtiOlası nedenÇözüm
Başka bir host’tan connection refusedLocal only mode (listener yok)listener 1883 ekleyin ve yeniden başlatın
"not authorised" / CONNACK kodu 5Anonim erişim devre dışı-u/-P verin veya bir parola dosyası yapılandırın
"Address already in use"1883 numaralı port başka bir broker’da veya instance’taOnu durdurun veya sudo ss -ltnp | grep 1883 ile kontrol edin
Yapılandırma düzenlemesinden sonra servis başlamıyorYazım hatası veya hatalı dosya izinleriHatayı görmek için mosquitto -c /etc/mosquitto/mosquitto.conf -v komutunu ön planda çalıştırın

Diğer CONNACK kodları ve zaman aşımları için MQTT bağlantı hataları rehberine bakın.

Sonraki adımlar

Sıkça sorulan sorular

Mosquitto neden yalnızca localhost’tan gelen bağlantıları kabul ediyor?

Mosquitto 2.0’dan beri, hiçbir listener yapılandırılmamışsa broker local only modunda başlar. mosquitto.conf dosyasına listener 1883 gibi bir listener satırı ve allow_anonymous true ya da bir password_file ekleyin, ardından broker’ı yeniden başlatın.

Ubuntu’da mosquitto kurmak mosquitto_pub ve mosquitto_sub’ı da kurar mı?

Hayır. Debian ve Ubuntu’da komut satırı client’ları ayrı mosquitto-clients paketinde bulunur. sudo apt install mosquitto-clients ile kurun.

mosquitto.conf dosyası nerede?

Linux’ta /etc/mosquitto/mosquitto.conf, Windows’ta kurulum klasöründe (genellikle C:\Program Files\mosquitto), Homebrew ile ise Homebrew’un etc dizini altındadır; örneğin Apple Silicon’da /opt/homebrew/etc/mosquitto/mosquitto.conf.