• Docker部署Emqx并配置ssl支持微信小程序


    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
    
    • 1
    • 2
    • 3

    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
    
    • 1
    • 2
    • 3
    • 4

    4 拷贝配置文件

    拷贝配置文件到宿主机,这样修改宿主机的配置文件之后只需要重启容器,配置文件就会生效。左边是容器的路径,右边是要映射宿主机路径。

    把配置文件拷贝出来就是为了之后的ssl证书配置。便于管理。

    docker cp emqx:/opt/emqx/etc /home/emqx
    
    • 1

    5 删除临时容器

    docker rm -f emqx
    
    • 1

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    这里只需要映射出来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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    7 访问测试

    访问http://127.0.0.1:18083

    默认密码为admin/public

    如果要修改密码

    //修改文件,再启动容器
    vim /usr/local/emqx/etc/plugins/emqx_auth_username.conf
    
    • 1
    • 2

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    最好从阿里云或者腾讯云、华为云生成域名证书。证书下载可以下载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
    
    
    • 1
    • 2
    • 3

    重启容器

    docker restart emqx
    
    • 1

    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";
            }
    
    ```
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    11 emqx修改dashboard密码

    emqx管理页面默认用户名密码是:admin/public

    1. 先进入容器内部
    docker exec -it emqx /bin/bash
    
    • 1
    1. 修改管理端密码
    emqx_ctl admins passwd admin admin123
    
    • 1

    emqx的http鉴权和springboot集成

  • 相关阅读:
    零基础可以学设计专业吗,怎么学?
    黑马Java热门面试题微服务(八)
    njs最详细的入门手册:Nginx JavaScript Engine
    设有一个由正整数组成的无序单链表,编写完成一以下功能的算法
    [Vue] 31.混入与自定义指令:编写自定义指令(2)
    电脑一键重装系统发现内存占用率过高怎么办
    同时安装py2和py3-安装多版本python
    磁盘io使用率高问题排查
    stft的窗函数设计要求和方法(COLA)
    前端学习C语言 - 开篇
  • 原文地址:https://blog.csdn.net/qq_35921773/article/details/126892861