CentOS 7 完整部署开源 MQTT 服务器 EMQX 指南(2025实战版)

目录

前言

环境准备

[1. 系统要求](#1. 系统要求)

[2. 更新系统并安装必要工具](#2. 更新系统并安装必要工具)

[安装 EMQX](#安装 EMQX)

[方式一:Yum 安装(官方推荐)](#方式一:Yum 安装(官方推荐))

[1. 添加 EMQX 官方软件源](#1. 添加 EMQX 官方软件源)

[2. 执行安装](#2. 执行安装)

[方式二:Docker 安装](#方式二:Docker 安装)

[启动与管理 EMQX 服务](#启动与管理 EMQX 服务)

访问仪表盘并配置防火墙

[1. 访问 Dashboard](#1. 访问 Dashboard)

[2. 配置防火墙 (firewalld)](#2. 配置防火墙 (firewalld))

验证安装是否成功

[1. 网页控制台验证](#1. 网页控制台验证)

[2. 客户端工具连接验证](#2. 客户端工具连接验证)

后续重要的安全配置建议

常见问题与排错思路

总结


前言

在物联网(IoT)项目开发中,MQTT 协议因其轻量、高效、可靠的特点,成为了设备间通信的首选。而 EMQX 作为一款大规模分布式物联网 MQTT 消息服务器,以其高性能、高扩展性和内置的 Web 管理控制台,深受开发者喜爱。

本文将从零开始,详细介绍如何在 CentOS 7 系统上安装、部署并初步配置 EMQX,助你搭建一个稳定可靠的 MQTT 服务环境。

环境准备

1. 系统要求

在开始前,请确保你的环境满足以下基本条件:

  • 操作系统: CentOS 7 系统,并能正常访问网络。

  • 系统权限 : 拥有 root 用户权限或具有 sudo 权限的普通用户。

  • 硬件配置 : 最低要求 2GB 内存10GB 可用磁盘空间。

2. 更新系统并安装必要工具

首先,使用 yum 更新系统软件包,并安装 yum-utils,它包含管理仓库的实用工具。

bash 复制代码
sudo yum update -y
sudo yum install -y yum-utils

安装 EMQX

推荐通过 Yum 方式进行安装,这种方式能自动解决依赖问题,便于后续的升级和维护。官方也为 Docker 方式提供了便捷支持。

方式一:Yum 安装(官方推荐)

1. 添加 EMQX 官方软件源
bash 复制代码
# 导入 GPG 密钥以验证包的完整性和来源
sudo rpm --import https://repos.emqx.io/gpg.pub

# 为 CentOS 7 系统添加相应的 EMQX 社区版软件源
sudo yum-config-manager --add-repo https://repos.emqx.io/emqx-ce/redhat/centos/7/emqx-ce.repo
2. 执行安装
bash 复制代码
sudo yum install emqx -y

等待命令行进度完成,EMQX 便已成功安装至系统中。

方式二:Docker 安装

如果你更习惯容器化部署,只需一条命令即可快速启动。

bash 复制代码
docker run -d --name emqx \
  -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 \
  -v /acowbo/emqx/data:/opt/emqx/data \
  -v /acowbo/emqx/log:/opt/emqx/log \
  --user root \
  emqx/emqx:latest

注意--user root 参数是为了规避部分系统环境下的权限问题,但在安全要求较高的生产环境中,建议通过配置用户命名空间等方式来进行更细粒度的权限管理。


启动与管理 EMQX 服务

安装完成后,使用 systemctl 命令来管理 EMQX 服务,这是 CentOS 7 上最标准的方式。

bash 复制代码
# 启动 EMQX 服务
sudo systemctl start emqx

# 设置 EMQX 开机自启
sudo systemctl enable emqx

# 查看服务运行状态(按 'q' 键退出查看)
sudo systemctl status emqx

当终端输出中出现 active (running) 字样时,代表服务已成功启动并正在运行。

其他常用的管理命令:

bash 复制代码
sudo systemctl stop emqx      # 停止服务
sudo systemctl restart emqx   # 重启服务

访问仪表盘并配置防火墙

1. 访问 Dashboard

EMQX 默认提供了一个功能强大的 Web 管理控制台(Dashboard),方便你对服务器进行可视化监控与配置。

在浏览器中访问:http://<你的服务器IP地址>:18083

  • 默认用户名admin

  • 默认密码public

2. 配置防火墙 (firewalld)

为保证外部客户端及浏览器能正常访问 EMQX 服务,需要在系统防火墙中开放相应端口。

bash 复制代码
# 逐个开放 EMQX 所需的主要服务端口
sudo firewall-cmd --permanent --add-port=1883/tcp  # MQTT TCP 标准连接
sudo firewall-cmd --permanent --add-port=8883/tcp  # MQTT TCP/SSL 加密连接
sudo firewall-cmd --permanent --add-port=8083/tcp  # MQTT WebSocket 连接
sudo firewall-cmd --permanent --add-port=8084/tcp  # MQTT WebSocket/SSL 加密连接
sudo firewall-cmd --permanent --add-port=18083/tcp # Dashboard 管理控制台

# 重新加载防火墙规则,使上述配置立即生效
sudo firewall-cmd --reload

各端口及其功能说明如下:

端口 协议与核心用途 是否加密
1883 TCP 端口,用于传统 MQTT 设备与服务端通信
8883 TCP 端口,标准 MQTT 通信的加密升级版 是 (TLS/SSL)
8083 WebSocket 端口,用于 Web 应用或小程序连接
8084 WebSocket 端口,Web 应用安全加密连接 是 (TLS/SSL)
18083 HTTP 端口,专用于 EMQX Dashboard 管理控制台

验证安装是否成功

1. 网页控制台验证

成功登录 Dashboard 后,若能正常看到集群状态、连接数、消息吞吐量等运行指标,即说明 EMQX 核心功能运行正常。

2. 客户端工具连接验证

你可以使用官方出品的 MQTTX 客户端,或 Dashboard 自带的 "问题分析 " → "WebSocket 客户端 " 工具来测试连接。填入你的服务器 IP 和端口 1883,点击连接。若连接成功,则宣告 MQTT 服务已完整就绪。


后续重要的安全配置建议

⚠️ 安全预警 :EMQX 的默认配置开启了匿名认证。这意味着任何知道你的服务器 IP 和 MQTT 端口的人或设备都可以直接连接并发布/订阅消息,这在生产环境中是致命风险。请务必在投入使用前完成以下基础安全设置。

  1. 修改 Dashboard 管理员密码 :首次登录 Dashboard 后,请立即进入"系统设置"修改 admin 用户的默认密码。

  2. 配置客户端认证 :在 Dashboard 的 "访问控制 " → "客户端认证" 中,创建认证规则。你可以选择基于用户名/密码、客户端ID等多种方式,来阻止非法的匿名连接。

  3. 配置客户端授权(ACL) :在 "访问控制 " → "客户端授权" 中,你可以精细地划定不同客户端的发布(Publish)和订阅(Subscribe)权限在不同的主题(Topic)上,实现权限最小化。


常见问题与排错思路

  • 无法访问 Dashboard 18083 页面 :检查防火墙端口是否开放,确认 EMQX 服务状态是否为 active (running)

  • MQTT 客户端连接失败 :首先检查 MQTT 端口 1883 的防火墙配置。若已配置认证,请检查客户端是否传递了正确的凭证。

  • 服务启动后立即退出 :可能是系统内存不足(不满足2GB最低要求),或有其他进程占用了相同端口。可使用 sudo journalctl -u emqx 命令查看详细日志进行排查。


总结

至此,你已经在 CentOS 7 系统上成功地完成了一台 EMQX MQTT 消息服务器的安装、基础配置和功能验证。你已经拥有了一个高性能的物联网消息中间件,接下来可以根据你的具体业务场景,深入探索它的规则引擎、数据桥接、集群架构等高级特性了。

希望这篇手把手的教程对你有帮助!如果在安装过程中遇到问题,欢迎在评论区留言交流。

相关推荐
淼淼爱喝水1 小时前
openEuler 环境下 Ansible Playbook 实战:批量创建用户并修改 Shell 属性
linux·运维·服务器·openeuler·playbook
计算机安禾1 小时前
【Linux从入门到精通】第30篇:综合案例:编写一个Linux系统体检脚本
linux·运维·服务器
草履虫君1 小时前
wsl的装龙虾方式,接入飞书的时候需要在wsl环境装飞书插件,那么node模式接入飞书,需要怎么装飞书插件?
服务器·经验分享·飞书
海的预约1 小时前
Bootloader应用分析
linux·运维·服务器
时空未宇1 小时前
海鸥派顺利运行YOLO11S
linux·运维·服务器
j_xxx404_2 小时前
Linux:深入解析ELF文件结构
linux·运维·服务器
ShineWinsu2 小时前
对于Linux:进程间通信IPC(共享内存)的解析
linux·服务器·面试·笔试·进程·共享内存·ipc
熊文豪2 小时前
FinceptTerminal 深度解析:用 C++20 + Qt6 + Python 打造的开源 Bloomberg 终端
python·开源·c++20·bloomberg·finceptterminal
代码中介商2 小时前
Linux 进程间通信:共享内存与消息队列完全指南
linux·运维·服务器