, ,

物聯網開發筆記 (四) MQTT with Docker

苦惱時,所幸翻到了 MQTT 這個東西,可以替代 Firebase 雲端推播

物聯網開發筆記 (四) MQTT with Docker
Photo Source : What is MQTT (twilio.com)

上一篇文章講到目前卡在 ESP32 的設備產 Firebase token 時在 4G + WiFi 的環境下無法穩定使用,剛好家父目前僅需要可以遠端開關電磁閥即可,所以這邊先將 Firebase 先放一邊,採用 MQTT 方式先實作。

原本想試試看 IBM 的 Internet of Things Platform ,但無奈帳號註冊卡關,所以這邊就先用 Docker 架設私人的 MQTT 伺服器。

version: '3.7'

services:
  mosquitto:eclipse-mosquitto:latest
  container_name: mqtt
  volumes:
    - ./config:/mosquitto/config
    - ./data:/mosquitto/data
    - ./log:/mosquitto/log
  ports:
    - "1883:1883"
    - "8883:8883"
    - "8884:8884"
    - "9001:9001"
docker-compose.yml

Directories

在鏡像中建立三個目錄分別是

  • /mosquitto/config
  • /mosquitto/data
  • /mosquitto/log

用於配置、持久化存儲和日誌。

Configuration

運行 image 時,若要使用自定義配置,請將配置掛載到 /mosquitto/config/mosquitto.conf

# 開啟資料存放在地端
persistence true

# 設定資料庫位置
persistence_location /mosquitto/data/

# log 位置
log_dest file /mosquitto/log/mosquitto.log
mosquitto.conf

Password

若要讓裝置使用 usernamepassword 連入,可以進到 Docker Image 終端機(bin/sh)中下指令

cd usr/bin
mosquitto_passwd -c ../mosquitto/config/passwd_file user
終端機指令
  • -c:會新建一個新的檔案,若已存在則會覆蓋現有的檔案。只是想新增使用者到已經存在的帳密檔,無需此參數。
  • /mosquitto/config/passwd_file:檔案的路徑。
  • user:要創建的使用者名稱。
# 取消匿名使用者的登入權限
allow_anonymous false   

# 指定帳號密碼檔案
password_file /mosquitto/config/passwd_file  
mosquitto.conf 需要加入這些

重新啟動 docker 即可生效