From 8e75ed379d67e04d313b5b3e527948af1d3f9c8b Mon Sep 17 00:00:00 2001 From: Mitchell R Date: Thu, 21 May 2026 12:05:12 +0200 Subject: [PATCH] feat(nodered): install Dashboard 2.0 + auto-sync on entities page - Bake @flowfuse/node-red-dashboard into Node-RED Docker image - Fire-and-forget syncDashboardsFromNodered() on GET /admin/entities so dashboard tabs appear without manual sync button click --- deploy/docker/Dockerfile.nodered | 6 ++++-- server/src/plugins/service-admin-http/routes-admin.ts | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/deploy/docker/Dockerfile.nodered b/deploy/docker/Dockerfile.nodered index e1987c4..eb7ac05 100644 --- a/deploy/docker/Dockerfile.nodered +++ b/deploy/docker/Dockerfile.nodered @@ -22,10 +22,12 @@ COPY deploy/docker/nodered-settings.js /usr/src/bf-settings.js COPY deploy/docker/nodered-entrypoint.sh /usr/local/bin/bf-nodered-entrypoint RUN chmod +x /usr/local/bin/bf-nodered-entrypoint -# Install deps for the nodes +# Install deps for the nodes + FlowFuse Dashboard 2.0 into user dir RUN cd /usr/src/betterframe-nodes && \ npm install --omit=dev && \ - chown -R node-red:root /usr/src/betterframe-nodes /usr/src/bf-settings.js + cd /usr/src/node-red && \ + npm install @flowfuse/node-red-dashboard && \ + chown -R node-red:root /usr/src/betterframe-nodes /usr/src/bf-settings.js /usr/src/node-red # Run entrypoint as root so it can fix stale /data state (e.g. /data/settings.js # left as a directory by a previous broken bind mount). Entrypoint drops to diff --git a/server/src/plugins/service-admin-http/routes-admin.ts b/server/src/plugins/service-admin-http/routes-admin.ts index bd588a3..66cdcef 100644 --- a/server/src/plugins/service-admin-http/routes-admin.ts +++ b/server/src/plugins/service-admin-http/routes-admin.ts @@ -590,6 +590,7 @@ export function registerAdminRoutes(app: H3, deps: AdminDeps): void { app.get("/admin/entities", (event) => { const user = event.context.user!; + syncDashboardsFromNodered(deps).catch(() => {}); return htmlPage(EntitiesPage({ user: user.username, entities: deps.repo.listEntities(),