橙汁小窝

在Linux上通过Docker搭建MQTT服务

关于MQTT

MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。该协议轻量、简单、开放和易于实现,这些特点使它适用范围非常广泛。 常用于机器对机器和物联网的数据传输。

搭建MQTT服务器

这边使用的是开源的EMQX 在Linux上使用docker搭建EMQX容器(这边笔者使用的是Ubuntu-Server-24.04.1)

安装前的准备

检查Docker是否安装

docker安装前
显示docker未安装

检查系统是否兼容

Docker需要以下 Ubuntu 版本之一的 64 位版本:

Ubuntu Oracular 24.10
Ubuntu Noble 24.04 (LTS)
Ubuntu Jammy 22.04 (LTS)
Ubuntu Focal 20.04 (LTS)

兼容x86_64(或 amd64)、armhf、arm64、s390x 和 ppc64le(ppc64el)架构。

开始安装Docker

设置 Docker 的apt存储库

sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

安装Docker

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

在Do you want to continue? [Y/n] 输入Y

验证Docker安装

输入

docker --version

docker-v
显示Docker版本即为安装完毕。

配置Docker镜像源

使用docker拉取镜像时候,因为docker默认的镜像源是Dockerhub,而这个网站在域外。所以有时候会卡在中途死活下载不完,我们也可以对docker换国内镜像源(国内镜像源都死光了)。

sudo vim /etc/docker/daemon.json

将内容修改为

{
    "registry-mirrors": [
        "https://docker.1ms.run",
        "https://docker.xuanyuan.me"
    ]
}

重启docker

sudo systemctl daemon-reload
sudo systemctl restart docker

开始安装EMQX

拉取EMQX

运行以下命令拉取EMQX的Docker镜像

docker pull emqx/emqx:5.8.5
//指定版本 5.8.5
docker pull emqx/emqx:latest
//版本最新

pull-emqx

配置持久化目录

创建/opt/emqx/data和/opt/emqx/log两个文件夹并修改权限和所有者

mkdir -p /opt/emqx/data
mkdir -p /opt/emqx/log
sudo chmod -R 775 /opt/emqx/data /opt/emqx/log
sudo chown -R 1000:1000 /opt/emqx/data /opt/emqx/log

运行EMQX

docker run --name emqx \
  -p 1883:1883 -p 8083:8083 \
  -p 8084:8084 -p 8883:8883 \
  -p 18083:18083 \
  -v /opt/emqx/data:/opt/emqx/data \
  -v /opt/emqx/log:/opt/emqx/log \
  emqx/emqx:5.8.5

配置EMQX平台设置

EMQX默认会使用以下协议端口:

1883: MQTT 协议端口
8883: MQTT/SSL 端口
8083: MQTT/WebSocket 端口
8084: MQTT/wss 端口

访问http://你的服务器ip:18083
默认登录账户admin,密码public。
第一次登陆会要求修改密码,可以修改或者不修改。
访问http://你的服务器ip:18083/#/authentication
右上角创建客户端验证,选择Password-Based,再选择内置数据库(如果您有其他数据库可以用其他数据库实现集群客户端验证),配置参数默认,确定后在用户管理中添加需要使用EMQX做MQTT数据转发的客户端。

测试MQTT发布/订阅

笔者使用的是MQTTBox进行测试
点击Create MQTT Client
mqttbox-settings
主要需要配置的是以下几项

Protocol mqtt的传输协议
Host 服务器的地址
Username 客户端验证的用户名
Password 客户端验证的密码

点击Save后左上角显示为绿色connected即为连接MQTT平台成功
mqttbox-ui
界面左侧为MQTT的发布主题功能,右侧为订阅主题功能
在Topic to publish和Topic to subscribe输入相同的主题,点击右侧的Subscribe即可订阅该主题
在Payload内输入你自定义好的消息点击Publish发布 mqttbox-push
如右侧能正常收到主题消息代表MQTT服务器搭建完成,未来可以直接接入物联网设备

发表评论

电子邮件地址不会被公开。 必填项已用*标注