Node-RED是一个开源的物联网平台,它是一个基于流程的编程工具,主要用于为物联网 (IoT)设备创建流程。它使用可视化编程方法,允许开发人员将预定义的代码块(称为“节点”,Node)连接起来执行任务。连接的节点,通常是输入节点、处理节点和输出节点的组合,当它们连接在一起时,构成一个“流” (Flows)本文将介绍如何基于华为云云耀云服务L实例的Portainer来快速部署Node-RED平台。
本次实践使用Portainer镜像。
本实践以如下资源规划为例,您可根据实际需要进行调整。
资源 | 配置 | 说明 |
---|---|---|
云耀云服务器L实例 | - CPU:2核 - 内存:2GB - 系统盘:40GiB | Portainer应用镜像运行的最低配置为2核2GB、系统盘40GiB,建议根据您的需求选择云耀云服务器L实例。 |
镜像 | Portainer | 选择Portainer应用镜像。 |
安全组 | 入方向规则:- 协议:TCP- 端口:80、443、1880 - 源地址:0.0.0.0/0 | - 80:允许使用HTTP协议访问网站。- 443:允许使用HTTPS协议访问网站。- 1880:允许访问nodered 服务 |
域名 | domaintest.com | - 如果您仅为个人开发或测试使用,可以不添加域名。- 如果您的应用对外开放,请为云服务器添加并解析域名。 |
参数 | 说明 |
---|---|
区域 | 不同区域的云耀云服务器L实例之间内网互不相通。请就近选择靠近您业务的区域,可减少网络时延,提高访问速度。 |
场景镜像 | 选择Portainer应用镜像。 |
套餐规格 | 选择套餐规格。最低配置为2核2GB、系统盘40GiB。 |
实例名称 | 请自定义方便您识别的实例名称,例如Portainer-Example。 |
附加服务(可选) | 仅选择“购买 云耀云服务器L实例”时支持。根据需要任意选择数据盘、主机安全、云备份附加服务。 |
购买时长 | 单次购买最短为1个月,最长为3年。 |
购买数量 | 设置您购买的云耀云服务器L实例数量。 |
**须知:**在应用镜像启动期间,对云耀云服务器L实例进行重置密码、重启或开关机操作将导致应用镜像管理界面登陆异常。如果管理界面显示正常的引导或登陆界面表示应用镜像已经正常启动。否则请耐心等待1~2分钟,稍后重试。
4. 请参考设置/重置密码,设置云耀云服务器L实例管理员root的密码。
请参考远程登录Linux云服务器(VNC方式)登录云耀云服务器L实例。
因为Nginx安全级别过高,可能导致部分镜像功能不可用。可登录云服务器后执行如下命令解决:
wget -N https://websoft9.github.io/stackhub/scripts/nginx_huaweicloud.sh && bash nginx_huaweicloud.sh
配置安全组的入方向访问规则,确保可以正常访问应用镜像。
优先级 | 策略 | 类型 | 协议端口 | 源地址 | 描述 |
---|---|---|---|---|---|
100 | 允许 | IPv4 | TCP:1880 | 0.0.0.0/0 | 允许访问node-red服务。 |
100 | 允许 | IPv4 | TCP:443 | 0.0.0.0/0 | 允许使用HTTPS协议访问应用管理界面。 |
100 | 允许 | IPv4 | TCP:80 | 0.0.0.0/0 | 允许访问HTTP协议访问应用管理界面。 |
本文介绍如何为服务器添加并解析域名,以便用户可以使用域名访问网站。如果您仅为个人开发或测试使用,可以不添加域名。
至此,您已获得一台完备的Portainer应用云耀云服务器L实例。您可以开始使用Portainer,下面我们继续在该平台上部署Node-RED平台
下面我们以部署Node-RED容器为例,介绍如何使用Portainer进行Docker可视化管理。更多操作详见官网指导。
按图示配置Node-RED容器参数。
单击“Deploy the container”创建Node-RED容器。
等待容器部署成功后,访问 http://{ip}:1880 就能够访问到node-red服务
安装node-red中最常用的dashboard节点
搜索dashboard,点击安装
以下是要准备导入的json流内容
[
{
"id": "24c1f56bc8eb1d36",
"type": "tab",
"label": "双silder 图表",
"disabled": false,
"info": "",
"env": []
},
{
"id": "64c475338976983e",
"type": "ui_slider",
"z": "24c1f56bc8eb1d36",
"name": "",
"label": "水量",
"tooltip": "水量",
"group": "776a423d272e1463",
"order": 0,
"width": "6",
"height": "2",
"passthru": true,
"outs": "all",
"topic": "topic",
"topicType": "msg",
"min": 0,
"max": "100",
"step": 1,
"className": "",
"x": 170,
"y": 260,
"wires": [
[
"c27918d2809fc841"
]
]
},
{
"id": "1353dafc1a7b4a59",
"type": "ui_slider",
"z": "24c1f56bc8eb1d36",
"name": "",
"label": "电量",
"tooltip": "电量",
"group": "776a423d272e1463",
"order": 1,
"width": "6",
"height": "2",
"passthru": true,
"outs": "all",
"topic": "topic",
"topicType": "msg",
"min": 0,
"max": "100",
"step": 1,
"className": "",
"x": 170,
"y": 340,
"wires": [
[
"5b51d2ea7045bff6"
]
]
},
{
"id": "4327197853397112",
"type": "ui_chart",
"z": "24c1f56bc8eb1d36",
"name": "",
"group": "776a423d272e1463",
"order": 2,
"width": "12",
"height": "4",
"label": "chart",
"chartType": "line",
"legend": "true",
"xformat": "HH:mm:ss",
"interpolate": "linear",
"nodata": "",
"dot": false,
"ymin": "0",
"ymax": "100",
"removeOlder": 1,
"removeOlderPoints": "",
"removeOlderUnit": "3600",
"cutout": 0,
"useOneColor": false,
"useUTC": false,
"colors": [
"#1f77b4",
"#f95a15",
"#ff7f0e",
"#2ca02c",
"#98df8a",
"#d62728",
"#ff9896",
"#9467bd",
"#c5b0d5"
],
"outputs": 1,
"useDifferentColor": false,
"className": "",
"x": 630,
"y": 300,
"wires": [
[]
]
},
{
"id": "c27918d2809fc841",
"type": "function",
"z": "24c1f56bc8eb1d36",
"name": "topic水量",
"func": "msg.topic = '水量'\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 380,
"y": 260,
"wires": [
[
"4327197853397112"
]
]
},
{
"id": "5b51d2ea7045bff6",
"type": "function",
"z": "24c1f56bc8eb1d36",
"name": "topic电量",
"func": "msg.topic = '电量'\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 380,
"y": 340,
"wires": [
[
"4327197853397112"
]
]
},
{
"id": "30621a3a429251a3",
"type": "inject",
"z": "24c1f56bc8eb1d36",
"name": "清空图表",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "[]",
"payloadType": "json",
"x": 340,
"y": 460,
"wires": [
[
"4327197853397112"
]
]
},
{
"id": "776a423d272e1463",
"type": "ui_group",
"name": "Default",
"tab": "f00e468d8d4c1d19",
"order": 1,
"disp": true,
"width": "12",
"collapse": false,
"className": ""
},
{
"id": "f00e468d8d4c1d19",
"type": "ui_tab",
"name": "Home",
"icon": "dashboard",
"disabled": false,
"hidden": false
}
]
将要导入的json内容复制到编辑区域,点击导入,再点击部署。
点击右上角的红色部署后,访问ip+1880/ui 即可访问到面板