运行在亚马逊网络服务上

本指南将引导您完成在AWS环境中运行Node-RED的步骤。

有两种方法:

  1. 运行在AWS Elastic Beanstalk服务(EB)上
  2. 在Elastic Beanstalk上运行高可用性配置
  3. 在AWS EC2上运行Ubuntu镜像

运行在AWS EBS上

先决条件

  1. 确保您拥有一个已启用Elastic Beanstalk、SQS和S3的AWS账户

  2. 下载EB命令行工具并在本地计算机上安装 - 参见link

  3. 创建AWS凭证并保存到本地文件(~/.aws/config或Usersusername.awsconfig)中,如下所示

[profile eb-cli]
aws_access_key_id = key id
aws_secret_access_key = access key

创建EB环境

  1. 创建一个新目录(例如 demoapp

  2. 进入该目录

  3. 运行 eb init 创建一个新的 Elastic Beanstalk 项目。选择首选区域并使用 node.js 作为平台。 系统会询问您是否希望使用 ssh。如果选择是,请确保您的计算机上已安装 ssh(若您希望生成新的密钥对)。

  4. 在浏览器中登录AWS控制台,选择身份和访问管理(IAM),将AmazonS3FullAccess策略添加到aws-elasticbeanstalk-ec2-role。注意:这将授予EBS对S3的完全访问权限,您可能需要根据自身安全需求调整此策略

创建Node-RED环境

  1. 创建一个包含以下内容的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"
}
  1. 将默认的Node-RED settings.js文件复制到demoapp目录中

  2. 编辑settings.js文件,在module.exports中添加以下条目(将awsRegion设置为eb init中使用的区域,并将demoapp替换为你的应用名称):

     awsRegion: 'eu-west-1',
     awsS3Appname: 'demoapp',
     storageModule: require('node-red-contrib-storage-s3'),
  1. 在命令提示符下,确保您位于应用程序的顶层目录并运行命令eb create;您可能需要指定一个更独特的应用程序名称。这个过程需要较长时间才能完成,但最终会成功返回。

配置Node-RED访问权限

现在可以直接通过应用程序的网页URL访问Node-RED。但这种方式不安全且日志记录效果不佳。我们将改为配置直接访问Node-RED所在EC2实例上的管理端口。

  1. 在AWS控制台中,选择EC2,然后选择安全组。您将看到一组安全组。选择名称与您的环境匹配且描述为"ElasticBeanstalk环境的安全组"的组。选中后,点击"操作",然后选择"编辑入站规则"。将出现包含规则的对话框。添加新规则,将类型设为"所有流量",来源设为"我的IP"。保存该规则。

  2. 选择运行node-red应用的EC2实例。复制其IP地址

  3. 在浏览器中输入IP地址,端口号为8081。这将直接访问node-red管理控制台。

注意:公共IP地址也提供了对node-red应用的访问权限,最佳实践是同时移除该访问权限,即删除端口80的HTTP规则。

您的Node-RED实例现已在EBS上运行。您创建的任何流都将保存到AWS S3,因此您可以拆除环境,并且在重新部署时仍可访问这些流。

在Elastic Beanstalk上运行高可用性服务

此部署选项为您提供一个多节点的Node-RED设置,使用亚马逊弹性文件系统(EFS)实现共享文件系统。由于它在负载均衡器后运行多个节点,您将获得高可用性——如果某个节点宕机,Elastic Beanstalk会自动替换它。

solution diagram

要开始使用,请克隆此处的代码库https://github.com/guysqr/node-red-ha-on-aws并按照简单的说明操作。基础设施由CloudFormation模板为您创建,因此您无需了解太多AWS知识即可完成设置。

此外,该部署选项允许您在https协议下运行Node-RED,并通过Auth0登录(或者您可以轻松切换至内置身份验证或任何兼容Passport的身份提供商)。

在AWS EC2上运行Ubuntu系统

创建基础EC2镜像

  1. 登录 AWS EC2 控制台

  2. 点击‘启动实例’

  3. 在快速启动AMI列表中,选择Ubuntu Server

  4. 选择实例类型 - t2.micro 是一个不错的起点

  5. 在"配置安全组"选项卡中,为端口1880添加一个新的"自定义TCP规则"

  6. 在最后的‘审核’步骤中,点击‘启动’按钮

  7. 控制台将提示您配置一组SSH密钥。选择"创建新的密钥对"并点击"下载密钥对"。您的浏览器将保存.pem文件 - 请妥善保管。最后点击"启动"。

几分钟后,您的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来测试你的实例。注意:可能会遇到一些关于串行节点的错误——这是预期情况,可以忽略。

启动后,您可以通过http://<your-instance-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应用程序——基于这个原理,您还可以参考许多在线指南来探索其他可能性。