[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 的监听器,并进入其配置页面

  1. 类型设置为SSL
  2. 监听地址设置为0。0.0.0:1883
  3. 双向认证进行勾选使能
  4. 强制验证对端证书设置为TRUE
  5. 重新设置为CA和服务器证书、秘钥

然后点击更新,使能TLS

EMQX 用户管理

EMQX 管理页面,进入到“客户端认证”配置界面,创建Password-Based 的认证方式,数据源选择“内置数据库”,其他保持默认

在新建的数据库处,点击用户管理,新建需要的MQTT 客户端用户

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

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。