< 返回新闻公共列表
Docker部署Emqx并配置ssl支持微信小程序
发布时间:2023-06-27 14:00:56
1 端口介绍
1883:MQTT 协议端口
8084:MQTT/SSL 端口
8083:MQTT/WebSocket 端口
8080:HTTP API 端口
18083:Dashboard 管理控制台端口
2 拉取镜像
docker pull emqx/emqx:latest # 也可以拉去指定版本 docker pull emqx/emqx:v4.0.0
3 启动临时容器
其他小知识
选项
选项简写
说明
–detach
-d
在后台运行容器,并且打印容器id。
–interactive
-i
即使没有连接,也要保持标准输入保持打开状态,一般与 -t 连用。
–tty
-t
分配一个伪tty,一般与 -i 连用。
docker run -dit --name emqx -p 1883:1883 -p 8081:8081 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx:latest # 避免跟rabbitmq的1883冲突 docker run -dit --name emqx -p 1884:1883 -p 8081:8081 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx:latest
4 拷贝配置文件
拷贝配置文件到宿主机,这样修改宿主机的配置文件之后只需要重启容器,配置文件就会生效。左边是容器的路径,右边是要映射宿主机路径。
把配置文件拷贝出来就是为了之后的ssl证书配置。便于管理。
docker cp emqx:/opt/emqx/etc /home/emqx
5 删除临时容器
docker rm -f emqx
6 重新启动容器
在挂载之前要记得先创建需要挂载的文件夹
挂载全路径
docker run -d \ --name emqx \ -p 1883:1883 \ -p 8883:8883 \ -p 8083:8083 \ -p 8084:8084 \ -p 8081:8081 \ -p 18083:18083 \ -v /usr/local/emqx/etc:/opt/emqx/etc \ -v /usr/local/emqx/lib:/opt/emqx/lib \ -v /usr/local/emqx/data:/opt/emqx/data \ -v /usr/local/emqx/log:/opt/emqx/log \ emqx/emqx:latest
这里只需要映射出来etc目录,用于ssl的配置
docker run -dit \ --name emqx \ -p 1883:1883 \ -p 8883:8883 \ -p 8083:8083 \ -p 8084:8084 \ -p 8081:8081 \ -p 18083:18083 \ -v /home/emqx/etc:/opt/emqx/etc \ emqx/emqx:latest
7 访问测试
访问http://127.0.0.1:18083
默认密码为admin/public
如果要修改密码
//修改文件,再启动容器 vim /usr/local/emqx/etc/plugins/emqx_auth_username.conf
8 放入证书文件
通过自制证书或者去磊宇云签发免费的证书下载下来,获得
bash脚本自动生成证书
#/bin/sh rm -f ca.* rm -f emqx.* rm -f client.* # 生成自签名的CA key和证书 openssl genrsa -out ca.key 2048 openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.pem -subj "/C=CN/ST=Jiangsu/L=Suzhou/O=XXX/CN=SelfCA" #openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.pem # 生成服务器端的key和证书 openssl genrsa -out emqx.key 2048 openssl req -new -key ./emqx.key -config openssl.cnf -out emqx.csr openssl x509 -req -in ./emqx.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out emqx.pem -days 3650 -sha256 -extensions v3_req -extfile openssl.cnf # 生成客户端key和证书 openssl genrsa -out client.key 2048 openssl req -new -key client.key -out client.csr -subj "/C=CN/ST=Jiangsu/L=Suzhou/O=XXX/CN=client" openssl x509 -req -days 3650 -in client.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out client.pem
最好从磊宇云或者腾讯云、华为云生成域名证书。证书下载可以下载nginx、tomcat……。这里我们下载其他类证书。
这里www.baidu.cn.key和www.baidu.cn.pem是从磊宇云下载下来的证书文件。
直接找到宿主机映射出来的配置文件 /usr/local/emqx/etc/emqx.conf
在这里配置证书的目录
listener.wss.external.keyfile = etc/certs/my/www.baidu.cn.key listener.wss.external.certfile = etc/certs/my//www.baidu.cn.pem
重启容器
docker restart emqx
9 测试
这里要注意配置了ssl证书后,要想使用ssl连接wss就不能使用ip访问wss了,必须使用域名!!!
10 添加微信小程序支持
这一步可以不用做。如果使用我的mqttjs
有的mqttjs没有输入端口号的地方,所以这里在nginx添加如下转发。通过https://域名/mqtt一样可以连接
``` location = /mqtt { # 8083就是我们的emq的websocket的端口号 proxy_pass http://my.yuming.cn:8083; proxy_redirect off; proxy_set_header Host my.yuming.cn:8083; proxy_set_header Sec-WebSocket-Protocol mqtt; # 这个是与你的 js客户端的库有关系,本博文的不需要,为了兼顾以后小伙伴,我这里注释了下! #more_clear_headers Sec-WebSocket-Protocol; # 这些都是 websocket必须要配置的 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } ```
11 emqx修改dashboard密码
emqx管理页面默认用户名密码是:admin/public
先进入容器内部
docker exec -it emqx /bin/bash
修改管理端密码
emqx_ctl admins passwd admin admin123
emqx的http鉴权和springboot集成