如何在 git 的多个环境中 运行 Docker 上的 Node-Red
How to run Node-Red on Docker with multiple environments with git
我在我的服务器上 运行 Node-Red,我希望它遵循部署过程,就像我们在本地处理代码一样,使更改、提交和推送。
这是要求列表:
- 运行 Docker.
节点-红色
- 跟踪和备份任务、配置,所有带 Git
- 能够克隆存储库并启动 Node-Red,无需任何配置。
- 在我的本地计算机上进行 更改 ,然后通过推送到 Git.
来部署它们
为了更准确,我需要将 flows.json
、settings.json
和 package.json
添加到 git。
主要问题之一是当我向 package.json
添加新包时,NodeRed 不会自动安装它。
我找到的解决方案(解决方法)是基于将 npm install
添加到 docker 入口点,它是如何工作的?
装载到本地文件夹
首先,我们要 运行 Node-Red,并将其 /data
卷装载到我们的本地文件夹:
docker run -p 1880:1880 -v $(pwd)/node-red:/data nodered/node-red
现在,如果您 运行 从本地 git 存储库,您将得到一个名为 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
在此命令之前,我们将采用 custom 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
文件中 turn it on。
由于是Node-Red官方支持的方案(预览版),强烈推荐。 AFAIK,自动安装新添加的软件包不会解决您的问题,但另一方面,它可以让您更好地控制更改的内容,需要安装的内容以及缺少的内容,in复杂系统.
我在我的服务器上 运行 Node-Red,我希望它遵循部署过程,就像我们在本地处理代码一样,使更改、提交和推送。
这是要求列表:
- 运行 Docker. 节点-红色
- 跟踪和备份任务、配置,所有带 Git
- 能够克隆存储库并启动 Node-Red,无需任何配置。
- 在我的本地计算机上进行 更改 ,然后通过推送到 Git. 来部署它们
为了更准确,我需要将 flows.json
、settings.json
和 package.json
添加到 git。
主要问题之一是当我向 package.json
添加新包时,NodeRed 不会自动安装它。
我找到的解决方案(解决方法)是基于将 npm install
添加到 docker 入口点,它是如何工作的?
装载到本地文件夹
首先,我们要 运行 Node-Red,并将其 /data
卷装载到我们的本地文件夹:
docker run -p 1880:1880 -v $(pwd)/node-red:/data nodered/node-red
现在,如果您 运行 从本地 git 存储库,您将得到一个名为 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
在此命令之前,我们将采用 custom 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
文件中 turn it on。
由于是Node-Red官方支持的方案(预览版),强烈推荐。 AFAIK,自动安装新添加的软件包不会解决您的问题,但另一方面,它可以让您更好地控制更改的内容,需要安装的内容以及缺少的内容,in复杂系统.