[MQTT] 阿里云服务器搭建MQTT Broker 服务器
目录
在阿里云ECS 云服务器上搭建EMQX MQTT Broker环境,包括如下几个步骤,我们依次进行介绍**
- 安装docker,方便部署应用
- 安装docker portainer, 图形化管理docker
- 安装EMQX
- 【可选】安装nginx-proxy-manager 反向代理管理系统,方便外网访问
- EMQX 安全配置和用户管理
以上都需要远程登陆阿里云服务器(Ubuntu 22.04.4 LTS),方法不在此赘述
安装docker
1.更新软件包
在终端中执行以下命令来更新Ubuntu软件包列表和已安装软件的版本:
sudo apt update
sudo apt upgrade
2.安装docker依赖
Docker在Ubuntu上依赖一些软件包。执行以下命令来安装这些依赖
apt-get install ca-certificates curl gnupg lsb-release
3.添加Docker官方GPG密钥
执行以下命令来添加Docker官方的GPG密钥:
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
4.添加Docker软件源
执行以下命令来添加Docker的软件源:
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
5.安装docker
执行以下命令来安装Docker:
apt-get install docker-ce docker-ce-cli containerd.io
6.运行docker
我们可以通过启动docker来验证我们是否成功安装。命令如下:
systemctl start docker
7.查看docker版本
我们可以通过下面的命令来查看docker的版本
sudo docker version
安装docker portainer社区版本
docker 传统上需要使用命令行进行管理,docker portainer 提供了图形化的界面进行容器的安装和管理
1.使用docker search 命令查找可用的镜像
docker search portainer
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
portainer/portainer This Repo is now deprecated, use portainer/p… 2517
portainer/portainer-ce Portainer CE - a lightweight service deliver… 2244
portainer/agent An agent used to manage all the resources in… 234
portainer/portainer-ee Portainer BE - a fully featured service deli… 110
我们需要安装的是portainer/portainer-ce
2.拉取所需的镜像
docker pull portainer/portainer-ce
3.创建portainer 数据卷
docker volume create portainer_data
4.运行portainer
docker run -d -p 9000:9000 --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
将容器端口9000映射到主机端口9000,可使用http://server-ip:9000 访问portainer Dashboard
🛡️ 服务器防火墙需开放端口9000
安装EMQX
1.新建数据卷,用于持久化EMQX 的数据
进入到portainer 的网页管理界面,在”Volumes”新建一个名为”emqxdatalog”的数据卷
2.新建容器EMQX
在”Container”新建一个名为”emqx”的容器
Image处填入“emqx/emqx”

Manual network port publishing处新增两个端口映射
18083端口是用于EMQX 的配置界面
1883用户后续的MQTT 连接
Advanced container settings 下Volumes 处挂载持久化配置文件

Restart policy 选择Always,随主机一起启动

部署
点击“Deply the container”进行部署
查看状态
在Volumes 处可以查看容器的运行状态
可使用http://server-ip:18083 访问EMQX Dashboard配置界面
默认用户名:admin
默认密码:public
登录后需重新设置密码
🛡️ 服务器防火墙需开放端口18083和1883
【可选】安装nginx-proxy-manager 反向代理管理系统,方便外网访问
使用IP+端口的方式既不安全,也不容易记忆,因此可以安装nginx-proxy-manager,使用反向代理
将域名访问代理到相关的域名+端口
🏁 在域名的DNS解析中,将域名指向该服务器的IP
例如
emqx.swwtech.cn 指向本服务器的IP地址
1.新建数据卷,用于持久化EMQX 的数据
进入到portainer 的网页管理界面,在”Volumes”新建一个名为”nginxproxymanager”的数据卷
2.新建容器
在”Container”新建一个名为”nginx-proxy-manager-zh”的容器
Image处填入“chishin/nginx-proxy-manager-zh”

Manual network port publishing处新增三个端口映射
81端口是用于nginx-proxy-manager 的配置界面
80端口和443端口分别是HTTP和HTTPS协议所使用的端口
Advanced container settings 下Volumes 处挂载持久化配置文件

Restart policy 选择Always,随主机一起启动

部署
点击“Deply the container”进行部署
查看状态
在Volumes 处可以查看容器的运行状态
🛡️ 服务器防火墙需开放端口80,81和443 用于外网访问
此时可以使用http://server-ip:81 访问nginx-proxy-manager 配置界面
默认用户名:admin@example.com
默认密码:changeme
登录后需重新设置密码
新建代理服务

后续就可以使用emqx.swwtech.cn 代替访问 http://server-ip:18083 EMQX 管理界面
EMQX 安全配置和用户管理
EMQX 支持多种MQTT连接方式,其中包括基于TLS 的加密连接,如果需要TLS加密通讯,需要进行TLS证书的生成和相关的配置
📑 TLS证书生成请参考:https://www.swwtech.cn/ProductTest/TlsCertificate/
EMQX 开启TLS双向认证
在EMQX 管理页面,进入到“监听器”配置界面

删除其他监听器配置,只保留类型为SSL 的监听器,并进入其配置页面
- 类型设置为SSL
- 监听地址设置为0。0.0.0:1883
- 双向认证进行勾选使能
- 强制验证对端证书设置为TRUE
- 重新设置为CA和服务器证书、秘钥
然后点击更新,使能TLS
EMQX 用户管理
EMQX 管理页面,进入到“客户端认证”配置界面,创建Password-Based 的认证方式,数据源选择“内置数据库”,其他保持默认

在新建的数据库处,点击用户管理,新建需要的MQTT 客户端用户
至此, EMQX 作为MQTT Broker 服务器搭建完成,MQTT 客户端可使用创建的证书+用户名/密码 与服务器进行连接,发布订阅数据