[{"data":1,"prerenderedAt":1273},["ShallowReactive",2],{"docs-\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fopenshift\u002F":3,"docs-nav":823},{"id":4,"title":5,"body":6,"description":16,"extension":812,"layout":813,"meta":814,"navGroup":813,"navGroupOrder":813,"navOrder":813,"navTitle":815,"navigation":478,"originalPath":816,"path":817,"redirect":813,"seo":818,"stem":819,"updated":820,"version":821,"__hash__":822},"docs\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fopenshift.md","OpenShift Install",{"type":7,"value":8,"toc":794},"minimark",[9,13,17,21,75,79,82,158,161,184,188,197,208,219,225,229,233,236,283,286,304,329,333,364,368,375,392,522,530,534,537,540,543,558,561,592,595,620,626,656,660,666,700,704,707,714,721,725,734,738,745,749,771,775,790],[10,11,5],"h1",{"id":12},"openshift-install",[14,15,16],"p",{},"This guide walks you through detailed set up of FlowFuse Platform on a container envoronment managed by OpenShift. Typically suited for large on premise deployments or deployment in Cloud infrastructure.\nBy the end, you will have a fully functioning FlowFuse instance running on a OpenShift cluster.",[10,18,20],{"id":19},"checklist","Checklist",[22,23,28,29,28,57,74],"div",{"className":24},[25,26,27],"grid","grid-cols-2","gap-8","\n   ",[22,30,32,33,32,37,28],{"className":31},[19],"\n     ",[34,35,36],"label",{},"Prerequisites",[22,38,39,40,39,44,39,47,39,50,39,54,32],{},"\n       ",[41,42],"checklist-item",{"task":43},"Domain Name",[41,45],{"task":46},"OpenShift cluster",[41,48],{"task":49},"FlowFuse License",[41,51],{"type":52,"task":53},"recommended","Setup Dedicated Database",[41,55],{"type":52,"task":56},"Prepare TLS Certificates",[22,58,32,60,32,63,28],{"className":59},[19],[34,61,62],{},"Installation",[22,64,39,65,39,68,39,71,32],{},[41,66],{"task":67},"Download FlowFuse",[41,69],{"task":70},"Configure FlowFuse",[41,72],{"type":52,"task":73},"Enable HTTPS","\n ",[76,77,36],"h2",{"id":78},"prerequisites",[14,80,81],{},"Before you begin, ensure you have the following:",[83,84,85,99,119,130,136,148],"ol",{},[86,87,88,92,93,98],"li",{},[89,90,91],"strong",{},"Domain Name & DNS:"," A domain name that you own and can configure DNS settings for (explained in ",[94,95,97],"a",{"href":96},"#dns","DNS",")",[86,100,101,104,105,109,110,112,113],{},[89,102,103],{},"oc:"," To manage a OpenShift cluster you will need a copy of the ",[106,107,108],"code",{},"oc"," utility. Instructions on how to install ",[106,111,108],{}," can be found ",[94,114,118],{"href":115,"rel":116},"https:\u002F\u002Fdocs.openshift.com\u002Fcontainer-platform\u002F4.17\u002Fcli_reference\u002Fopenshift_cli\u002Fgetting-started-cli.html",[117],"nofollow","here",[86,120,121,124,125],{},[89,122,123],{},"Helm:"," FlowFuse provides the Helm chart to manage platform deployment. Installation can be done through the instructions on ",[94,126,129],{"href":127,"rel":128},"https:\u002F\u002Fhelm.sh",[117],"their website",[86,131,132,135],{},[89,133,134],{},"OpenShift Cluster:"," an OpenShift cluster instance with at least two worker nodes",[86,137,138,141,142,147],{},[89,139,140],{},"Ingress Controller:"," ",[94,143,146],{"href":144,"rel":145},"https:\u002F\u002Fdoc.traefik.io\u002Ftraefik\u002F",[117],"The Traefik"," installed on the cluster.",[86,149,150,153,154],{},[89,151,152],{},"FlowFuse License:"," A valid FlowFuse license key is required to run on OpenShift. You can request a quote ",[94,155,118],{"href":156,"rel":157},"https:\u002F\u002Fflowfuse.com\u002Fpricing\u002Frequest-quote\u002F",[117],[14,159,160],{},"For a production-ready environment, we also recommend:",[162,163,164,175],"ul",{},[86,165,166,169,170,174],{},[89,167,168],{},"Database:"," Prepare dedicated database on a external database server (see ",[94,171,173],{"href":172},"\u002Fdocs\u002Finstall\u002Fkubernetes#how-to-use-external-database-server","FAQ"," for more details)",[86,176,177,180,181,98],{},[89,178,179],{},"TLS Certificate:"," Prepare TLS certificate for your domain and configure FlowFuse platform to use it (see ",[94,182,73],{"href":183},"\u002Fdocs\u002Finstall\u002Fkubernetes#i-would-like-to-secure-the-platform-with-https-how-can-i-do-that",[185,186,97],"h3",{"id":187},"dns",[14,189,190,191,196],{},"A ",[94,192,195],{"href":193,"rel":194},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWildcard_DNS_record",[117],"wildcard DNS entry"," will be needed\nto point to the domain that is used for the project instances. This will need to point\nto the Ingress controller.",[14,198,199,200,203,204,207],{},"For example if you want projects to be accessible as ",[106,201,202],{},"[instance-name].example.com","\nyou will need to ensure that ",[106,205,206],{},"*.example.com"," is mapped to the IP address used by\nyour OpenShift clusters's Ingress controller.",[14,209,210,211,214,215,218],{},"By default the FlowFuse application will be mapped to ",[106,212,213],{},"forge.example.com"," assuming\nthat you set the domain to ",[106,216,217],{},"example.com",".",[14,220,221,222,218],{},"Notes on how to setup DNS can be found ",[94,223,118],{"href":224},"\u002Fdocs\u002Finstall\u002Fdns-setup",[76,226,228],{"id":227},"installing-flowfuse","Installing FlowFuse",[185,230,232],{"id":231},"create-project-in-the-openshift-cluster","Create project in the OpenShift cluster",[14,234,235],{},"To maintain a clean environment, it is recommended to create a new project for the FlowFuse platform:",[237,238,243],"pre",{"className":239,"code":240,"language":241,"meta":242,"style":242},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","oc new-project flowfuse --description=\"FlowFuse Platform\" --display-name=\"FlowFuse\"\n","bash","",[106,244,245],{"__ignoreMap":242},[246,247,250,253,257,260,263,267,270,272,275,277,280],"span",{"class":248,"line":249},"line",1,[246,251,108],{"class":252},"sBMFI",[246,254,256],{"class":255},"sfazB"," new-project",[246,258,259],{"class":255}," flowfuse",[246,261,262],{"class":255}," --description=",[246,264,266],{"class":265},"sMK4o","\"",[246,268,269],{"class":255},"FlowFuse Platform",[246,271,266],{"class":265},[246,273,274],{"class":255}," --display-name=",[246,276,266],{"class":265},[246,278,279],{"class":255},"FlowFuse",[246,281,282],{"class":265},"\"\n",[14,284,285],{},"Describe the project to get the SCC information:",[237,287,289],{"className":239,"code":288,"language":241,"meta":242,"style":242},"oc describe project flowfuse\n",[106,290,291],{"__ignoreMap":242},[246,292,293,295,298,301],{"class":248,"line":249},[246,294,108],{"class":252},[246,296,297],{"class":255}," describe",[246,299,300],{"class":255}," project",[246,302,303],{"class":255}," flowfuse\n",[14,305,306,307,310,311,314,315,317,318,321,322,325,326,218],{},"Note the ",[106,308,309],{},"openshift.io\u002Fsa.scc.uid-range"," and ",[106,312,313],{},"openshift.io\u002Fsa.scc.supplemental-groups"," values. You will need to use these values when customizing the FlowFuse platform installation.\nIn example, if the ",[106,316,309],{}," value is ",[106,319,320],{},"1000710000\u002F10000",", the ",[106,323,324],{},"\u003Cproject-uid>"," value will be ",[106,327,328],{},"1000710000",[185,330,332],{"id":331},"add-flowfuse-helm-repository","Add FlowFuse Helm Repository",[237,334,336],{"className":239,"code":335,"language":241,"meta":242,"style":242},"helm repo add flowfuse https:\u002F\u002Fflowfuse.github.io\u002Fhelm\nhelm repo update\n",[106,337,338,354],{"__ignoreMap":242},[246,339,340,343,346,349,351],{"class":248,"line":249},[246,341,342],{"class":252},"helm",[246,344,345],{"class":255}," repo",[246,347,348],{"class":255}," add",[246,350,259],{"class":255},[246,352,353],{"class":255}," https:\u002F\u002Fflowfuse.github.io\u002Fhelm\n",[246,355,357,359,361],{"class":248,"line":356},2,[246,358,342],{"class":252},[246,360,345],{"class":255},[246,362,363],{"class":255}," update\n",[185,365,367],{"id":366},"customize-helm-chart","Customize Helm Chart",[14,369,370,371,374],{},"All the initial configuration is handled by the Helm chart. This is done by creating a ",[106,372,373],{},"customization.yml"," file that will be passed to the Helm along with the chart.",[14,376,377,378,380,381,383,384,386,387,391],{},"To create ",[106,379,373],{}," file with a minimal required configuration (replace ",[106,382,217],{}," with your domain\nand ",[106,385,324],{}," with the value from the project description collected on ",[94,388,390],{"href":389},"#create-project-in-the-openshift-cluster","project creation step","):",[237,393,395],{"className":239,"code":394,"language":241,"meta":242,"style":242},"cat \u003C\u003CEOF > customization.yml\nforge:\n  entryPoint: forge.example.com\n  domain: example.com\n  https: false\n  localPostgresql: true\n  cloudProvider: openshift\n  podSecurityContext:\n    runAsUser: \u003Cproject-uid>\n    runAsGroup: \u003Cproject-uid>\n    fsGroup: \u003Cproject-uid>\n\npostgresql:\n  primary:\n    podSecurityContext:\n      fsGroup: \u003Cproject-uid>\n    containerSecurityContext:\n      runAsUser: \u003Cproject-uid>\nEOF\n",[106,396,397,414,419,425,431,437,443,449,455,461,467,473,480,486,492,498,504,510,516],{"__ignoreMap":242},[246,398,399,402,405,408,411],{"class":248,"line":249},[246,400,401],{"class":252},"cat",[246,403,404],{"class":265}," \u003C\u003C",[246,406,407],{"class":265},"EOF",[246,409,410],{"class":265}," >",[246,412,413],{"class":255}," customization.yml\n",[246,415,416],{"class":248,"line":356},[246,417,418],{"class":255},"forge:\n",[246,420,422],{"class":248,"line":421},3,[246,423,424],{"class":255},"  entryPoint: forge.example.com\n",[246,426,428],{"class":248,"line":427},4,[246,429,430],{"class":255},"  domain: example.com\n",[246,432,434],{"class":248,"line":433},5,[246,435,436],{"class":255},"  https: false\n",[246,438,440],{"class":248,"line":439},6,[246,441,442],{"class":255},"  localPostgresql: true\n",[246,444,446],{"class":248,"line":445},7,[246,447,448],{"class":255},"  cloudProvider: openshift\n",[246,450,452],{"class":248,"line":451},8,[246,453,454],{"class":255},"  podSecurityContext:\n",[246,456,458],{"class":248,"line":457},9,[246,459,460],{"class":255},"    runAsUser: \u003Cproject-uid>\n",[246,462,464],{"class":248,"line":463},10,[246,465,466],{"class":255},"    runAsGroup: \u003Cproject-uid>\n",[246,468,470],{"class":248,"line":469},11,[246,471,472],{"class":255},"    fsGroup: \u003Cproject-uid>\n",[246,474,476],{"class":248,"line":475},12,[246,477,479],{"emptyLinePlaceholder":478},true,"\n",[246,481,483],{"class":248,"line":482},13,[246,484,485],{"class":255},"postgresql:\n",[246,487,489],{"class":248,"line":488},14,[246,490,491],{"class":255},"  primary:\n",[246,493,495],{"class":248,"line":494},15,[246,496,497],{"class":255},"    podSecurityContext:\n",[246,499,501],{"class":248,"line":500},16,[246,502,503],{"class":255},"      fsGroup: \u003Cproject-uid>\n",[246,505,507],{"class":248,"line":506},17,[246,508,509],{"class":255},"    containerSecurityContext:\n",[246,511,513],{"class":248,"line":512},18,[246,514,515],{"class":255},"      runAsUser: \u003Cproject-uid>\n",[246,517,519],{"class":248,"line":518},19,[246,520,521],{"class":265},"EOF\n",[14,523,524,525,218],{},"A full list of all the configuration options can be found in the ",[94,526,529],{"href":527,"rel":528},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fhelm\u002Fblob\u002Fmain\u002Fhelm\u002Fflowfuse\u002FREADME.md#configuration-values",[117],"Helm Chart README",[185,531,533],{"id":532},"label-nodes","Label Nodes",[14,535,536],{},"By default FlowFuse platform expects that worker nodes have specific labels applied. The main reason behind this approach is to separate core application components from Node-RED instances.",[14,538,539],{},"You will need to label at least one node to run the management application and one to run the Node-RED Projects:",[14,541,542],{},"List all nodes in the cluster:",[237,544,546],{"className":239,"code":545,"language":241,"meta":242,"style":242},"oc get nodes\n",[106,547,548],{"__ignoreMap":242},[246,549,550,552,555],{"class":248,"line":249},[246,551,108],{"class":252},[246,553,554],{"class":255}," get",[246,556,557],{"class":255}," nodes\n",[14,559,560],{},"Label management nodes:",[237,562,564],{"className":239,"code":563,"language":241,"meta":242,"style":242},"oc label node \u003Cmanagement-node-name> role=management\n",[106,565,566],{"__ignoreMap":242},[246,567,568,570,573,576,579,582,586,589],{"class":248,"line":249},[246,569,108],{"class":252},[246,571,572],{"class":255}," label",[246,574,575],{"class":255}," node",[246,577,578],{"class":265}," \u003C",[246,580,581],{"class":255},"management-node-nam",[246,583,585],{"class":584},"sTEyZ","e",[246,587,588],{"class":265},">",[246,590,591],{"class":255}," role=management\n",[14,593,594],{},"Label project nodes:",[237,596,598],{"className":239,"code":597,"language":241,"meta":242,"style":242},"oc label node \u003Cprojects-node-name> role=projects\n",[106,599,600],{"__ignoreMap":242},[246,601,602,604,606,608,610,613,615,617],{"class":248,"line":249},[246,603,108],{"class":252},[246,605,572],{"class":255},[246,607,575],{"class":255},[246,609,578],{"class":265},[246,611,612],{"class":255},"projects-node-nam",[246,614,585],{"class":584},[246,616,588],{"class":265},[246,618,619],{"class":255}," role=projects\n",[14,621,622,623,625],{},"To override this behavior, you can remove the node selectors with the following entry in the ",[106,624,373],{}," file which will mean that all pods can run on any nodes.",[237,627,631],{"className":628,"code":629,"language":630,"meta":242,"style":242},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","forge:\n  projectSelector:\n  managementSelector:\n","yaml",[106,632,633,642,649],{"__ignoreMap":242},[246,634,635,639],{"class":248,"line":249},[246,636,638],{"class":637},"swJcz","forge",[246,640,641],{"class":265},":\n",[246,643,644,647],{"class":248,"line":356},[246,645,646],{"class":637},"  projectSelector",[246,648,641],{"class":265},[246,650,651,654],{"class":248,"line":421},[246,652,653],{"class":637},"  managementSelector",[246,655,641],{"class":265},[76,657,659],{"id":658},"start-flowfuse-platform","Start FlowFuse Platform",[14,661,662,663,665],{},"Once you have the ",[106,664,373],{}," file created, you can install FlowFuse using our Helm chart. This will automatically create all required objects and start services:",[237,667,669],{"className":239,"code":668,"language":241,"meta":242,"style":242},"helm upgrade --atomic --install --timeout 10m flowfuse flowfuse\u002Fflowforge -f customization.yml\n",[106,670,671],{"__ignoreMap":242},[246,672,673,675,678,681,684,687,690,692,695,698],{"class":248,"line":249},[246,674,342],{"class":252},[246,676,677],{"class":255}," upgrade",[246,679,680],{"class":255}," --atomic",[246,682,683],{"class":255}," --install",[246,685,686],{"class":255}," --timeout",[246,688,689],{"class":255}," 10m",[246,691,259],{"class":255},[246,693,694],{"class":255}," flowfuse\u002Fflowforge",[246,696,697],{"class":255}," -f",[246,699,413],{"class":255},[76,701,703],{"id":702},"first-run-setup","First Run Setup",[14,705,706],{},"The first time you access the platform in your browser, it will take you through\ncreating an administrator for the platform and other configuration options.",[14,708,709,710,218],{},"For more information, follow ",[94,711,713],{"href":712},"\u002Fdocs\u002Finstall\u002Ffirst-run","this guide",[14,715,716,717,218],{},"Once you have finished setting up the admin user there are some ",[94,718,720],{"href":719},"#common-questions","Kubernetes specific items to consider",[76,722,724],{"id":723},"upgrade","Upgrade",[14,726,727,728,733],{},"All technical aspects of the upgrade process of Flowfuse application running on Kubernetes and managed by Helm chart are maintained in our repository.\nPlease refer to the ",[94,729,732],{"href":730,"rel":731},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fhelm\u002Fblob\u002Fmain\u002Fhelm\u002Fflowfuse\u002FREADME.md#upgrading-chart",[117],"Flowfuse Helm Chart documentation"," for more details\nabout the upgrade process.",[76,735,737],{"id":736},"common-questions","Common Questions",[14,739,740,741,218],{},"For non-OpenShift specific questions, please refer to the ",[94,742,744],{"href":743},"\u002Fdocs\u002Finstall\u002Fkubernetes#common-questions","main kubernetes documentation",[185,746,748],{"id":747},"i-would-like-to-use-embeded-mqtt-broker-how-can-i-do-that","I would like to use embeded MQTT broker, how can I do that?",[750,751,752,753,757,758],"details",{},"\n  ",[754,755,756],"summary",{},"Click to expand","\nThe FlowFuse Helm chart provides the MQTT broker service.\nTo enable the MQTT broker you need to add the following to the `customization.yml` file \n(replace the `",[759,760,761,762],"project-uid",{},"` with the value from the project description collected on [project creation step](#create-project-in-the-openshift-cluster)):\n```yaml\nforge:\n  broker:\n    enabled: true\n    podSecurityContext:\n      runAsUser: ",[759,763,764,765],{},"\n      runAsGroup: ",[759,766,767,768],{},"\n      fsGroup: ",[759,769,770],{},"\n```\nApply changes with [platform startup command](#start-flowfuse-platform).\nCheck the [FlowFuse Helm chart documentation](https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fhelm\u002Ftree\u002Fmain\u002Fhelm\u002Fflowfuse#mqtt-broker) for more details about the parameters that can be configured for the MQTT broker.\n",[185,772,774],{"id":773},"i-would-like-to-use-flowfuse-file-storage-to-store-context-data-how-can-i-do-that","I would like to use FlowFuse File Storage to store context data, how can I do that?",[750,776,752,777,779,780],{},[754,778,756],{},"\nTo enable the FlowFuse File Storage component add the following to the `customization.yml` file\n(replace the `",[759,781,782,783],{},"` with the value from the project description collected on [project creation step](#create-project-in-the-openshift-cluster)):\n```yaml\nforge:\n  fileStore:\n    enabled: true\n    podSecurityContext:\n      runAsUser: ",[759,784,764,785],{},[759,786,767,787],{},[759,788,789],{},"\n```\nApply changes with [platform startup command](#start-flowfuse-platform).\nCheck the [FlowFuse Helm chart documentation](https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fhelm\u002Ftree\u002Fmain\u002Fhelm\u002Fflowfuse#file-storage) for more details about the parameters that can be configured for the File Storage.\n",[791,792,793],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":242,"searchDepth":427,"depth":427,"links":795},[796,799,805,806,807,808],{"id":78,"depth":356,"text":36,"children":797},[798],{"id":187,"depth":421,"text":97},{"id":227,"depth":356,"text":228,"children":800},[801,802,803,804],{"id":231,"depth":421,"text":232},{"id":331,"depth":421,"text":332},{"id":366,"depth":421,"text":367},{"id":532,"depth":421,"text":533},{"id":658,"depth":356,"text":659},{"id":702,"depth":356,"text":703},{"id":723,"depth":356,"text":724},{"id":736,"depth":356,"text":737,"children":809},[810,811],{"id":747,"depth":421,"text":748},{"id":773,"depth":421,"text":774},"md",null,{},"OpenShift Installation","install\u002Fkubernetes\u002Fopenshift.md","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fopenshift",{"title":5,"description":16},"docs\u002Finstall\u002Fkubernetes\u002Fopenshift","2026-03-11 16:10:42 +0100","2.33.2","JNi-U5_g2weGo3Ez4grPAN8jItrlKsvzWShPvgS-lHs",[824,831,850,861],{"name":825,"order":249,"children":826},"FlowFuse User Manuals",[827],{"title":828,"path":829,"group":825,"groupOrder":249,"order":356,"children":830},"FlowFuse API","\u002Fdocs\u002Fapi",[],{"name":832,"order":427,"children":833},"FlowFuse Self-Hosted",[834,838],{"title":835,"path":836,"group":832,"groupOrder":427,"order":249,"children":837},"Quick Start","\u002Fdocs\u002Fquick-start",[],{"title":839,"path":840,"group":832,"groupOrder":427,"order":421,"children":841},"Upgrading FlowFuse","\u002Fdocs\u002Fupgrade",[842,846],{"title":843,"path":844,"order":813,"children":845},"Installing a license","\u002Fdocs\u002Fupgrade\u002Fopen-source-to-premium",[],{"title":847,"path":848,"order":813,"children":849},"Upgrading the Node-RED version","\u002Fdocs\u002Fupgrade\u002Fnodered-version",[],{"name":851,"order":433,"children":852},"Support",[853,857],{"title":854,"path":855,"group":851,"groupOrder":433,"order":421,"children":856},"Premium Support","\u002Fdocs\u002Fpremium-support",[],{"title":858,"path":859,"group":851,"groupOrder":433,"order":813,"children":860},"Debugging Node-RED issues","\u002Fdocs\u002Fdebugging",[],{"name":862,"order":813,"children":863},"Other",[864,912,924,1003,1051,1070,1139,1150],{"title":865,"path":866,"order":813,"children":867},"admin","\u002Fdocs\u002Fadmin",[868,872,884,892,896,900,904,908],{"title":869,"path":870,"order":249,"children":871},"Administering FlowFuse","\u002Fdocs\u002Fadmin\u002Fintroduction",[],{"title":873,"path":874,"order":813,"children":875},"Configuring Single Sign-On (SSO)","\u002Fdocs\u002Fadmin\u002Fsso",[876,880],{"title":877,"path":878,"order":813,"children":879},"LDAP SSO","\u002Fdocs\u002Fadmin\u002Fsso\u002Fldap",[],{"title":881,"path":882,"order":813,"children":883},"SAML SSO","\u002Fdocs\u002Fadmin\u002Fsso\u002Fsaml",[],{"title":885,"path":886,"order":813,"children":887},"hardening","\u002Fdocs\u002Fadmin\u002Fhardening",[888],{"title":889,"path":890,"order":813,"children":891},"Kubernetes Hardening","\u002Fdocs\u002Fadmin\u002Fhardening\u002Fkubernetes",[],{"title":893,"path":894,"order":813,"children":895},"Monitoring","\u002Fdocs\u002Fadmin\u002Fmonitoring",[],{"title":897,"path":898,"order":813,"children":899},"Observability","\u002Fdocs\u002Fadmin\u002Fobservability",[],{"title":901,"path":902,"order":813,"children":903},"Soft Launch Enablement","\u002Fdocs\u002Fadmin\u002Ffeature-flags",[],{"title":905,"path":906,"order":813,"children":907},"Telemetry","\u002Fdocs\u002Fadmin\u002Ftelemetry",[],{"title":909,"path":910,"order":813,"children":911},"User Management","\u002Fdocs\u002Fadmin\u002Fuser-management",[],{"title":913,"path":914,"order":813,"children":915},"cloud","\u002Fdocs\u002Fcloud",[916,920],{"title":917,"path":918,"order":249,"children":919},"Introduction","\u002Fdocs\u002Fcloud\u002Fintroduction",[],{"title":921,"path":922,"order":813,"children":923},"FlowFuse Cloud Billing","\u002Fdocs\u002Fcloud\u002Fbilling",[],{"title":925,"path":926,"order":813,"children":927},"contribute","\u002Fdocs\u002Fcontribute",[928,931,935,939,943,947,951,959,995,999],{"title":917,"path":929,"order":249,"children":930},"\u002Fdocs\u002Fcontribute\u002Fintroduction",[],{"title":932,"path":933,"order":813,"children":934},"Adding Template Settings","\u002Fdocs\u002Fcontribute\u002Fadding-template-settings",[],{"title":936,"path":937,"order":813,"children":938},"API Design","\u002Fdocs\u002Fcontribute\u002Fapi-design",[],{"title":940,"path":941,"order":813,"children":942},"Creating debug stack containers","\u002Fdocs\u002Fcontribute\u002Fcreating-debug-stack-containers",[],{"title":944,"path":945,"order":813,"children":946},"Database migrations","\u002Fdocs\u002Fcontribute\u002Fdb-migrations",[],{"title":948,"path":949,"order":813,"children":950},"FlowFuse Architecture","\u002Fdocs\u002Fcontribute\u002Farchitecture",[],{"title":952,"path":953,"order":813,"children":954},"Local Install","\u002Fdocs\u002Fcontribute\u002Flocal",[955],{"title":956,"path":957,"order":813,"children":958},"Local Stacks","\u002Fdocs\u002Fcontribute\u002Flocal\u002Fstacks",[],{"title":960,"path":961,"order":813,"children":962},"State Flows","\u002Fdocs\u002Fcontribute\u002Fworkflows",[963,967,971,975,979,983,987,991],{"title":964,"path":965,"order":813,"children":966},"Device Editor","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fdevice-editor",[],{"title":968,"path":969,"order":813,"children":970},"Instance states","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fproject-states",[],{"title":972,"path":973,"order":813,"children":974},"Invite External Users","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Finvite-external-user",[],{"title":976,"path":977,"order":813,"children":978},"Project Creation","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fproject-create",[],{"title":980,"path":981,"order":813,"children":982},"Reset Password Flow","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fpassword-reset",[],{"title":984,"path":985,"order":813,"children":986},"Team creation Flow","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fteam-create",[],{"title":988,"path":989,"order":813,"children":990},"User Login Flows","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Flogin",[],{"title":992,"path":993,"order":813,"children":994},"User Sign up Flow","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fsignup",[],{"title":996,"path":997,"order":813,"children":998},"Team Broker","\u002Fdocs\u002Fcontribute\u002Fteam-broker",[],{"title":1000,"path":1001,"order":813,"children":1002},"Working with Feature Flags","\u002Fdocs\u002Fcontribute\u002Ffeature-flags",[],{"title":1004,"path":1005,"order":813,"children":1006},"device-agent","\u002Fdocs\u002Fdevice-agent",[1007,1011,1014,1018,1022,1026],{"title":1008,"path":1009,"order":249,"children":1010},"FlowFuse Device Agent Introduction","\u002Fdocs\u002Fdevice-agent\u002Fintroduction",[],{"title":835,"path":1012,"order":356,"children":1013},"\u002Fdocs\u002Fdevice-agent\u002Fquickstart",[],{"title":1015,"path":1016,"order":427,"children":1017},"Register your Remote Instance","\u002Fdocs\u002Fdevice-agent\u002Fregister",[],{"title":1019,"path":1020,"order":433,"children":1021},"Running the Agent","\u002Fdocs\u002Fdevice-agent\u002Frunning",[],{"title":1023,"path":1024,"order":439,"children":1025},"Deploying your Flows","\u002Fdocs\u002Fdevice-agent\u002Fdeploy",[],{"title":1027,"path":1028,"order":813,"children":1029},"install","\u002Fdocs\u002Fdevice-agent\u002Finstall",[1030,1035,1039,1043,1047],{"title":1031,"path":1032,"group":1033,"order":249,"children":1034},"Overview","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Foverview","DeviceAgentInstallation",[],{"title":1036,"path":1037,"group":1033,"order":356,"children":1038},"Device Agent Installer","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fdevice-agent-installer",[],{"title":1040,"path":1041,"group":1033,"order":421,"children":1042},"Docker Install","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fdocker",[],{"title":1044,"path":1045,"group":1033,"order":427,"children":1046},"Kubernetes Install","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fkubernetes",[],{"title":1048,"path":1049,"group":1033,"order":433,"children":1050},"Manual Install with NPM","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fmanual",[],{"title":1052,"path":1053,"order":813,"children":1054},"hardware","\u002Fdocs\u002Fhardware",[1055,1058,1062,1066],{"title":1031,"path":1056,"order":249,"children":1057},"\u002Fdocs\u002Fhardware\u002Fintroduction",[],{"title":1059,"path":1060,"order":356,"children":1061},"ctrlX - Node-RED","\u002Fdocs\u002Fhardware\u002Fctrlx-node-red",[],{"title":1063,"path":1064,"order":421,"children":1065},"ctrlX - Device Agent","\u002Fdocs\u002Fhardware\u002Fctrlx-device-agent",[],{"title":1067,"path":1068,"order":421,"children":1069},"Raspberry Pi with Raspbian","\u002Fdocs\u002Fhardware\u002Fraspbian",[],{"title":1027,"path":1071,"order":813,"children":1072},"\u002Fdocs\u002Finstall",[1073,1076,1080,1083,1103,1107,1109,1113],{"title":1031,"path":1074,"order":249,"children":1075},"\u002Fdocs\u002Finstall\u002Fintroduction",[],{"title":1077,"path":1078,"order":813,"children":1079},"Configuring FlowFuse","\u002Fdocs\u002Finstall\u002Fconfiguration",[],{"title":1081,"path":224,"order":813,"children":1082},"DNS Setup",[],{"title":1084,"path":1085,"order":813,"children":1086},"Docker install","\u002Fdocs\u002Finstall\u002Fdocker",[1087,1091,1095,1099],{"title":1088,"path":1089,"order":813,"children":1090},"Add Project Stacks on Docker","\u002Fdocs\u002Finstall\u002Fdocker\u002Fstacks",[],{"title":1092,"path":1093,"order":813,"children":1094},"Docker Engine on Windows","\u002Fdocs\u002Finstall\u002Fdocker\u002Fwindows-docker-ce",[],{"title":1096,"path":1097,"order":813,"children":1098},"Docker from AWS Market Place","\u002Fdocs\u002Finstall\u002Fdocker\u002Faws-marketplace",[],{"title":1100,"path":1101,"order":813,"children":1102},"Docker on Digital Ocean","\u002Fdocs\u002Finstall\u002Fdocker\u002Fdigital-ocean",[],{"title":1104,"path":1105,"order":813,"children":1106},"Email configuration","\u002Fdocs\u002Finstall\u002Femail-providers",[],{"title":703,"path":712,"order":813,"children":1108},[],{"title":1110,"path":1111,"order":813,"children":1112},"FlowFuse File Storage","\u002Fdocs\u002Finstall\u002Ffile-storage",[],{"title":1114,"path":1115,"order":813,"children":1116},"Install FlowFuse on Kubernetes","\u002Fdocs\u002Finstall\u002Fkubernetes",[1117,1121,1125,1129,1133,1137],{"title":1118,"path":1119,"order":813,"children":1120},"AWS EKS Installation","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Faws",[],{"title":1122,"path":1123,"order":813,"children":1124},"AWS EKS Installation with Terraform and Helm","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Faws-terraform",[],{"title":1126,"path":1127,"order":813,"children":1128},"Digital Ocean Kubernetes Installation","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fdigital-ocean",[],{"title":1130,"path":1131,"order":813,"children":1132},"Ingress Controller Migration","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fingress-controller-migration",[],{"title":1134,"path":1135,"order":813,"children":1136},"Kubernetes Project Stacks","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fstacks",[],{"title":815,"path":817,"order":813,"children":1138},[],{"title":1140,"path":1141,"order":813,"children":1142},"migration","\u002Fdocs\u002Fmigration",[1143,1146],{"title":917,"path":1144,"order":249,"children":1145},"\u002Fdocs\u002Fmigration\u002Fintroduction",[],{"title":1147,"path":1148,"order":813,"children":1149},"Node-RED Tools plugin","\u002Fdocs\u002Fmigration\u002Fnode-red-tools",[],{"title":1151,"path":1152,"order":813,"children":1153},"user","\u002Fdocs\u002Fuser",[1154,1158,1162,1166,1170,1174,1178,1182,1186,1190,1194,1198,1210,1214,1218,1222,1226,1230,1234,1238,1242,1246,1250,1254,1258,1262,1265,1269],{"title":1155,"path":1156,"order":249,"children":1157},"Getting Started","\u002Fdocs\u002Fuser\u002Fintroduction",[],{"title":1159,"path":1160,"order":249,"children":1161},"Static asset service","\u002Fdocs\u002Fuser\u002Fstatic-asset-service",[],{"title":1163,"path":1164,"order":356,"children":1165},"Bill of Materials","\u002Fdocs\u002Fuser\u002Fbill-of-materials",[],{"title":1167,"path":1168,"order":356,"children":1169},"FlowFuse Concepts","\u002Fdocs\u002Fuser\u002Fconcepts",[],{"title":1171,"path":1172,"order":463,"children":1173},"Instance States","\u002Fdocs\u002Fuser\u002Finstance-states",[],{"title":1175,"path":1176,"order":813,"children":1177},"Changing the Stack","\u002Fdocs\u002Fuser\u002Fchangestack",[],{"title":1179,"path":1180,"order":813,"children":1181},"Custom Hostnames","\u002Fdocs\u002Fuser\u002Fcustom-hostnames",[],{"title":1183,"path":1184,"order":813,"children":1185},"Custom Node Packages","\u002Fdocs\u002Fuser\u002Fcustom-npm-packages",[],{"title":1187,"path":1188,"order":813,"children":1189},"Dashboards","\u002Fdocs\u002Fuser\u002Fdashboards",[],{"title":1191,"path":1192,"order":813,"children":1193},"DevOps Pipelines","\u002Fdocs\u002Fuser\u002Fdevops-pipelines",[],{"title":1195,"path":1196,"order":813,"children":1197},"Environment Variables","\u002Fdocs\u002Fuser\u002Fenvvar",[],{"title":1199,"path":1200,"order":813,"children":1201},"FlowFuse Expert","\u002Fdocs\u002Fuser\u002Fexpert",[1202,1206],{"title":1203,"path":1204,"order":813,"children":1205},"AI in Node-RED","\u002Fdocs\u002Fuser\u002Fexpert\u002Fnode-red-embedded-ai",[],{"title":1207,"path":1208,"order":813,"children":1209},"Chat Interface","\u002Fdocs\u002Fuser\u002Fexpert\u002Fchat",[],{"title":1211,"path":1212,"order":813,"children":1213},"FlowFuse File Nodes","\u002Fdocs\u002Fuser\u002Ffilenodes",[],{"title":1215,"path":1216,"order":813,"children":1217},"FlowFuse MQTT Nodes","\u002Fdocs\u002Fuser\u002Fmqtt-nodes",[],{"title":1219,"path":1220,"order":813,"children":1221},"FlowFuse Persistent Context","\u002Fdocs\u002Fuser\u002Fpersistent-context",[],{"title":1223,"path":1224,"order":813,"children":1225},"FlowFuse Project Nodes","\u002Fdocs\u002Fuser\u002Fprojectnodes",[],{"title":1227,"path":1228,"order":813,"children":1229},"FlowFuse Tables","\u002Fdocs\u002Fuser\u002Fff-tables",[],{"title":1231,"path":1232,"order":813,"children":1233},"Groups","\u002Fdocs\u002Fuser\u002Fdevice-groups",[],{"title":1235,"path":1236,"order":813,"children":1237},"High Availability mode","\u002Fdocs\u002Fuser\u002Fhigh-availability",[],{"title":1239,"path":1240,"order":813,"children":1241},"HTTP Access Tokens","\u002Fdocs\u002Fuser\u002Fhttp-access-tokens",[],{"title":1243,"path":1244,"order":813,"children":1245},"Instance Settings","\u002Fdocs\u002Fuser\u002Finstance-settings",[],{"title":1247,"path":1248,"order":813,"children":1249},"Logging","\u002Fdocs\u002Fuser\u002Flogs",[],{"title":1251,"path":1252,"order":813,"children":1253},"Role-Based Access Control","\u002Fdocs\u002Fuser\u002Frole-based-access-control",[],{"title":1255,"path":1256,"order":813,"children":1257},"Shared Team Library","\u002Fdocs\u002Fuser\u002Fshared-library",[],{"title":1259,"path":1260,"order":813,"children":1261},"Snapshots","\u002Fdocs\u002Fuser\u002Fsnapshots",[],{"title":996,"path":1263,"order":813,"children":1264},"\u002Fdocs\u002Fuser\u002Fteambroker",[],{"title":1266,"path":1267,"order":813,"children":1268},"Teams","\u002Fdocs\u002Fuser\u002Fteam",[],{"title":1270,"path":1271,"order":813,"children":1272},"User Settings","\u002Fdocs\u002Fuser\u002Fuser-settings",[],1786546042168]