如何使用git在Docker上运行Node-Red



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

以下是需求列表:

  • Docker上运行Node-Red
  • 跟踪和备份任务,配置,所有与Git
  • 能够克隆存储库并启动Node-Red,无需任何配置
  • 在我的本地机器上做更改,并通过push到Git来部署它们。

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

和一个主要问题是,当我添加一个新的包到package.jsonNodeRed将不会自动安装它。

我发现的解决方案(变通方法)是基于将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-Redstart命令:

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

在此命令之前,我们将使用自定义docker的npm 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

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

有了这个特性,Git源代码控制被集成到Node-Red实例中,并向您显示更改、丢失的包、提交历史等等。

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

由于它是由Node-Red(预览版)正式支持的解决方案,因此强烈推荐使用它。当然,它不能解决你自动安装新添加的包的问题,但另一方面,它给了你一个更好的控制什么被改变,什么需要安装,什么缺失,在复杂的系统.

最新更新