Toto je starší verze dokumentu!
Mosquitto
Instalaci Mosquitto jsem provedl skrz Docker. Tady je docker-compose.yml:
version: '3.6' networks: default: driver: bridge ipam: driver: default nextcloud: driver: bridge internal: true ipam: driver: default services: mosquitto: container_name: mosquitto build: context: ./.templates/mosquitto/. args: - MOSQUITTO_BASE=eclipse-mosquitto:latest restart: unless-stopped environment: - TZ=${TZ:-Etc/UTC} ports: - "8883:8883" volumes: - ./volumes/mosquitto/config:/mosquitto/config - ./volumes/mosquitto/data:/mosquitto/data - ./volumes/mosquitto/log:/mosquitto/log - ./volumes/mosquitto/pwfile:/mosquitto/pwfile
Warning
V rámci instalace řeším rovnou SSL certifikáty a tomu odpovídá i porty v docker-compose.yml. Pokud bych chtěl nainstalovat verzi bez SSL, tak volím porty 1883:1883.
Vygenerování self-signed certifikátů
Protože budu Mosquitto provozovat pouze v domácí síti, budu potřebovat self signed certifikát. Podrobnosti jsem rozepsal zde, nicméně omezím se nyní na postup pouze pro náš účel.
K vytvoření nezbytných certifikátů pomůže tento skript, ve kterém je potřeba změnit IP adresu na IP adresu zařízení, na kterém MQTT server Mosquitto poběží.
#!/bin/bash IP="192.168.1.22" SUBJECT_CA="/C=CZ/ST=Brno/L=Brno/O=majordomus/OU=CA/CN=$IP" SUBJECT_SERVER="/C=CZ/ST=Brno/L=Brno/O=majordomus/OU=Server/CN=$IP" SUBJECT_CLIENT="/C=CZ/ST=Brno/L=Brno/O=majordomus/OU=Client/CN=$IP" function generate_CA () { echo "$SUBJECT_CA" openssl req -x509 -nodes -sha256 -newkey rsa:2048 -subj "$SUBJECT_CA" -days 3650 -keyout ca.key -out ca.crt } function generate_server () { echo "$SUBJECT_SERVER" openssl req -nodes -sha256 -new -subj "$SUBJECT_SERVER" -keyout server.key -out server.csr openssl x509 -req -sha256 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650 } generate_CA generate_server
Platnost certifikátu jsem raději nastavil na 10 let. Po spuštění kódu budu mít ve více souborů. Nicméně pro MQTT server Mosquitto budu potřebovat:
- ca.crt
- server.crt
- server.key
Pro klienta (aby se připojil k MQTT serveru) mi bude stačit soubor:
- ca.crt