{"id":31062740,"url":"https://github.com/mqttsnet/thinglinks-multi-tenant-node-red","last_synced_at":"2026-02-12T22:32:15.915Z","repository":{"id":312676397,"uuid":"1048310431","full_name":"mqttsnet/thinglinks-multi-tenant-node-red","owner":"mqttsnet","description":"A collection of Docker container that will implement a ThingLinks Multi Tenant Node-RED environment.","archived":false,"fork":false,"pushed_at":"2025-09-07T08:38:53.000Z","size":596,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-15T12:49:01.433Z","etag":null,"topics":["iot","nodered","thinglinks"],"latest_commit_sha":null,"homepage":"https://www.mqttsnet.com/","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mqttsnet.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-01T08:48:30.000Z","updated_at":"2025-09-07T08:38:56.000Z","dependencies_parsed_at":"2025-09-01T10:58:15.515Z","dependency_job_id":"e43b8c58-6b56-4ca9-9983-9bcf213d9650","html_url":"https://github.com/mqttsnet/thinglinks-multi-tenant-node-red","commit_stats":null,"previous_names":["mqttsnet/thinglinks-multi-tenant-node-red"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/mqttsnet/thinglinks-multi-tenant-node-red","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mqttsnet%2Fthinglinks-multi-tenant-node-red","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mqttsnet%2Fthinglinks-multi-tenant-node-red/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mqttsnet%2Fthinglinks-multi-tenant-node-red/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mqttsnet%2Fthinglinks-multi-tenant-node-red/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mqttsnet","download_url":"https://codeload.github.com/mqttsnet/thinglinks-multi-tenant-node-red/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mqttsnet%2Fthinglinks-multi-tenant-node-red/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29383922,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T22:07:52.078Z","status":"ssl_error","status_checked_at":"2026-02-12T22:07:49.026Z","response_time":55,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["iot","nodered","thinglinks"],"created_at":"2025-09-15T12:48:58.022Z","updated_at":"2026-02-12T22:32:15.891Z","avatar_url":"https://github.com/mqttsnet.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n[![MQTTSNET Logo](./docs/images/logo.png)](http://www.mqttsnet.com)\n\n\u003c/div\u003e\n\n# ThingLinks Multi Tenant Node-RED Docker Compose\n\n## Deprecated \n\nA collection of Docker container that will implement a Multi Tenant Node-RED environment.\n\n\n\n\n## Download\n\n```\n$ git clone --recurse-submodules https://github.com/mqttsnet/thinglinks-multi-tenant-node-red.git\n```\n\n## Pre-reqs\n\nRun the `setup.sh` script to create the required directories and set the right ownership/permissions.\n\nIf run with no arguments `setup.sh` will default to using the current machine's hostname with `.local` appended as it's root domain, otherwise it will take the first argument as the root domain. e.g.\n\n```\n$ ./setup.sh example.com\n```\n\nAnd if you are running on a Docker Swarm deployment you will need to build the management app and the catalogue containers manually with.\n\n```\n$ docker build -t manager ./manager\n$ docker build -t catalogue ./catalogue\n```\n\nWhen running on a AMD64 based host everything should be fine, if you want to run on ARM64 then you  will need to rebuild the [verdaccio/verdaccio](https://github.com/verdaccio/verdaccio) and nginx-proxy containers as they only ship AMD64 versions.\n\nUntil [this](https://github.com/nginx-proxy/nginx-proxy/pull/1470) pull-request is merged into nginx-proxy you will have to manually build forego and dockergen since the container directly downloads a pre-built AMD64 bit binaries.\n\n## Configure\n\n### DNS\n\nThe `VIRTUAL_HOST` and `ROOT_DOMAIN` entries at the end of the docker-compose file will have been updated by the `setup.sh` script,  you will want to set up a wildcard DNS entry that points to the host machine.\n\ne.g. if you use a `ROOT_DOMAIN` of **example.com** then you should set up a DNS entry for \\*.example.com that points to the docker host.\n\nFor testing you can edit your local `/etc/hosts` file to point to the manager and application instances, eg:\n\n```\n192.168.1.100   manager.example.com  r1.example.com  r2.example.com\n```\n\nWhere `192.168.1.100` is the IP address of the Docker host.\n\n### Avahi\n\nIf you are running this on a small local lan then you may not have a DNS server to add the wildcard entry to, in this case you can \nuse the `hardillb/nginx-proxy-avahi-helper` container which will add mDNS CNAMES to the docker host machine (assuming it's running \nthe Avahi daemon) so you will be able to use a `.local` virtual domain to access Node-RED instances.\n\nYou can run the `hardillb/nginx-proxy-avahi-helper` with the following command\n\n`docker run -d -v /var/run/docker.sock:/tmp/docker.sock -v /run/dbus/system_bus_socket:/run/dbus/system_bus_socket hardillb/nginx-proxy-avahi-helper`\n\nIf you see AppArmor errors in the logs for this container then you need to add the `--priviledged` option to the command line.\n\n### HTTPS\n\nThere are 3 options for setting up HTTPS support.\n\n - Set up a single wildcard certificate to match the wildcard DNS entry, this means you only have to manage a single certificate for all Node-RED instances. The certificate/key pair for example.com should be named `example.com.crt` and `example.com.key` and placed in the certs directory. Uncomment the line in the volumes section of the nginx service in docker-compose.yml\n\n - Add a certificate and key per instance to the certs directory with names matching the `VIRTUAL_HOST` entry e.g. for an instance named foo, `foo.example.com.crt` and `foo.example.com.key`\n\n - Use something like nginx-proxy/docker-letsencrypt-nginx-proxy-companion which will generate a LetsEncrypt certificate for each instance (as well and renewing it when needed).\n\nFor both you will need to uncomment the `- \"443:443\"` line in the ports section of the nginx service in docker-compose.yml.\n\nYou can check out more details [here](https://github.com/nginx-proxy/nginx-proxy#ssl-support)\n\n## Private Node Repository\n\n### npm\n\nThe npm repository is available on port 4873 of the Docker host. You can publish new nodes to this repo under the scope of `@private` using the username `admin` and the password `mqttsnet`\n\nTo add the scope to your local npm config run the following:\n\n```\nnpm login --registry=http://example.com:4873 --scope=@private\n```\n\nOnce this is setup you can publish any package with the scope `@private` to that repository with the normal `npm publish` command\n\nYou can access the web front end for the repository on port 4873 of the docker host (you can map this to a custom domain and port 80 by adding \na `VIRTUAL_HOST` environment variable to the registry entry in the docker_compose.yml file)\n\n### Catalogue\n\nYou can edit the `catalogue.json` file in the catalogue directory as required using the `build-catalogue.js` in the manager directory.\n\n`node build-catalogue.js example.com [keyword filter] \u003e ../catalogue/catalogue.json`\n\nWhere the first argument is the hostname of the docker host and `[keyword filter]` (defaults to `node-red`) is the name of the keyword to filter the entries in the repository on.\n\n\n## Start\n\nTo start up the stack run\n```\ndocker-compose up -d\n```\n\n### Manager Application\n\nYou can access the instance manager web app on http://manager.example.com\n\n![new.png](docs/images/new.png)\n\n![list.png](docs/images/list.png)\n\n![logs.png](docs/images/logs.png)\n\n![flows.png](docs/images/flows.png)\n\n### Instances\n\nIf you create an instance with the app name of `r1` then you would access that instance on http://r1.example.com  and so on.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmqttsnet%2Fthinglinks-multi-tenant-node-red","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmqttsnet%2Fthinglinks-multi-tenant-node-red","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmqttsnet%2Fthinglinks-multi-tenant-node-red/lists"}