0

我在我的服务器上运行Node-Red,我希望它遵循部署过程,就像我们对代码所做的那样——在本地工作、进行更改、提交和推送。

以下是要求列表:

  • 在Docker上运行 Node-Red 。
  • 使用Git跟踪和备份任务、配置
  • 无需任何配置即可克隆存储库并启动 Node-Red 。
  • 在我的本地机器上进行更改,并通过推送到Git来部署它们。

为了更准确,我需要将flows.json,settings.json和添加package.json到 git 中。

主要问题之一是当我向 .NodeRed 添加新包时package.jsonNodeRed不会自动安装它。

4

2 回答 2

0

我找到的解决方案(解决方法)是基于添加npm install到 docker 入口点,它是如何工作的?

挂载到本地文件夹

首先,我们要运行Node-Red,并将其卷挂载/data到我们的本地文件夹:

docker run -p 1880:1880 -v $(pwd)/node-red:/data nodered/node-red

现在,如果您从本地git repo运行,您将获得一个名为的文件夹node-red,它将包含所有Node-Red工作区。

Node-Red数据添加到Git

要仅跟踪Node-Red配置文件,您需要将下一个条目添加到您的.gitignore文件中:

node-red/*
!node-red/package.json
!node-red/package-lock.json
!node-red/flows.json
!node-red/flows_cred.json
!node-red/settings.js

所有其他文件都是自动生成的。

在启动时安装缺少的包

现在,最困难的部分。如果您在本地环境中添加了一个新库并推送了更改,那么您希望Node-Red在新库启动之前安装它。

我们将从Node-Red Dockerfile获取原始的Node-Red启动命令:

npm --no-update-notifier --no-fund start --cache /data/.npm -- --userDir /data

在此命令之前,我们将采用为自定义 dockernpm install建议的命令:

npm install --unsafe-perm --no-update-notifier --no-fund --only=production

这是我的最终docker-compose.yml文件,其中包含docker run在开发环境中仅运行此映像的命令行:

node-red:
  # port 1880
  # Dev: docker run -p 1880:1880 -v $(pwd)/node-red:/data --entrypoint="" --env-file .env nodered/node-red /bin/sh -c "npm install --prefix /data --unsafe-perm --no-update-notifier --no-fund --only=production && npm --no-update-notifier --no-fund start --cache /data/.npm -- --userDir /data"
  image: nodered/node-red
  env_file:
    - shared.env
  network_mode: host
  entrypoint: >
    sh -c "
    npm install --prefix /data --unsafe-perm --no-update-notifier --no-fund --only=production
    && npm --no-update-notifier --no-fund start --cache /data/.npm -- --userDir /data"
  environment:
    NODE_RED_CREDENTIAL_SECRET: ${NODE_RED_CREDENTIAL_SECRET}
  volumes:
    - ./node-red:/data
  restart: unless-stopped
于 2021-08-16T04:41:20.460 回答
0

您可以考虑使用名为Projects的新(预览)功能。

借助此功能,Git源代码控制集成到您的Node-Red实例中,并向您显示更改、丢失的包、提交历史记录等。

要启用此功能,您需要在文件中将其打开settings.json

由于它是Node-Red(预览版)官方支持的解决方案,因此强烈推荐。AFAIK,自动安装新添加的软件包并不能解决您的问题,但另一方面,它可以让您更好地控制复杂系统中的更改、需要安装的内容以及缺少的内容。

于 2021-08-16T04:53:32.260 回答