- 从零构建物联网平台-给个理由先
- 从零构建物联网平台-平台架构
- 从零构建物联网平台-需求规划、技术选型和系统设计
- 从零构建物联网平台-环境构建
- 从零构建物联网平台-MQTT消息代理(Message Broker)
- 从零构建物联网平台-构建关键组件
- 从零构建物联网平台-实现WebSocket通信
有了前文的需求列表和对物联网平台架构的详细了解,现在可以动手了。
本篇涉及到:
- 云主机配置要求
- 安装相关软件
- 创建和配置一个时序数据库
云主机
作者购买的阿里云ECS,配置为2vCPU 512M,操作系统为CentOS7.7 64位。
可以访问阿里云自行购买或购买其他云厂商服务器。
软件安装
基础软件及版本号如下,具体安装流程请自行百度。
软件 | 版本 | 说明 |
---|---|---|
MySQL | 5.7 | 作为时序数据库和关系数据库使用 |
Nginx | 1.16.1 | 作为WEB服务器和反向代理使用 |
node-red | latest | 作为物联网平台基础逻辑编排软件使用 |
mosquitto | latest | 作为MQTT代理服务器使用 |
MySQL
MySQL的概念和使用比较普遍,就不过多说明,相关配置也没有具体要求。后续会根据需求的实现进度创建相关数据库表。
Nginx
Nginx是当前最流行的Web服务器和反向代理服务器。平台构建时使用Nginx统一对外提供服务。
配置文件参考:1
2
3
4
5
6
7
8
9
10
11
12server {
listen 80;
server_name www.***.com; #你的域名
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://127.0.0.1:1880; #指向NODE-RED服务
}
}
node-red
Node-RED 是构建物联网(IOT, Internet of Things)应用程序的一个强大工具,其重点是简化代码块的“连接”以执行任务。它使用可视化编程方法,允许开发人员将预定义的代码块(称为“节点”,Node)连接起来执行任务。连接的节点,通常是输入节点、处理节点和输出节点的组合,当它们连接在一起时,构成一个“流”(Flows)。
Node-RED最初是IBM在2013年末开发的一个开源项目,以满足他们快速连接硬件和设备到Web服务和其他软件的需求——作为物联网的一种粘合剂,它很快发展成为一种通用的物联网编程工具。重要的是,Node-RED已经迅速形成一个重要的、不断增长的用户基础和一个活跃的开发人员社区,他们正在开发新的节点,同时允许程序员复用Node-RED代码来完成各种各样的任务。
Node-RED官网:https://nodered.org
中文网站:https://nodered.17coding.net
mosquitto
Eclipse Mosquitto是一个开源(EPL / EDL许可)消息代理,它实现了MQTT协议版本3.1和3.1.1。Mosquitto重量轻,适用于从低功耗单板计算机到完整服务器的所有设备。
MQTT协议提供了一种使用发布/订阅模型执行消息传递的轻量级方法。这使其适用于物联网消息传递,例如低功率传感器或移动设备,如电话,嵌入式计算机或微控制器。
Mosquitto项目还提供了用于实现MQTT客户端的C库,以及非常流行的mosquitto_pub和mosquitto_sub命令行MQTT客户端。
Mosquitto是Eclipse Foundation的一部分,是一个iot.eclipse.org项目。
docker构建
NODE-RED和Mosquitto的安装和配置比较繁琐,为了方便大家构建这两个基础软件,作者使用docker进行构建,并配置好docker-compose文件。
如果对docker不了解可以访问官网学习或直接在主机上安装构建。
docker官网:https://www.docker.com
docker-compose.yml
1 | version: "2.2" |
在docker-compose目录下执行命令:1
2 docker-compose build
docker-compose up -d
启动成功后,访问你的域名/IP即可访问到NODE-RED页面。
使用MQTT客户端验证mosquitto是否可以正常访问。这里我们使用paho进行验证。paho和mosquitto同属于eclipse iot家族的组件之一,是一个MQTT客户端GUI软件。
官网:https://www.eclipse.org/paho/
Windows客户端下载地址:
https://www.eclipse.org/downloads/download.php?file=/paho/1.4/eclipse-paho-mqtt-c-win64-1.3.1.zip
解压安装完成后,打开paho.exe,并按以下步骤连接测试。
- 输入主机IP和端口(以上文docker-compose文件中配置的端口为准)
- 点击连接按钮
如连接成功,显示如下:
安全性
NODE-RED配置
为保证访问安全,需要配置访问NODE-RED的安全策略。
目录结构1
2
3
4
5
6
7
8
9/docker/node-red-mosquitto/
├── docker-compose.yml
└── data/
├── nodered/
├── flows_cred.json
├── flows.json
├── lib/
│ └── flows
└── settings.js
settings.js1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
module.exports = {
adminAuth: {
type: "credentials",
users: [{
username: "admin",
password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
permissions: "*"
}],
default: {
permissions: "read"
}
},
}
pwssword需要登录到NODE-RED容器中使用node-red-admin hash-pw
命令生成。
1 | docker-compose exec node-red node-red-admin hash-pw |
将生成的密码复制到setting.js文件的password值中。
重新进入NODE-RED容器安装两个node组件,并重启docker容器。
1 | docker-compose exec node-red bash |
再次访问NODE-RED,出现登录页面。使用上文配置的用户名密码登录即可。
mosquitto配置
为了开启mosquitto的安全策略,需要添加/修改配置。
目录结构1
2
3
4
5
6
7
8
9
10/docker/node-red-mosquitto/
├── docker-compose.yml
└── data/
├── mosquitto/
├── acl
├── config/
│ └── mosquitto.conf
├── data/
├── log/
└── passwd
首先创建mosquitto.conf、passwd、acl文件。
1 | mkdir -m 777 data/mosquitto |
mosquitto.conf1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17# 设置不允许任何人访问,连接时需要用户名和密码
allow_anonymous false #false表示不允许匿名连接
password_file /mosquitto/passwd
acl_file /mosquitto/acl
persistence true
# 将数据持久化及日志保存到指定目录
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
# 默认端口是 1883
port 1883
# 以下两行表示可以通过9001端口以websocket的方式连接mosquitto服务
listener 9001
protocol websockets
创建用户及密码1
2
3
4$ cd /docker/node-red-mosquitto/
$ docker-compose exec mosquitto sh
>>> cd /mosquitto
>>> mosquitto_passwd -b pwfile username password
passwd
acl1
2
3
4user pub_user
topic write topic/#
user sub_user
topic read topic/#