本指南将带您完成在 AWS 环境中运行 Node-RED 的步骤。
主要有三种方法:
- 在 AWS Elastic Beanstalk 服务上运行
- 在具有高可用性的 Elastic Beanstalk 上运行
- 在 AWS EC2 的 Ubuntu 镜像上运行
在 AWS EBS 上运行
先决条件
创建 EB 环境
- 创建一个新目录(例如
demoapp)
- 进入该目录
- 运行
eb init 创建一个新的 Elastic Beanstalk 项目。选择首选区域并使用 node.js 作为平台。系统会询问您是否希望使用 ssh。如果您希望生成新的密钥对,请确保计算机上已安装 ssh
配置权限
登录到浏览器中的 AWS 控制台,选择 Identity and Access Management,然后将 AmazonS3FullAccess 策略添加到 aws-elasticbeanstalk-ec2-role。注意:这授予了从 EBS 到 S3 的完全访问权限,您可能需要根据自身安全需求定制此策略
创建 Node-RED 环境
- 创建包含以下内容的
package.json 文件(将 "demoapp" 替换为您的应用名称):
{
"name": "demoapp",
"version": "1.0.0",
"description": "node-red demo app",
"main": "",
"scripts": {
"start": "./node_modules/.bin/node-red -s ./settings.js"
},
"engines": {
"node": "10.x"
},
"dependencies": {
"node-red": "1.1.x",
"aws-sdk": "2.4.x",
"node-red-contrib-storage-s3": "0.0.x",
"when": "3.7.x"
},
"author": "",
"license": "ISC"
}
- 将默认的 Node-RED
settings.js 文件复制到 demoapp 目录
- 编辑
settings.js 文件,在 module.exports 中添加以下条目(将 awsRegion 设置为在 eb init 中使用的区域,并将 demoapp 替换为您的应用名称):
awsRegion: 'eu-west-1',
awsS3Appname: 'demoapp',
storageModule: require('node-red-contrib-storage-s3'),
- 在命令提示符下,确保您位于应用程序的顶级目录中并运行命令
eb create;您可能需要指定一个更独特的应用程序名称。这需要很长时间运行,但最终会成功返回
配置 Node-RED 访问
Node-RED 现在可以直接从应用程序的 web url 访问。但这不安全且日志记录效果不佳。我们将配置直接访问其使用的 ec2 实例上的 Node-RED 管理端口。
- 在 AWS 控制台中,选择 EC2,然后选择安全组。您将看到一组安全组。选择描述为"Security Group for ElasticBeanstalk Environment"且名称与环境匹配的安全组
- 选择后,单击"Actions",然后选择"Edit inbound settings"。将出现一个包含规则的对话框
- 添加新规则。将类型设置为"all traffic",源设置为"my ip"。保存规则
- 选择运行 Node-RED 应用程序的 EC2 实例。复制其 IP 地址
- 在浏览器中输入 IP 地址,端口为 8081。这将提供对 Node-RED 管理控制台的直接访问
注意:公共 IP 地址也提供对 Node-RED 应用程序的访问,同时删除该访问(即端口 80 的 HTTP 规则)将是良好的实践。
您的 Node-RED 实例现在在 EBS 上运行。您创建的任何流都将保存到 AWS S3,因此您可以拆除环境,并在重新部署时访问这些流。
在具有高可用性的 Elastic Beanstalk 上运行
此部署选项为您提供多节点 Node-RED 设置,使用 Amazon Elastic File System 作为共享文件系统。由于它在负载均衡器后面运行多个节点,您将获得高可用性 - 如果一个节点死亡,Elastic Beanstalk 会自动替换它。
[解决方案示意图]
要开始使用,请克隆此处的存储库:https://github.com/guysqr/node-red-ha-on-aws 并按照简单说明操作。基础设施由 CloudFormation 模板为您创建,因此您无需了解太多 AWS 知识即可设置。
此外,此部署选项使您能够在 https 下运行 Node-RED,并通过 Auth0 登录(或者您可以轻松切换到内置身份验证或任何 Passport 兼容的 ID 提供程序)。
在 AWS EC2 上使用 Ubuntu 运行
创建基础 EC2 镜像
- 登录 AWS EC2 控制台
- 单击"Launch Instance"
- 在快速启动 AMI 列表中,选择 Ubuntu Server
- 选择实例类型 - t2.micro 是一个好的起点
- 在"Configure Security Group"选项卡上,为端口 1880 添加新的"Custom TCP Rule"
- 在最后的"Review"步骤中,单击"Launch"按钮
- 控制台将提示您配置一组 SSH 密钥。选择"Create a new key pair"并单击"Download key pair"。您的浏览器将保存 .pem 文件 - 请妥善保管。最后,单击"Launch"
几分钟后,您的 EC2 实例将运行。在控制台中,您可以找到实例的 IP 地址。
设置 Node-RED
下一个任务是登录实例,然后安装 node.js 和 Node-RED。
- 按照 AWS 指南连接到您的实例
- 登录后,您需要安装 node.js 和 Node-RED:
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs build-essential
sudo npm install -g --unsafe-perm node-red
- 此时,您可以通过运行
node-red 来测试您的实例。注意:您可能会收到有关 Serial 节点的一些错误 - 这是预期的,可以忽略
- 启动后,您可以在
http://<您的实例IP>:1880/ 访问编辑器
要使 Node-RED 在实例重启时自动启动,您可以使用 pm2:
sudo npm install -g --unsafe-perm pm2
pm2 start `which node-red` -- -v
pm2 save
pm2 startup
注意:最后一个命令将提示您运行进一步的命令 - 请务必按照说明操作。
后续步骤
本指南仅触及了如何在 EC2 中配置实例的表面。Node-RED"只是"一个暴露 HTTP 服务器的 node.js 应用程序 - 基于这一原则,您可以使用许多在线指南来了解其他可能性。