-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore: place package at root, and main project to playground
- Loading branch information
1 parent
bc40895
commit 5fa3297
Showing
25 changed files
with
9,004 additions
and
9,004 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,3 @@ | ||
node_modules/ | ||
.env | ||
dist/ | ||
app.yaml | ||
.gcloudignore | ||
stats.md |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,45 +1,100 @@ | ||
# Node Red Unstorage | ||
|
||
Node-RED is a programming tool for wiring together hardware devices, APIs and online services via a browser-based editor. By default the data is stored on local file-system. However, Node RED provides a storage API allowing custom integrations. | ||
Node-RED is a programming tool for wiring together hardware devices, APIs and online services via a browser-based editor. | ||
|
||
This project aims to embed and run a Node Red instance on a Node.js application suitable for stateless deployment. This is done by implementing a storage plugin based on [unstorage](https://unstorage.unjs.io/) library. Thus allowing a flexible storage layer that can run on file-system, Mongo DB and a variety of key-value storage platforms. | ||
Unstorage is a universal key-value storage library. It supports multiple storage platform: filesystem, database, localStorage and [more](https://unstorage.unjs.io/). | ||
|
||
This package is a Node-RED storage plugin that enables the integration with `unstorage`. It implements a `storageModule` for storing flows, settings, sessions and library content. Plus a `contextStorage` for storing context data. Ultimately, the goal is to create a platform agnostic storage layer for Node RED. | ||
|
||
## Setup | ||
|
||
Make sure to install the dependencies: | ||
Make sure to install the dependency: | ||
|
||
```bash | ||
# yarn | ||
yarn install | ||
npm i @bg-dev/node-red-unstorage | ||
``` | ||
|
||
# npm | ||
npm install | ||
## Usage | ||
|
||
# pnpm | ||
pnpm install | ||
``` | ||
Below, a Node-Red instance is embedded in a node.js application. Mongo DB is is used for storage layer. | ||
|
||
## Development Server | ||
```js | ||
// Supports ESM and CJS | ||
import storage from "@bg-dev/node-red-unstorage"; | ||
|
||
Start the development server on `http://localhost:8080` | ||
import * as dotenv from "dotenv"; | ||
import express from "express"; | ||
import { createServer } from "http"; | ||
import nodered from "node-red"; | ||
import { dirname, resolve } from "path"; | ||
import { fileURLToPath } from "url"; | ||
import mongodbDriver from "unstorage/drivers/mongodb"; | ||
|
||
```bash | ||
npm run dev | ||
``` | ||
dotenv.config(); | ||
|
||
## Production | ||
const { contextStore, storageModule } = storage({ | ||
// A namespace for the storage layer | ||
// Allows creating multiple projects with isolated data access | ||
app: "app0", | ||
|
||
Build the application for production: | ||
// Unstorage instance options, for storageModule (required) | ||
storageOptions: { | ||
driver: mongodbDriver({ | ||
connectionString: process.env.MONGO_DB_URL, | ||
databaseName: "nodeRed", | ||
collectionName: "storage", | ||
}), | ||
}, | ||
|
||
```bash | ||
npm run build | ||
``` | ||
// Unstorage instance options, for contextStore (optional) | ||
contextOptions: { | ||
driver: mongodbDriver({ | ||
connectionString: process.env.MONGO_DB_URL, | ||
databaseName: "nodeRed", | ||
collectionName: "context", | ||
}), | ||
}, | ||
}); | ||
|
||
Run the production build: | ||
const cwd = dirname(fileURLToPath(import.meta.url)); | ||
|
||
```bash | ||
npm run start | ||
const settings = { | ||
httpAdminRoot: "/", | ||
httpNodeRoot: "/api", | ||
// The userDir contains the external libraries | ||
// Should be at the project root | ||
userDir: cwd, | ||
nodesDir: resolve(cwd, "nodes"), | ||
uiHost: "0.0.0.0", | ||
uiPort: parseInt(process.env.PORT) || 8080, | ||
|
||
storageModule: storageModule, | ||
|
||
contextStorage: { | ||
unstorage: { | ||
module: contextStore, | ||
}, | ||
}, | ||
}; | ||
|
||
// Express is used as suggested in Node-Red docs | ||
const app = express(); | ||
|
||
const server = createServer(app); | ||
|
||
app.use("/", express.static("public")); | ||
|
||
nodered.init(server, settings); | ||
|
||
app.use(settings.httpAdminRoot, nodered.httpAdmin); | ||
|
||
app.use(settings.httpNodeRoot, nodered.httpNode); | ||
|
||
server.listen(settings.uiPort); | ||
|
||
nodered.start(); | ||
``` | ||
## Credits | ||
- [@hardillb](https://github.com/hardillb) - node-red-contrib-storage-mongodb |
Oops, something went wrong.