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 消息服务器的安装、基础配置和功能验证。你已经拥有了一个高性能的物联网消息中间件,接下来可以根据你的具体业务场景,深入探索它的规则引擎、数据桥接、集群架构等高级特性了。

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

相关推荐
大树8822 分钟前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
小宇宙Zz1 小时前
Maven依赖冲突
java·服务器·maven
下班走回家2 小时前
DeepSeek 开源模型的突破与思考:从技术到生态的全面进化
人工智能·开源
ApacheSeaTunnel2 小时前
实战演示 | 基于 Apache SeaTunnel 与 Apache DolphinScheduler 实现 MySQL 到 Doris 离线定时增量同步
大数据·mysql·开源·doris·数据集成·seatunnel·数据同步
古城小栈3 小时前
Unix 与 Linux 异同小叙
linux·服务器·unix
国产化创客3 小时前
ESP32 CameraWebServer 原生摄像头项目全解析
物联网·开源·嵌入式·实时音视频·智能硬件
程序猿阿伟3 小时前
《Chrome离线扩展安装的底层逻辑与场景落地指南》
服务器·网络·chrome
凡人叶枫4 小时前
Effective C++ 条款42:了解 typename 的双重意义
java·linux·服务器·c++
AC赳赳老秦4 小时前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw
2601_961875244 小时前
决战申论100题2026|最新|范文
linux·容器·centos·debian·ssh·fabric·vagrant