- docker安装mqtt
docker pull emqx/emqx:v4.0.5
docker run -tid --name emqx -p 1883:1883 -p 8083:8083 -p 8081:8081 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx:v4.0.5
http://ip:18083
- 云服务器开启相关端口
- emqx关闭匿名认证,开启username插件
- 使用服务器ip + 18083访问成功
- 使用vscode + rest client插件管理用户,测试成功
- 使用docker安装nginx
docker run -p 80:80 --name my-nginx --restart=always -v /home/mydocker/mynginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/mydocker/mynginx/conf/conf.d:/etc/nginx/conf.d -v /home/mydocker/mynginx/html:/usr/share/nginx/html -v /home/mydocker/mynginx/logs:/var/log/nginx -d nginx
- 创建桥接网络
# 查看docker网桥
docker network ls
# 默认情况下有如下3种
NETWORK ID NAME DRIVER SCOPE
9f518686edff bridge bridge local
f8fe62505b26 host host local
28f688f90902 none null local
# 不是以上3种,则为自定义网桥
# 将加入到自定义网桥的镜像,从自定义网桥中移除
docker network rm docker镜像id
# 删除之前自定义的网桥
docker network rm NETWORK_ID
# 清理此容器的网络占用
docker network disconnect --force 网络模式 容器名称
docker network disconnect --force bridge containerName
# 简查是否还有同名容器占用
docker network inspect 网络模式
docker network inspect bridge
# 服务器创建网络
docker network create -d bridge my-bridge
# 将nginx添加到网络
docker network connect my-bridge my-nginx
# 将mqtt添加到网络
docker network connect my-bridge emqx
# 查看nginx的网络
[root@VM-12-15-centos conf.d]# docker inspect 608a3cb87dca | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.4",
"IPAddress": "172.17.0.4",
"IPAddress": "172.18.0.2",
# 查看emqx的网络
[root@VM-12-15-centos conf.d]# docker inspect 235d39c2a8c4 | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.3",
"IPAddress": "172.17.0.3",
"IPAddress": "172.18.0.4",
# 测试
docker exec -it my-nginx ping emqx
docker exec -it emqx ping my-nginx
# 或则直接进入容器中ping
- 配置nginx并重启
- 关闭云服务上的emqx相关的端口
# 访问该地址会通过nginx转发到emqx的登录页面
http://1xx.xxx.xxx.xxx:80/
- 配置nginx,并重启,转发到用户管理接口
- 在关闭云服务器emqx相关端口的情况下,测试
@hostname = 1xx.xxx.xxx.xxx
@port=8081
@contentType=application/json
@userName=admin
@password=public
#############查看已有用户认证数据##############
GET http://{{hostname}}:{{port}}/api/v4/auth_username HTTP/1.1
Content-Type: {{contentType}}
Authorization: Basic {{userName}}:{{password}}
### 通过nginx转发
GET http://1xx.xxx.xxx.xxx:80/mqtt HTTP/1.1
Content-Type: {{contentType}}
Authorization: Basic {{userName}}:{{password}}
- 测试成功