安装 Node-RED 以设计物联网领域的流程

Node-RED 是一个允许可视化设计 自动化流程 的平台;它在 物联网Internet of Things)领域被广泛使用,同时也可用于构建 API、服务器服务、集成和原型开发。

流程通过拖放式图形界面创建,连接各种类型的 节点,如输入、输出、逻辑、API、物联网设备等。

几年前我写过几篇关于这个主题的文章 [2][3],但因为我需要在一个项目中使用它,所以决定重新研究这个话题。

期间我更换了测试服务器,因此需要重新安装 Node-RED,这里记录了我遵循的步骤。

在 Ubuntu 上安装 Docker

这次我选择使用 Docker 容器,而不是直接在 Ubuntu 服务器上安装,这样更便于更新和数据迁移。

首先,我使用以下命令安装了 Docker [4],我的服务器当前运行的是 Ubuntu 22.04.5 LTS

# 更新可用软件包列表
sudo apt-get update

# 安装 SSL 证书和 curl(用于下载密钥和访问 HTTPS 仓库)
sudo apt-get install -y ca-certificates curl

# 创建第三方 APT 密钥目录(如果不存在)
sudo install -m 0755 -d /etc/apt/keyrings

# 下载 Docker 官方 GPG 密钥并保存到密钥目录
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc

# 设置密钥的读取权限,允许 APT 使用
sudo chmod a+r /etc/apt/keyrings/docker.asc

# 将 Docker 官方仓库添加到 APT 源列表,使用刚保存的密钥
 echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo \"${UBUNTU_CODENAME:-$VERSION_CODENAME}\") stable" |  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 重新加载软件包列表,包括 Docker
sudo apt-get update

# 安装 Docker 引擎、CLI、containerd 及 Buildx 和 Compose 插件
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 测试:运行一个 Docker 测试容器,验证安装是否成功
sudo docker run hello-world

我以 root 用户安装了 Docker,在生产环境中出于安全考虑,建议使用其他用户安装。

最后一条命令用于验证 Docker 是否正确安装并运行,输出应类似于下图所示:

在 Ubuntu 上安装 Node-RED

接下来,为创建 Node-RED 容器,我执行了以下步骤:

mkdir /root/dockerdata/nodered
cd /root/dockerdata/nodered 
vi docker-compose.yml

docker-compose.yml 文件中,我写入了以下内容:

version: '3.8'
services:
  node-red:
    image: nodered/node-red:latest
    container_name: mynodered
    restart: unless-stopped
    ports:
      - "1880:1880"
    volumes:
      - node_red_data:/data
    environment:
      - TZ=Europe/Rome

volumes:
  node_red_data:

最后,我运行了命令 docker compose up -d 来创建容器。

安装完成后,执行 docker ps 应显示容器状态:

  • 容器处于 运行中 状态。
  • 监听所有网络接口的 1880 端口。
  • 有一个 容器 ID 可用于引用,同时也有一个更易用的名称:mynodered

以下是我常用的一些 Docker 容器管理命令,更多命令可参考此备忘单 [5]

docker ps                             # 显示正在运行的容器
docker ps -a                          # 显示所有容器,包括已停止的

docker start mynodered               # 启动名为 'mynodered' 的容器
docker stop mynodered                # 停止 'mynodered' 容器
docker restart mynodered             # 重启 'mynodered' 容器

docker rm mynodered                  # 删除 'mynodered' 容器(必须先停止)

docker images                        # 列出所有本地 Docker 镜像
docker pull nodered/node-red         # 从 Docker Hub 拉取 'nodered/node-red' 镜像
docker rmi nodered/node-red          # 删除本地 'nodered/node-red' 镜像

docker exec -it mynodered /bin/bash  # 在 'mynodered' 容器中打开交互式 bash shell
                                     # ⚠️ 仅当镜像包含 /bin/bash 时有效

docker system prune                  # 清理未使用的资源(容器、镜像、卷、网络)
                                     # ⚠️ 注意:不慎使用可能删除重要数据

docker volume inspect nodered_node_red_data  # 查看卷 'nodered_node_red_data' 详情

docker volume ls                     # 列出所有 Docker 卷

docker volume rm                     # ❌ 错误:命令不完整,缺少卷名称
docker

服务发布

此时 Node-RED 已运行,可通过 http://localhost:1880 访问(如果服务器有图形界面和浏览器)。但通常服务器没有图形界面,因此需要配置以便从 http://<服务器IP地址>:1880 访问。

这可以通过防火墙设置实现,例如运行:

sudo ufw allow 1880/tcp
sudo ufw status

我选择在 Apache 上创建虚拟主机,通过专用域名和 443 端口(SSL)访问服务。

具体步骤如下:

  1. 修改 DNS,使域名 nodered.claudiobattaglino.it 指向我的 Ubuntu 服务器。
  2. 创建如下 虚拟主机 配置:
    <VirtualHost *:80>
        ServerName nodered.claudiobattaglino.it
    
        ProxyPreserveHost On
        ProxyRequests Off
        ProxyPass / http://localhost:1880/
        ProxyPassReverse / http://localhost:1880/
    
        ErrorLog ${APACHE_LOG_DIR}/nodered_error.log
        CustomLog ${APACHE_LOG_DIR}/nodered_access.log combined
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =nodered.claudiobattaglino.it
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
    </VirtualHost>
    
  3. 使用 Let’s Encrypt 为该虚拟主机安装 SSL 证书。
  4. 重启 Apache 服务。

现在,Node-RED 可通过 https://nodered.claudiobattaglino.it 访问(前提是 Docker 容器已启动)。

设置密码

安装完成后,建议为 Node-RED 界面设置密码保护,因为默认情况下认证是关闭的。

启用认证并设置访问账户的步骤如下:

docker exec -it mynodered /bin/bash # 进入 mynodered 容器的 shell
node-red admin hash-pw # 生成 admin 用户密码(输入所选密码并记录生成的哈希)
vi /data/settings.js # 编辑 settings.js 文件

settings.js 文件中,找到带注释的 adminAuth 部分,写入:

adminAuth: {                                                                    
    type: "credentials",                                                         
    users: [{                                                                    
        username: "admin",                                             
        password: "<之前生成的密码哈希>",
        permissions: "*"           
    }]                                                                 
},

然后重启容器,访问网站验证认证是否生效:

登录账户为 admin / <之前设置的密码>

未来发展

我了解到已经开发了用于查询和交互 大型语言模型(LLM) 的节点。这非常重要,因为它能帮助实现更有用的流程。

我当然会用它来做一些小项目,比如在 物联网植物Internet of Plants)领域创建一个流程,用于监控植物状态。

敬请期待!!!

来源和参考

  1. Node Red,官方网站。
  2. 使用 Node Red 构建 Web 服务:如何提供测量数据,本站博客。
  3. 关于 NodeRed 的一门有趣课程,本站博客。
  4. Ubuntu 上安装 Docker,官方文档。
  5. 终极 Docker 备忘单,来自 DockerLabs
  6. 使用 Let’s Encrypt 创建证书的说明
  7. Node-RED Essentials,官方产品介绍视频,YouTube
  8. Node-RED 可用节点列表,官方网站。

*** 注意:本文为使用 n8n 和 OpenAI 自动流程翻译。

11 months ago

Leave a Reply

Your email address will not be published. Required fields are marked *

评论审核已启用。您的评论可能需要一段时间后才能被显示。