在 Amazon Web Services 上运行

本指南将引导您完成在 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 命令行并安装在您的本地计算机上 - 请参阅链接

  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 访问

现在可以直接通过应用程序的 Web URL 访问 Node-RED。但是,这种方式不安全,并且对于日志记录效果不佳。因此,我们将配置直接访问其使用的 EC2 实例上 Node-RED 的管理端口。

  1. 在 AWS 控制台中,选择 EC2,然后选择安全组。您将看到一组安全组。选择一个名称为您的环境名称且描述为“Security Group for ElasticBeanstalk Environment”的安全组。选中后,单击“Actions”,然后单击“Edit inbound settings”。一个带有规则的对话框将会出现。添加一条新规则。将类型设置为“all traffic”,源设置为“my 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 设置,使用 Amazon Elastic File System (EFS) 实现共享文件系统。因为它在负载均衡器后面运行多个节点,您将拥有高可用性——如果一个节点发生故障,Elastic Beanstalk 会自动替换它。

solution diagram

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

此外,此部署选项使您能够通过 https 运行 Node-RED,并通过 Auth0 登录(或者您可以轻松切换到内置身份验证或任何与 Passport 兼容的 ID 提供商)。

在 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 来测试您的实例。注意:您可能会看到一些关于 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 应用程序——基于这个原则,您可以使用许多在线指南来学习其他可能的配置。