【问题标题】:How to run Node-Red on Docker with multiple environments with git如何使用 git 在具有多个环境的 Docker 上运行 Node-Red
【发布时间】:2021-08-16 04:41:20
【问题描述】:

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

这里是要求列表:

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

为了更准确,我需要在 git 中添加 flows.jsonsettings.jsonpackage.json

其中一个主要问题是当我向package.json 添加新包时,NodeRed 不会自动安装它。

【问题讨论】:

    标签: node-red infrastructure-as-code gitops


    【解决方案1】:

    我找到的解决方案(解决方法)是基于将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
    

    在此命令之前,我们将采用npm installcustom docker 建议的命令:

    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
    

    【讨论】:

      【解决方案2】:

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

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

      要启用此功能,您需要在settings.json 文件中输入turn it on

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

      【讨论】:

      • autoInstallModules: true 添加到 settings.js 将安装 Node-RED 用户目录中 package.json 中缺少的任何模块
      • 你确定吗?根据我的理解(和测试),它会这样做,前提是它会看到这些包在.config.nodes 文件中使用,并且这个文件不应该用 git AFAIK 备份。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-29
      • 1970-01-01
      • 2019-06-23
      • 2022-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多