MQTT安装部署
2026/1/15大约 3 分钟
MQTT安装部署
本章介绍两种主流 MQTT Broker 的安装部署:EMQX 和 Mosquitto。
EMQX 安装
EMQX 是一款国产开源的大规模分布式 MQTT 消息服务器,支持百万级并发连接。
Docker 安装(推荐)
# 拉取镜像
docker pull emqx/emqx:latest
# 启动容器
docker run -d --name emqx \
-p 1883:1883 \
-p 8083:8083 \
-p 8084:8084 \
-p 8883:8883 \
-p 18083:18083 \
emqx/emqx:latest端口说明:
| 端口 | 协议 | 说明 |
|---|---|---|
| 1883 | MQTT | MQTT TCP 端口 |
| 8083 | WebSocket | MQTT WebSocket 端口 |
| 8084 | WSS | MQTT WebSocket SSL 端口 |
| 8883 | MQTTS | MQTT SSL 端口 |
| 18083 | HTTP | Dashboard 管理界面 |
二进制安装
# CentOS/RHEL
wget https://www.emqx.com/zh/downloads/broker/5.3.0/emqx-5.3.0-el7-amd64.rpm
sudo rpm -ivh emqx-5.3.0-el7-amd64.rpm
# Ubuntu/Debian
wget https://www.emqx.com/zh/downloads/broker/5.3.0/emqx-5.3.0-ubuntu22.04-amd64.deb
sudo dpkg -i emqx-5.3.0-ubuntu22.04-amd64.deb
# 启动服务
sudo systemctl start emqx
sudo systemctl enable emqxmacOS 安装
# 使用 Homebrew
brew install emqx
# 启动
emqx start验证安装
# 查看状态
emqx_ctl status
# 输出示例
# Node 'emqx@127.0.0.1' 5.3.0 is started访问 Dashboard:http://localhost:18083
- 默认用户名:
admin - 默认密码:
public
Mosquitto 安装
Mosquitto 是 Eclipse 基金会的开源 MQTT Broker,轻量级,适合资源受限环境。
Docker 安装
# 拉取镜像
docker pull eclipse-mosquitto:latest
# 创建配置目录
mkdir -p ~/mosquitto/config
mkdir -p ~/mosquitto/data
mkdir -p ~/mosquitto/log
# 创建配置文件
cat > ~/mosquitto/config/mosquitto.conf << EOF
listener 1883
allow_anonymous true
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
EOF
# 启动容器
docker run -d --name mosquitto \
-p 1883:1883 \
-p 9001:9001 \
-v ~/mosquitto/config:/mosquitto/config \
-v ~/mosquitto/data:/mosquitto/data \
-v ~/mosquitto/log:/mosquitto/log \
eclipse-mosquitto:latestLinux 安装
# Ubuntu/Debian
sudo apt update
sudo apt install mosquitto mosquitto-clients
# CentOS/RHEL
sudo yum install epel-release
sudo yum install mosquitto
# 启动服务
sudo systemctl start mosquitto
sudo systemctl enable mosquittomacOS 安装
brew install mosquitto
# 启动服务
brew services start mosquittoWindows 安装
- 下载安装包:https://mosquitto.org/download/
- 运行安装程序
- 以服务方式启动或命令行启动
# 命令行启动
mosquitto -v配置文件详解
EMQX 配置
配置文件位置:/etc/emqx/emqx.conf
## 节点名称
node.name = emqx@127.0.0.1
## 监听端口
listeners.tcp.default = 1883
listeners.ssl.default = 8883
listeners.ws.default = 8083
listeners.wss.default = 8084
## 最大连接数
listeners.tcp.default.max_connections = 1024000
## 认证配置
authentication = [
{
mechanism = password_based
backend = built_in_database
}
]Mosquitto 配置
配置文件位置:/etc/mosquitto/mosquitto.conf
# 监听端口
listener 1883
# WebSocket 端口
listener 9001
protocol websockets
# 允许匿名连接(生产环境应禁用)
allow_anonymous false
# 密码文件
password_file /etc/mosquitto/passwd
# 持久化
persistence true
persistence_location /var/lib/mosquitto/
# 日志
log_dest file /var/log/mosquitto/mosquitto.log
log_type all客户端工具
命令行工具
# Mosquitto 客户端(订阅)
mosquitto_sub -h localhost -t "test/topic" -v
# Mosquitto 客户端(发布)
mosquitto_pub -h localhost -t "test/topic" -m "Hello MQTT"MQTTX
MQTTX 是一款跨平台的 MQTT 5.0 桌面客户端:
# macOS
brew install --cask mqttx
# 或下载安装包
# https://mqttx.app/在线测试工具
- EMQX 提供的在线客户端:http://tools.emqx.io/
- HiveMQ WebSocket 客户端:http://www.hivemq.com/demos/websocket-client/
连接测试
使用 mosquitto_sub/pub 测试
# 终端1:订阅主题
mosquitto_sub -h localhost -p 1883 -t "test/#" -v
# 终端2:发布消息
mosquitto_pub -h localhost -p 1883 -t "test/hello" -m "Hello World"
# 终端1 输出
# test/hello Hello World使用 Python 测试
import paho.mqtt.client as mqtt
# 连接回调
def on_connect(client, userdata, flags, rc):
print(f"Connected with result code {rc}")
client.subscribe("test/#")
# 消息回调
def on_message(client, userdata, msg):
print(f"{msg.topic}: {msg.payload.decode()}")
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("localhost", 1883, 60)
client.loop_forever()Docker Compose 部署
version: '3'
services:
emqx:
image: emqx/emqx:latest
container_name: emqx
ports:
- "1883:1883"
- "8083:8083"
- "8084:8084"
- "8883:8883"
- "18083:18083"
volumes:
- emqx-data:/opt/emqx/data
- emqx-log:/opt/emqx/log
environment:
- EMQX_NAME=emqx
- EMQX_HOST=127.0.0.1
restart: unless-stopped
volumes:
emqx-data:
emqx-log:启动:
docker-compose up -d常见问题
1. 连接被拒绝
Connection refused: Not authorized解决:检查认证配置,确认用户名密码正确或允许匿名连接。
2. 端口被占用
# 查看端口占用
lsof -i :1883
netstat -tlnp | grep 1883
# 杀死占用进程
kill -9 <PID>3. 防火墙问题
# 开放端口
sudo firewall-cmd --add-port=1883/tcp --permanent
sudo firewall-cmd --reload小结
本章介绍了 EMQX 和 Mosquitto 两种 MQTT Broker 的安装部署方式。EMQX 功能强大,适合生产环境;Mosquitto 轻量级,适合开发测试。下一章将介绍 MQTT 客户端的使用。
