0%

从零构建物联网平台-环境构建

  1. 从零构建物联网平台-给个理由先
  2. 从零构建物联网平台-平台架构
  3. 从零构建物联网平台-需求规划、技术选型和系统设计
  4. 从零构建物联网平台-环境构建
  5. 从零构建物联网平台-MQTT消息代理(Message Broker)
  6. 从零构建物联网平台-构建关键组件
  7. 从零构建物联网平台-实现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
12
server {
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项目。

官网: http://mosquitto.org/

docker构建

NODE-RED和Mosquitto的安装和配置比较繁琐,为了方便大家构建这两个基础软件,作者使用docker进行构建,并配置好docker-compose文件。

如果对docker不了解可以访问官网学习或直接在主机上安装构建。

docker官网:https://www.docker.com

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
version: "2.2"

services:
nodered:
# If you are running on RaspBerryPi change the image to
# nodered/node-red-docker:rpi
image: nodered/node-red-docker:latest # 指定镜像版本
container_name: nodered # 命名容器
restart: always # 在容器退出时总是重启容器
network_mode: host # 共享主机的network namespace
user: root # 指定当前用户
ports:
- "1880:1880" # 映射端口
volumes:
- "${PWD}/nodered:/data" # 数据文件持久化到宿主机位置
mosquitto:
image: eclipse-mosquitto:latest # 指定镜像版本
container_name: mosquitto # 命名容器
restart: always # 在容器退出时总是重启容器
network_mode: host # 共享主机的network namespace
ports:
- "1883:1883" # 映射端口
- "9001:9001"
volumes:
- "${PWD}/mosquitto/conf:/mosquitto/config/" # 配置文件持久化到宿主机位置
- "${PWD}/mosquitto/data/:/mosquitto/data/" # 数据文件持久化到宿主机位置
- "${PWD}/mosquitto/log/:/mosquitto/log/" # 日志文件持久化到宿主机位置

在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,并按以下步骤连接测试。

  1. 输入主机IP和端口(以上文docker-compose文件中配置的端口为准)
  2. 点击连接按钮

如连接成功,显示如下:

安全性

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.js

1
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
2
3
$ docker-compose exec node-red node-red-admin hash-pw
>>> Password: ******
... $2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.

将生成的密码复制到setting.js文件的password值中。

重新进入NODE-RED容器安装两个node组件,并重启docker容器。

1
2
3
4
5
6
7
8
$ docker-compose exec node-red bash
>>> cd /data
>>> apk add -U build-base
>>> npm install node-red-node-irc
>>> npm install node-red-node-daemon
>>> exit

$ docker-compose restart

再次访问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
2
3
4
5
$ mkdir -m 777 data/mosquitto
$ cd data/mosquitto
$ mkdir config
$ touch config/mosquitto.conf acl passwd
$ vi config/mosquitto.conf

mosquitto.conf

1
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

acl

1
2
3
4
user pub_user
topic write topic/#
user sub_user
topic read topic/#

坚持原创技术分享,您的支持将鼓励我继续创作!