背景

最近接触物联网,感觉太有意思了,打算弄个用手机控制的遥控小车,
手机与小车之前通讯采用MQTT,服务器就需要安装mosquitto,于是就有了这篇文章,期间经历了不为人知的心酸与苦楚,早上起来,到晚上6点才整成功,记录一下中间过程。

环境

linux centos7.4

1. 直接安装mosquitto

这种方式是linux直接安装安装mosqutto软件的方式,
但是我这边配置ws,wss, SSL证书的教程没有,只支持到mqtt消息订阅与发布
总结就是操作简单,很容易就安装,并投入使用。
如果需要配置ws,wss,SSl等,请直接去第二步骤。
(第二部操作会比较繁琐,功能也能强大,比如支持微信小程序需要的wss加密链接)

需要提前准备一下基础环境

cmake用来编译代码,经常用

yum install gcc-c++
yum install cmake
yum install openssl-devel

创建一个soft文件夹,用来存放下载的文件

mkdir soft

下载mosquitto源码

cd soft
wget http://mosquitto.org/files/source/mosquitto-1.4.10.tar.gz

有好多个版本,找个喜欢的数字下载吧,官网地址

编译安装

tar -xzvf mosquitto-1.4.10.tar.gz
cd mosquitto-1.4.10
cmake ..
make
make install

启动mosquitto

简单配置一下

mv /etc/mosquitto/mosquitto.conf.example /etc/mosquitto/mosquitto.conf

启动程序
-d 表示挂后台,根据自己情况要不要加

mosquitto -c /etc/mosquitto/mosquitto.conf -d

默认端口是1883
查看一下这个端口是否被占用,能看到tcp,tcp6两行基本上就算成功了。

netstat -tunlp|grep 1883
tcp        0      0 0.0.0.0:1883            0.0.0.0:*               LISTEN      18987/mosquitto
tcp6       0      0 :::1883                 :::*                    LISTEN      18987/mosquitto

再用软件MQtt.fx简单测试一下我们部署的mqtt服务;
发布一个hello 主题的 消息

注意

如果中间出现什么找不到libmosquitto.so.1的话,输入以下指令修改一下libmosquitto.so的位置

sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
sudo ldconfig

就这么简单?

虽然成功了,但是有个问题需要思考一下,目前为止好像还没有验证账号,随便哪个人都能用呢。
现在来配置账号
修改一下配置文件"/etc/mosquitto/mosquitto.conf",没有的话自己创建一个“touch” 指令。

#禁止匿名登录
allow_anonymous false
#存放用户的文件
password_file  /etc/mosquitto/pwfile.example
#权限文件
acl_file  /etc/mosquitto/aclfile.example

创建账号

test 账号,test123 是密码

mosquitto_passwd -b /mosquitto/config/pwfile.conf test test123

然后重新启动一下mosquitto服务。就可以了。

还没结束

先说说需求吧,在手机点开一个连接,进入控制界面,点击按钮实现 小车的前进后退等功能。
这时候需要实时交互,但是浏览器不支持mqtt 协议,只有websockets能用,这时候就到这个文章的重点了,我得给mosquitto 支持websockets!

踩坑正式开始

网上搜了一大堆文章都是说直接修改下面这个配置文件

/etc/mosquitto/mosquitto.conf

然后我就改了,加了websockets进去

#MQTT协议
port 1883
#websockets协议
# 主要是这两行
listener 8888
protocol websockets
#
#禁止匿名登录
allow_anonymous false
#存放用户的文件
password_file  /etc/mosquitto/pwfile.example
#权限文件
acl_file  /etc/mosquitto/aclfile.example

然后启动mosquitto,报错了

Error: Websockets support not available. Error found at /etc/mosquitto/mosq...

到处搜解决办法,看了几个都是说在mosquitto安装目录里面config.mk修改配置 no=>yes

# Build with websockets support on the broker.
WITH_WEBSOCKETS:=no

改成yes后,重新编译文件,运行mosquitto,还是一样的报错!就是这个问题花了一下午时间都在找解决办法,后面还不得不尝试各个版本的mosquitto,最后还是失败!

没办法了,后来无意间看到docker,就想去用docker试试了。

2. Docker 安装mosquitto,并配置websockets

eclipse-mosquitto这个镜像应该是docker上面使用最多的,功能也很强大。
可以支持:
mqtt: http 非加密型
mqtt: https 加密型
ws: websockets 的http 非加密型
wss: websockets的https 加密型

平时使用的mqtt一般都是使用1883端口
如果开启websockets就是mqtt支持websocket, 例如:http://mqtt.xxx.com
如果开启websockets并配置证书密钥就是mqtt支持websockets,例如:https:mqtt.xxx.com
像微信小程序只支持https,这也是我写下这篇文章的来源了。

1. 下载镜像

docker pull eclipse-mosquitto

2. 创建一些配置文件的映射文件

每次重启,都从linux环境中的文件映射给docker容器里面程序
注意一下当前为止,pwd 指令。我用的是home目录

mkdir -p  /home/mosquitto/config
mkdir -p  /home/mosquitto/data
mkdir -p   /home/mosquitto/log

3. 分配权限

chmod -R 755   /home/mosquitto
chmod -R 777   /home/mosquitto/log

4. 创建mqtt的配置文件

这个是我自己用的,支持http与https的

# 关闭匿名模式
allow_anonymous false
# 指定密码文件
password_file /mosquitto/config/pwfile.conf
#持久化本地存储
persistence true
persistence_location /mosquitto/data
#日志的保存文件
log_dest file /mosquitto/log/mosquitto.log#log_type error
#log_type warning
#log_type notice
#log_type subscribe
#log_type unsubscribe# mqtt 这个端口是mqtt默认用的,尽量别改
listener 1883
protocol mqtt# websocket 端口根据自己需要修改
listener 8887
protocol websockets
#websockets_log_level all# websocket ssl 端口根据自己需要修改
listener 9001
protocol websockets
cafile /mosquitto/data/mqtt.xxx.com.ca.crt
keyfile /mosquitto/data/mqtt.xxx.com.server.key
certfile /mosquitto/data/mqtt.xxx.com.server.crt# mqtt ssl ,端口根据自己需要修改
listener 8883
protocol mqtt
cafile /mosquitto/data/mqtt.xxx.com.ca.crt
keyfile /mosquitto/data/mqtt.xxx.com.server.key
certfile /mosquitto/data/mqtt.xxx.com.server.crt
tls_version tlsv1.2

5. 生成加密证书

不难发现上面的配置文件只要是涉及到https ssl的两个端口都要证书
生成证书指令,这边需要的是linux的openssl指令(没有的自己装一下)。
这边有个需要注意的地方是,创建两个key的时候记得用不同的地址
ca文件

1.  创建ca文件 :openssl genrsa -des3 -out ca.key 2048
2. 创建crt证书文件:openssl req -new -x509 -days 1826 -key ca.key -out ca.crt
3. 创建服务器用的key文件:openssl genrsa -out server.key 2048
4. 服务器需要的scr文件: openssl req -new -out server.csr -key server.key
5. 服务器需要的crt文件:openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 360

实际上配置mqtt ssl的时候只需要三个文件,在第四步列出来了.
其他几个文件如何使用呢?
举个例子,我的客户端,也就是windows电脑有个mqtt软件,
打开SSL/TLS那个标签,就可以选择用ca证书文件的方式访问服务器的htts端口了

6. 运行容器

这里很长一条指令,主要映射mqtt端口1883,其他三个端口根据自己需要配置,配置文件,数据文件,日志文件

docker run -it --name=mosquitto --privileged  -p 1883:1883 -p 8886:8886 -p 8887:8887 -p 8888:8888-v /home/mosquitto/config/mosquitto.conf:/mosquitto/config/mosquitto.conf  -v /home/mosquitto/data:/mosquitto/data -v /home/mosquitto/log:/mosquitto/log -d  eclipse-mosquitto

这时候应该还没有用户账号,我们去添加几个

7. 添加账号

# 进入docker 容器
docker exec -it mosquitto sh
# 添加账号密码
mosquitto_passwd -b /mosquitto/config/pwfile.conf test test1233
# 创建完成后退出容器,ctrl+p 然后 ctrl+q

8. 重启就完成了

docker restart mosquitto

看看效果

总结

如果用nginx代理那两个ssl的端口的话要加上https哦!
原身安装mosquitto其实很简单,但是其中开启websockets的配置,很坑,配置文件里面只有一个配置yes or no来控制,也没有其他的说明。即使把no 改成yes也不行,最后很是无奈,用上docker,太TM香了。期间查了好多网页打开过几百个链接,百度出来的结果都是一个模子出来的(拉机),后来出去找到了eclipse-mosquitto的官网,看了几篇教程,终于配置好了htts。

服务器安装MQTT服务器并启用websockets,配置SSL相关推荐

  1. 将证书文件上传至服务器任意位置,Nginx配置ssl证书

    获取证书 以腾讯云为例,解析好域名后,前往证书申请页ssl证书申请,因为我的域名也是在腾讯云,所以点击申请后,可以配置自动DNS验证,如果域名不在腾讯云则需要去域名商添加解析,具体看文档指引. 申请完 ...

  2. 在 Apache Tomcat 服务器上启用 HTTPS 或 SSL 正确方式的分步指南 – 端口 8443

    我开始使用Apache Tomcat已经快 12 年了.我相信当我做我的一年级项目时,它是在 Tomcat 版本上1.x.现在它已经在 version 上8.0.在我的日常工作生活中,我大部分时间都在 ...

  3. 实训报告:DHCP服务器的启用和配置

    一.实训目的 1.熟练安装DHCP服务器角色: 2.熟练运用DHCP服务器管理控制台对DHCP服务器进行管理: 3.掌握DHCP客户端的配置. 二.实训设备 1.1台交换机: 2.2台计算机(其中做服 ...

  4. Spring Boot项目配置ssl证书及自定义ssl端口号

    好吧,一切不带s的http裸奔都是耍流氓. 我们知道在一个Web服务器(e.g. Tomcat, Websphere, Nginx)上配置ssl证书很容易,那么如何在SpringBoot这种内嵌了服务 ...

  5. 我是如何将网站全站启用Https的?-记录博客安装配置SSL证书全过程

    评论»   文章目录 为什么要Https 如何选择Https 安装部署SSL证书 平滑过渡Https 搜索引擎的响应 启用Https小结 正如大家所看到的,部落全站已经启用了Https访问了,连续几天 ...

  6. 阿里云服务器nginx配置ssl步骤htts

    阿里云服务器中要配置ssl 1.先在服务器安装nginx,安装步骤自行搜索,很多. 2.获取ssl证书,可以参考https://mp.csdn.net/console/editor/html/8791 ...

  7. JavaWeb项目部署服务器并配置ssl证书教程

    JavaWeb项目部署服务器并配置ssl证书教程 相信大家学了1.2年的编程后可能已经学会了自己写web项目,但是也只能在自己本地玩耍,十分的打击学习热情(主要是没办法跟朋友装杯).本文是一篇较为详细 ...

  8. 基于mosquitto的MQTT服务器---SSL/TLS 单向认证+双向认证

    配置单/双向认证 1.生成证书 使用如下shell 来生成证书: # * Redistributions in binary form must reproduce the above copyrig ...

  9. 【手把手教你搭建MQTT服务器 + 域名备案 + 申请与部署SSL证书】

    文章目录 购买云服务器实现远程登录 搭建emqx服务器 模拟数据交互测试 购买.解析域名 域名备案 申请SSL证书 emqx配置SSL证书 结语 购买云服务器实现远程登录 购买云服务器 可以按照自己情 ...

最新文章

  1. 感悟Windows7
  2. 【Error】InterfaceError (0, '')
  3. TfidfVectorizer中的参数norm默认值是l2
  4. Cloudera maneger登录页面后的操作是什么?
  5. WINDOWS下与LINUX下写C程序的区别
  6. 便捷式计算机无线功能按钮,TP-Link TL-MR13U便携式无线路由器Client模式设置
  7. bzoj1572 [Usaco2009 Open]工作安排Job
  8. 解决Python3 pip list 红色DEPRECATION
  9. linux glibc安装mysql_Linux安装MySQL-5.6.24-1.linux_glibc2.5.x86_64.rpm
  10. 西门子S7200PLC连接CHNet-S7200PD实现以太网通信配置方法
  11. Linux 端蓝牙调试
  12. c语言 word转pdf,超简单的Word转换成PDF技巧,可惜很多人还不会
  13. 透明OLED显示器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  14. 为什么有符号整型最小值是-32768?
  15. 多平台的敏感信息监测工具-GShark
  16. APP微信支付报错《商户号该产品权限未开通,请前往商户平台产品中心检查后重试》
  17. 我只是个普通大学生,想进BAT究竟有多难?
  18. 计算机硬盘只显示c盘,电脑只显示C盘我们应该怎么办
  19. taobao.trades.sold.get-查询卖家已卖出的交易数据(根据创建时间),淘宝店铺卖出订单查询API接口,淘宝R2接口,淘宝oAuth2.0交易接口代码分享
  20. 量化金融论文:Astock

热门文章

  1. ADS仿真加载线型移相器
  2. could not open Java\jre7\lib\amd64\jvm.cfg解决方案
  3. cisco 常用OID
  4. 如何手动运行dll文件,非注册dll
  5. 谷歌浏览器(chrome)搜图插件发布啦 以后再也不用为眼前的图片出自何处烦恼了。
  6. 建好网站后该怎么进行网站运营管理
  7. 机器学习常用六大算法
  8. vue+海康威视web3.2无插件版本使用
  9. 本地服务器打开laravel项目报错的解决方法
  10. MySQL消费两次会员以及两次消费时间间隔