物聯網開發筆記 (四) MQTT with Docker
苦惱時,所幸翻到了 MQTT 這個東西,可以替代 Firebase 雲端推播

上一篇文章講到目前卡在 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"
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
Password
若要讓裝置使用 username
、password
連入,可以進到 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
重新啟動 docker 即可生效