V prvním a druhém dílu seriálu o MQTT jsem používal veřejný MQTT broker. To se hodí pro demo, ale produkční systém na tom stavět nechcete. Pokud pro svůj MQTT server nechcete používat hostované řešení, můžete si rozjet vlastní server. Asi nejpoužívanějším softwarem pro tento účel je Mosquitto. Je to open source multiplatformní projekt, který funguje na Windows, Linuxu i Mac OS. Ukážu vám, jak Mosquitto nainstalovat na Linux, nastavit na něm TLS zabezpečení a WebSockets rozhraní.
Následující postup funguje na aktuálním Ubuntu a Raspberry Pi OS. Měl by přiměřeně fungovat i na ostatních distribucích.
Instalace
1. | Ve většině distribucí Linuxu je Mosquitto součástí standardních repozitářů. Mělo by tedy stačit nainstalovat balíčky
|
---|---|
Pokud výše uvedený příkaz skončí chybou, postupujte podle návodu pro vaši distribuci na webu mosquitto.org. |
|
2. | Mosquitto nyní běží s výchozími nastaveními. Máte k dispozici utility Následujícím příkazem spusťte subcriber tak, že bude naslouchat na topicu
|
3. | Znak
To druhé číslo (zde |
Seznam svých běžících procesů si můžete vypsat pomocí příkazu
|
|
4. | Následujícím příkazem pošlete pomocí publishera zprávu
|
5. | Zpráva bude vypsána na konzoli. Vypsal ji tam proces |
6. | Pomocí
|
7. | Pomocí |
Nastavení firewallu
MQTT obvykle využívá následující porty:
- Standardní port pro nešifrované spojení:
1883
- MQTT over TLS (šifrované):
8883
- MQTT over QUIC:
14567
- MQTT over Web Sockets: výchozí HTTPS port
443
, případně jiné, jako8884
nebo8443
, pokud na výchozím běží jiný web server.
8. | V tomto návodu budeme pracovat s porty
|
---|
Nastavení TLS
Název serveru v příkladu je mqtt.ztech.cz
. Upravte postup podle vašeho názvu serveru.
9. | Abyste mohli používat Mosquitto s TLS (ať už přímo nebo přes WebSockets), musíte mít certifikát vydané důvěryhodnou certifikační autoritou. Pokud takový certifikát máte, musíte ho zpřístupnit Mosquittu, například tak, že vytvoříte následující soubory:
Následující postup předpokládá, že máte certifikáty získané od Let's Encrypt CA pomocí utility Certbot. Pokud máte certifikáty získané jinak, např. od vlastní CA, nakopírujte je na výše uvedené cesty a pokračujte krokem 16. |
---|
Zpřístupnění certifikátů získaných od Let's Encrypt
Pokud nemáte validní certifikát, můžete ho zdarma získat od Let's Encrypt certifikační autority. Pokud na stejném serveru běží web server a má veřejnou adresu, je to triviální. Pokud ne, můžete použít například postup popsaný v článku Získání certifikátů od Let’s Encrypt pomocí dns-01 challenge s Cloudflare.
Certbot certifikáty ve výchozím nastavení umístí do adresáře /etc/letsencrypt/live/
a nastaví práva tak, že k privátnímu klíči má přístup jenom root
. Nicméně můžeme nastavit deploy hook, který vždy po získání nových certifikátů tyto nakopíruje do /etc/mosquitto/certs
a dá práva uživateli mosquitto
.
10. | Vytvořte soubor
|
---|---|
11. | Zadejte do souboru následující příkazy (místo
|
12. | Stiskem Ctrl+S uložte soubor a Ctrl+X ukončete editor. |
13. | Následujícím příkazem nastavte soubor jako spustitelný:
|
14. | Následujícím příkazem (místo
|
15. | Následujícím příkazem si zkontrolujte, že vše v pořádku proběhlo:
Měli byste vidět něco jako:
|
Konfigurace Mosquitta
16. | Následujícím příkazem vytvořte konfigurační soubor Mosquitta:
|
---|---|
Soubor se může jmenovat jakkoliv, ale musí být umístěn v adresáři |
|
17. | Zadejte do něj následující obsah (upravte cestu k certifikátům a privátnímu klíči dle potřeby). Za textem v posledním řádku ( allow_anonymous true # Non-secure listener listener 1883 # TLS-enabled listener listener 8883 certfile /etc/mosquitto/certs/cert.pem cafile /etc/mosquitto/certs/chain.pem keyfile /etc/mosquitto/certs/privkey.pem |
Volba |
|
18. | Stiskem Ctrl+S uložte soubor a Ctrl+X ukončete editor. |
19. | Následujícím příkazem Mosquitto restartujete
|
20. | Že vše funguje si můžete ověřit podobně jako v kroku 2. Místo Příkaz pro spuštění subscribera na pozadí je:
Příkaz pro zaslání zprávy do topicu
|
Nastavení MQTT over WebSockets
Pokud chcete využívat MQTT přímo z prohlížeče, musí být MQTT server dostupný pomocí HTTPS a WebSockets.
21. | Následujícím příkazem otevřete k editaci konfigurační soubor Mosquitta:
|
---|---|
22. | Přidejte do něj následující konfiguraci (a nezapomeňte na prázdný řádek na konci souboru): allow_anonymous true # Non-secure listener listener 1883 # TLS-enabled listener listener 8883 certfile /etc/mosquitto/certs/cert.pem cafile /etc/mosquitto/certs/chain.pem keyfile /etc/mosquitto/certs/privkey.pem # WebSockets+TLS listener listener 8884 protocol websockets certfile /etc/mosquitto/certs/cert.pem cafile /etc/mosquitto/certs/chain.pem keyfile /etc/mosquitto/certs/privkey.pem |
23. | Stiskem Ctrl+S uložte soubor a Ctrl+X ukončete editor. |
24. | Následujícím příkazem Mosquitto restartujte, aby se projevila změna konfigurace:
|
25. | Že vše funguje přes WebSockets si můžete ověřit např. z webového klienta od HiveMQ. |