From aa524d7aa22b25b4f805ba1e806b6e0372c92af1 Mon Sep 17 00:00:00 2001 From: Dave Conway-Jones Date: Fri, 4 Oct 2019 10:30:41 +0100 Subject: [PATCH] Add env var for safe and projects, update README, bump to 1.0.1 to close #133 to close #141 --- .docker/Dockerfile.alpine | 11 +- .github/no-response.yml | 13 ++ CONTRIBUTING.md | 26 +-- README.md | 322 +++++++++++++------------------- docker-custom/Dockerfile.custom | 9 +- docker-custom/README.md | 19 +- docker-custom/package.json | 6 +- package.json | 6 +- 8 files changed, 177 insertions(+), 235 deletions(-) create mode 100644 .github/no-response.yml diff --git a/.docker/Dockerfile.alpine b/.docker/Dockerfile.alpine index a3b7592c..846450ff 100644 --- a/.docker/Dockerfile.alpine +++ b/.docker/Dockerfile.alpine @@ -39,7 +39,7 @@ FROM base AS build # Install Build tools RUN apk add --no-cache --virtual buildtools build-base linux-headers udev python && \ - npm install --unsafe-perm --no-update-notifier --only=production && \ + npm install --unsafe-perm --no-update-notifier --no-audit --only=production && \ /tmp/remove_native_gpio.sh && \ cp -R node_modules prod_node_modules @@ -77,9 +77,12 @@ RUN chown -R node-red:node-red /usr/src/node-red && \ USER node-red # Env variables -ENV NODE_RED_VERSION=$NODE_RED_VERSION -ENV FLOWS=flows.json -ENV NODE_PATH=/usr/src/node-red/node_modules:/data/node_modules +ENV NODE_RED_VERSION=$NODE_RED_VERSION \ + NODE_PATH=/usr/src/node-red/node_modules:/data/node_modules \ + FLOWS=flows.json + +# ENV NODE_RED_ENABLE_SAFE_MODE=true # Uncomment to enable safe start mode (flows not running) +# ENV NODE_RED_ENABLE_PROJECTS=true # Uncomment to enable projects option # User configuration directory volume VOLUME ["/data"] diff --git a/.github/no-response.yml b/.github/no-response.yml new file mode 100644 index 00000000..a3939863 --- /dev/null +++ b/.github/no-response.yml @@ -0,0 +1,13 @@ +# Configuration for probot-no-response - https://github.com/probot/no-response + +# Number of days of inactivity before an Issue is closed for lack of response +daysUntilClose: 14 +# Label requiring a response +responseRequiredLabel: needs-more-info +# Comment to post when closing an Issue for lack of response. Set to `false` to disable +closeComment: > + This issue has been automatically closed because there has been no response + to our request for more information from the original author. With only the + information that is currently in the issue, we don't have enough information + to take action. Please reach out if you have or find the answers we need so + that we can investigate further. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cec0e825..c95b9899 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,11 +5,10 @@ We welcome contributions, but request you follow these guidelines. - [Raising issues](#raising-issues) - [Feature requests](#feature-requests) - [Pull-Requests](#pull-requests) - - [Contributor License Agreement](#contributor-license-agreement) This project adheres to the [Contributor Covenant 1.4](http://contributor-covenant.org/version/1/4/). By participating, you are expected to uphold this code. Please report unacceptable -behavior to any of the [project's core team](https://github.com/orgs/node-red/teams/core). +behavior to the project's core team at team@nodered.org. ## Raising issues @@ -30,29 +29,21 @@ At a minimum, please include: ## Feature requests -For feature requests, please raise them on the [mailing list](https://groups.google.com/forum/#!forum/node-red). +For feature requests, please raise them on the [mailing list](https://discourse.nodered.org). ## Pull-Requests If you want to raise a pull-request with a new feature, or a refactoring of existing code, it may well get rejected if you haven't discussed it on -the [mailing list](https://groups.google.com/forum/#!forum/node-red) first. +the [forum](https://discourse.nodered.org) first. -### Contributor License Agreement +All contributors need to sign the JS Foundation's Contributor License Agreement. +It is an online process and quick to do. You can read the details of the agreement +here: https://cla.js.foundation/node-red/node-red. -In order for us to accept pull-requests, the contributor must first complete -a Contributor License Agreement (CLA). This clarifies the intellectual -property license granted with any contribution. It is for your protection as a -Contributor as well as the protection of IBM and its customers; it does not -change your rights to use your own Contributions for any other purpose. +If you raise a pull-request without having signed the CLA, you will be prompted +to do so automatically. -You can download the CLAs here: - - - [individual](http://nodered.org/cla/node-red-cla-individual.pdf) - - [corporate](http://nodered.org/cla/node-red-cla-corporate.pdf) - -If you are an IBMer, please contact us directly as the contribution process is -slightly different. ### Coding standards @@ -63,4 +54,3 @@ code base. Some basic rules include: - indent with 4-spaces, no tabs. No arguments. - opening brace on same line as `if`/`for`/`function` and so on, closing brace on its own line. - - There are .jshintrc and .jscsrc files included in the project which may help diff --git a/README.md b/README.md index 064bf07a..845e5595 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ # Node-RED Docker [![Greenkeeper badge](https://badges.greenkeeper.io/node-red/node-red-docker.svg)](https://greenkeeper.io/) -[![Build Status](https://travis-ci.org/node-red/node-red-docker.svg?branch=master)](https://travis-ci.org/RaymondMouthaan/node-red) -[![DockerHub Pull](https://img.shields.io/docker/pulls/nodered/node-red-docker.svg)](https://hub.docker.com/r/nodered/node-red/) +[![Build Status](https://travis-ci.org/node-red/node-red-docker.svg?branch=master)](https://travis-ci.org/node-red/node-red-docker) +[![DockerHub Pull](https://img.shields.io/docker/pulls/nodered/node-red.svg)](https://hub.docker.com/r/nodered/node-red/) This project describes some of the many ways Node-RED can be run under Docker and has support for multiple architectures (amd64, arm32v6, arm32v7 and arm64v8). Some basic familiarity with Docker and the [Docker Command Line](https://docs.docker.com/engine/reference/commandline/cli/) is assumed. -As of Node-RED 1.0 this project provides the build for the `nodered/node-red` container on [Docker Hub](https://hub.docker.com/r/nodered/node-red/). Note: the name has changed to `nodered/node-red`. +As of Node-RED 1.0 this project provides the build for the `nodered/node-red` container on [Docker Hub](https://hub.docker.com/r/nodered/node-red/). Note: the Docker Hub name has changed to `nodered/node-red`. Previous 0.20.x versions are still available at https://hub.docker.com/r/nodered/node-red-docker. @@ -18,11 +18,11 @@ To run in Docker in its simplest form just run: Let's dissect that command: - docker run - run this container... and build locally if necessary first. + docker run - run this container... initially building locally if necessary -it - attach a terminal session so we can see what is going on -p 1880:1880 - connect local port 1880 to the exposed internal port 1880 --name mynodered - give this machine a friendly local name - nodered/node-red - the image to base it on - currently Node-RED v1.0.0 + nodered/node-red - the image to base it on - currently Node-RED v1.0.1 Running that command should give a terminal window with a running instance of Node-RED. @@ -30,17 +30,17 @@ Running that command should give a terminal window with a running instance of No Welcome to Node-RED =================== - 27 Sep 12:57:10 - [info] Node-RED version: v1.0.0 - 27 Sep 12:57:10 - [info] Node.js version: v10.16.2 - 27 Sep 12:57:10 - [info] Linux 4.19.58-v7+ arm LE - 27 Sep 12:57:11 - [info] Loading palette nodes - 27 Sep 12:57:16 - [info] Settings file : /data/settings.js - 27 Sep 12:57:16 - [info] Context store : 'default' [module=memory] - 27 Sep 12:57:16 - [info] User directory : /data - 27 Sep 12:57:16 - [warn] Projects disabled : editorTheme.projects.enabled=false - 27 Sep 12:57:16 - [info] Flows file : /data/flows.json - 27 Sep 12:57:16 - [info] Creating new flow file - 27 Sep 12:57:17 - [warn] + 03 Oct 12:57:10 - [info] Node-RED version: v1.0.1 + 03 Oct 12:57:10 - [info] Node.js version: v10.16.3 + 03 Oct 12:57:10 - [info] Linux 4.9.184-linuxkit x64 LE + 03 Oct 12:57:11 - [info] Loading palette nodes + 03 Oct 12:57:16 - [info] Settings file : /data/settings.js + 03 Oct 12:57:16 - [info] Context store : 'default' [module=memory] + 03 Oct 12:57:16 - [info] User directory : /data + 03 Oct 12:57:16 - [warn] Projects disabled : editorTheme.projects.enabled=false + 03 Oct 12:57:16 - [info] Flows file : /data/flows.json + 03 Oct 12:57:16 - [info] Creating new flow file + 03 Oct 12:57:17 - [warn] --------------------------------------------------------------------- Your flow credentials file is encrypted using a system-generated key. @@ -54,17 +54,20 @@ Running that command should give a terminal window with a running instance of No file using your chosen key the next time you deploy a change. --------------------------------------------------------------------- - 27 Sep 12:57:17 - [info] Server now running at http://127.0.0.1:1880/ + 03 Oct 12:57:17 - [info] Starting flows + 03 Oct 12:57:17 - [info] Started flows + 03 Oct 12:57:17 - [info] Server now running at http://127.0.0.1:1880/ [...] You can then browse to `http://{host-ip}:1880` to get the familiar Node-RED desktop. -The advantage of doing this is that by giving it a name we can manipulate it +The advantage of doing this is that by giving it a name (mynodered) we can manipulate it more easily, and by fixing the host port we know we are on familiar ground. -(Of course this does mean we can only run one instance at a time... but one step at a time folks...) +Of course this does mean we can only run one instance at a time... but one step at a time folks... -If we are happy with what we see we can detach the terminal with `Ctrl-p` `Ctrl-q` - the container will keep running in the background. +If we are happy with what we see, we can detach the terminal with `Ctrl-p` `Ctrl-q` - the +container will keep running in the background. To reattach to the terminal (to see logging) run: @@ -78,10 +81,6 @@ and stop it again when required: $ docker stop mynodered -_**Note**: this Dockerfile is configured to store the flows.json file and any -extra nodes you install "outside" of the container. We do this so that you may rebuild the underlying -container without permanently losing all of your customisations._ - ## Image Variations The Node-RED images come in different variations and are supported by manifest lists (auto-detect architecture). This makes it more easy to deploy in a multi architecture Docker environment. E.g. a Docker Swarm with mix of Raspberry Pi's and amd64 nodes. @@ -97,8 +96,9 @@ The tag naming convention is `---:/data --name mynodered nodered/node-red -``` +## Managing User Data -Example: -- Suppose you are running on a Raspberry PI with a user named 'pi' and group 'pi'. -``` -$ whoami -``` -- With this user create a directory '~/.node-red'. -``` -$ mkdir ~/.node-red -``` -- Verify newly created directory with: -``` -$ ls -al ~/.node-red -``` -This shows that user pi is owner of this directory: -``` -ls -al ~/.node-red -total 8 -drwxr-xr-x 2 pi pi 4096 May 7 20:55 . -drwxr-xr-x 8 pi pi 4096 May 7 20:42 .. -``` +Once you have Node-RED running with Docker, we need to +ensure any added nodes or flows are not lost if the container is destroyed. +This user data can be persisted by mounting a data directory to a volume outside the container. +This can either be done using a bind mount or a named data volume. -- Now we want to have access to this '~/.node-red' directory with the container so that Node-RED can save user data to it. -As we know we need to override the default uid (1000) of the node-red user inside the container with the uid of the pi user. -For that we need to know the uid of user pi: -``` -$ id pi -``` -- The uid and gid of user pi are: -``` -uid=1000(pi) gid=1000(pi) [...] -``` +Node-RED uses the `/data` directory inside the container to store user configuration data. + +### Using a Host Directory for Persistence (Bind Mount) +To save your Node-RED user directory inside the container to a host directory outside the container, you can use the +command below. To allow access to this host directory, the node-red user (default uid=1000) inside the container must +have the same uid as the owner of the host directory. +See [the wiki](https://github.com/node-red/node-red-docker/wiki/Permissions-and-Persistence) for detailed information +on permissions. -- So the final command becomes: ``` -$ docker run -it --user="1000:1000" -p 1880:1880 -v ~/.node-red:/data --name mynodered nodered/node-red +docker run -it -p 1880:1880 -v /home/pi/.node-red:/data --name mynodered nodered/node-red ``` +In this example the host `/home/pi/.node-red` directory is bound to the container `/data` directory. -Running a Node-RED container with a host directory mounted as the data volume, -you can manually run `npm install` within your host directory. Files created in -the host directory will automatically appear in the container's file system. +### Using Named Data Volumes -Adding extra nodes to the container can be accomplished by -running npm install locally. +Docker also supports using named [data volumes](https://docs.docker.com/engine/tutorials/dockervolumes/) +to store persistent or shared data outside the container. - $ cd ~/.node-red - $ npm install node-red-node-smooth - node-red-node-smooth@0.0.3 node_modules/node-red-node-smooth +To create a new named data volume to persist our user data and run a new +container using this volume. + + $ docker volume create --name node_red_user_data + $ docker volume ls + DRIVER VOLUME NAME + local node_red_user_data + $ docker run -it -p 1880:1880 -v node_red_user_data:/data --name mynodered nodered/node-red + +Using Node-RED to create and deploy some sample flows, we can now destroy the +container and start a new instance without losing our user data. + + $ docker rm mynodered + $ docker run -it -p 1880:1880 -v node_red_user_data:/data --name mynodered nodered/node-red + +## Updating + +As the /data is now preserved outside of the container, updating the base container image +is now as simple as + + $ docker pull nodered/node-red $ docker stop mynodered $ docker start mynodered -_**Note** : Modules with a native dependencies will be compiled on the host -machine's architecture. These modules will not work inside the Node-RED -container unless the architecture matches the container's base image. For native -modules, it is recommended to install using a local shell or update the -project's package.json and re-build._ ## Docker Stack / Docker Compose @@ -285,7 +272,6 @@ services: networks: node-red-net: - ``` The above compose file: @@ -308,7 +294,7 @@ Docker build process, the dependencies are installed under `/usr/src/node-red`. The main sections to modify are "dependencies": { - "node-red": "^1.0.0", <-- set the version of Node-RED here + "node-red": "^1.0.1", <-- set the version of Node-RED here "node-red-dashboard": "*" <-- add any extra npm packages here }, @@ -321,7 +307,7 @@ by default, and then This is the command that starts Node-RED when the container is run. -### startup +### Startup Node-RED is started using NPM start from this `/usr/src/node-red`, with the `--userDir` parameter pointing to the `/data` directory on the container. @@ -329,21 +315,25 @@ parameter pointing to the `/data` directory on the container. The flows configuration file is set using an environment parameter (**FLOWS**), which defaults to *'flows.json'*. This can be changed at runtime using the following command-line flag. +``` +docker run -it -p 1880:1880 -e FLOWS=my_flows.json nodered/node-red +``` - $ docker run -it -p 1880:1880 -e FLOWS=my_flows.json nodered/node-red +**Note**: If you set `-e FLOWS=""` then the flow file can be set via the *flowFile* +property in the `settings.js` file. Node.js runtime arguments can be passed to the container using an environment parameter (**NODE_OPTIONS**). For example, to fix the heap size used by the Node.js garbage collector you would use the following command. +``` +docker run -it -p 1880:1880 -e NODE_OPTIONS="--max_old_space_size=128" nodered/node-red +``` - $ docker run -it -p 1880:1880 -e NODE_OPTIONS="--max_old_space_size=128" nodered/node-red +Other useful environment variables include -## Adding Nodes + - -e NODE_RED_ENABLE_SAFE_MODE=false # setting to true starts Node-RED in safe (not running) mode + - -e NODE_RED_ENABLE_PROJECTS=false # setting to true starts Node-RED with the projects feature enabled -Installing extra Node-RED nodes into an instance running with Docker can be -achieved by manually installing those nodes into the container, using the cli or -running npm commands within a container shell, or mounting a host directory with -those nodes as a data volume. ### Node-RED Admin Tool @@ -373,7 +363,6 @@ command you wish - e.g. Refreshing the browser page should now reveal the newly added node in the palette. - ### Building Custom Image Creating a new Docker image, using the public Node-RED images as the base image, @@ -389,76 +378,18 @@ RUN npm install node-red-contrib-flightaware Alternatively, you can modify the package.json in this repository and re-build the images from scratch. This will also allow you to modify the version of -Node-RED that is installed. See [README](docker-custom/README.md) under docker-custom directory. - -## Managing User Data - -Once you have customised the Node-RED instance running with Docker, we need to -ensure these modifications are not lost if the container is destroyed. Managing -this user data can be handed by persisting container state into a new image or -using named data volumes to handle move this data outside the container. - -### Saving Changes As Custom Image - -Modifications to files within the live container, e.g. manually adding nodes or -creating flows, do not exist outside the lifetime of the container. If that -container instance is destroyed, these changes will be lost. - -Docker allows you to the current state of a container to a new image. This -means you can persist your changes as a new image that can be shared on other -systems. - - $ docker commit mynodered custom-node-red - -If we destroy the ```mynodered``` container, the instance can be recovered by -spawning a new container using the ```custom-node-red``` image. - -### Using Named Data Volumes - -Docker supports using [data volumes](https://docs.docker.com/engine/tutorials/dockervolumes/) to store -persistent or shared data outside the container. Files and directories within data -volumes exist outside of the lifecycle of containers, i.e. the files still exist -after removing the container. - -Node-RED uses the `/data` directory to store user configuration data. - -Mounting a data volume inside the container at this directory path means user -configuration data can be saved outside of the container and even shared between -container instances. - -Let's create a new named data volume to persist our user data and run a new -container using this volume. - - $ docker volume create --name node_red_user_data - $ docker volume ls - DRIVER VOLUME NAME - local node_red_user_data - $ docker run -it -p 1880:1880 -v node_red_user_data:/data --name mynodered nodered/node-red - -Using Node-RED to create and deploy some sample flows, we can now destroy the -container and start a new instance without losing our user data. - - $ docker rm mynodered - $ docker run -it -p 1880:1880 -v node_red_user_data:/data --name mynodered nodered/node-red - -## Updating - -Updating the base container image is as simple as - - $ docker pull nodered/node-red - $ docker stop mynodered - $ docker start mynodered +Node-RED that is installed. See [README](docker-custom/README.md) in the `docker-custom` directory. ## Running headless The barest minimum we need to just run Node-RED is - $ docker run -d -p 1880 nodered/node-red + $ docker run -d -p 1880:1880 nodered/node-red This will create a local running instance of a machine - that will have some docker id number and be running on a random port... to find out run - $ docker ps -a + $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4bbeb39dc8dc nodered/node-red:latest "npm start" 4 seconds ago Up 4 seconds 0.0.0.0:49154->1880/tcp furious_yalow $ @@ -472,7 +403,7 @@ You can link containers "internally" within the docker runtime by using the --li For example I have a simple MQTT broker container available as - docker run -it --name mybroker nodered/node-red + docker run -it --name mybroker eclipse-mosquitto (no need to expose the port 1883 globally unless you want to... as we do magic below) @@ -481,7 +412,7 @@ Then run nodered docker - but this time with a link parameter (name:alias) docker run -it -p 1880:1880 --name mynodered --link mybroker:broker nodered/node-red the magic here being the `--link` that inserts a entry into the node-red instance -hosts file called *broker* that links to the mybroker instance.... but we do +hosts file called *broker* that links to the external mybroker instance.... but we do expose the 1880 port so we can use an external browser to do the node-red editing. Then a simple flow like below should work - using the alias *broker* we just set up a second ago. @@ -492,16 +423,19 @@ This way the internal broker is not exposed outside of the docker host - of cour you may add `-p 1883:1883` etc to the broker run command if you want to see it... -## Issues +## Common Issues and Hints Here is a list of common issues users have reported with possible solutions. ### User Permission Errors +See [the wiki](https://github.com/node-red/node-red-docker/wiki/Permissions-and-Persistence) for detailed information +on permissions. + If you are seeing *permission denied* errors opening files or accessing host devices, try running the container as the root user. ``` -docker run -it -p 1880:1880 --name mynodered --user=root nodered/node-red +docker run -it -p 1880:1880 --name mynodered -u root nodered/node-red ``` References: diff --git a/docker-custom/Dockerfile.custom b/docker-custom/Dockerfile.custom index 3aaaffa3..9e3bcddf 100644 --- a/docker-custom/Dockerfile.custom +++ b/docker-custom/Dockerfile.custom @@ -71,9 +71,12 @@ RUN chown -R node-red:node-red /usr/src/node-red && \ USER node-red # Env variables -ENV NODE_RED_VERSION=$NODE_RED_VERSION -ENV FLOWS=flows.json -ENV NODE_PATH=/usr/src/node-red/node_modules:/data/node_modules +ENV NODE_RED_VERSION=$NODE_RED_VERSION \ + NODE_PATH=/usr/src/node-red/node_modules:/data/node_modules \ + FLOWS=flows.json + +# ENV NODE_RED_ENABLE_SAFE_MODE=true # Uncomment to enable safe start mode (flows not running) +# ENV NODE_RED_ENABLE_PROJECTS=true # Uncomment to enable projects option # User configuration directory volume VOLUME ["/data"] diff --git a/docker-custom/README.md b/docker-custom/README.md index 9a546013..7f7bd54c 100644 --- a/docker-custom/README.md +++ b/docker-custom/README.md @@ -20,10 +20,10 @@ cd node-red-docker/docker-custom - Change the node-red version in package.json (from the docker-custom directory) to the version you require - Add optionally packages you require - + ## 2. **docker-make.sh** -The `docker-make.sh` is a helper script to build a custom Node-RED docker image. +The `docker-make.sh` is a helper script to build a custom Node-RED docker image. Change the build arguments as needed: @@ -32,28 +32,28 @@ Change the build arguments as needed: - `--build-arg NODE_RED_VERSION=${NODE_RED_VERSION}` : don't change this, ${NODE_RED_VERSION} gets populated from package.json - `--build-arg OS=alpine` : the linux distro to use (alpine) - `--build-arg BUILD_DATE="$(date +"%Y-%m-%dT%H:%M:%SZ")"` : don't change this - - `--build-arg TAG_SUFFIX=default` : to build the default or minimal image + - `--build-arg TAG_SUFFIX=default` : to build the default or minimal image - `--file Dockerfile.custom` : Dockerfile to use to build your image. - `--tag testing:node-red-build` : set the image name and tag - + ## 3. **Run docker-make.sh** -Run `docker-make.sh` +Run `docker-make.sh` ```shell script $ ./docker-make.sh ``` This starts building your custom image and might take a while depending on the system you are running on. - + When building is done you can run the custom image by the following command: - + ```shell script $ docker run -it -p1880:1880 testing:node-red-build ``` - + With the following command you can verify your docker image: - + ```shell script $ docker inspect testing:node-red-build ``` @@ -61,4 +61,3 @@ $ docker inspect testing:node-red-build ## 4. **Advanced Configuration** `Dockerfile.custom` can be modified as required. To add more applications the `scripts/install_devtools.sh` can be modified as needed. - diff --git a/docker-custom/package.json b/docker-custom/package.json index 2a269727..636e5498 100644 --- a/docker-custom/package.json +++ b/docker-custom/package.json @@ -1,6 +1,6 @@ { "name": "node-red-docker", - "version": "1.0.0", + "version": "1.0.1", "description": "Low-code programming for event-driven applications", "homepage": "http://nodered.org", "license": "Apache-2.0", @@ -10,7 +10,7 @@ }, "main": "node_modules/node-red/red/red.js", "scripts": { - "start": "node $NODE_OPTIONS node_modules/node-red/red.js -v $FLOWS" + "start": "node $NODE_OPTIONS node_modules/node-red/red.js $FLOWS" }, "contributors": [ { @@ -27,7 +27,7 @@ } ], "dependencies": { - "node-red": "1.0.0" + "node-red": "^1.0.1" }, "engines": { "node": ">=10" diff --git a/package.json b/package.json index 2a269727..636e5498 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-red-docker", - "version": "1.0.0", + "version": "1.0.1", "description": "Low-code programming for event-driven applications", "homepage": "http://nodered.org", "license": "Apache-2.0", @@ -10,7 +10,7 @@ }, "main": "node_modules/node-red/red/red.js", "scripts": { - "start": "node $NODE_OPTIONS node_modules/node-red/red.js -v $FLOWS" + "start": "node $NODE_OPTIONS node_modules/node-red/red.js $FLOWS" }, "contributors": [ { @@ -27,7 +27,7 @@ } ], "dependencies": { - "node-red": "1.0.0" + "node-red": "^1.0.1" }, "engines": { "node": ">=10"