[{"data":1,"prerenderedAt":2007},["ShallowReactive",2],{"docs-\u002Fdocs\u002Finstall\u002Fdocker\u002F":3,"docs-nav":1561},{"id":4,"title":5,"body":6,"description":16,"extension":1549,"layout":1550,"meta":1551,"navGroup":1550,"navGroupOrder":1550,"navOrder":1550,"navTitle":1552,"navigation":1553,"originalPath":1554,"path":1555,"redirect":1550,"seo":1556,"stem":1557,"updated":1558,"version":1559,"__hash__":1560},"docs\u002Fdocs\u002Finstall\u002Fdocker\u002Findex.md","Docker Install",{"type":7,"value":8,"toc":1516},"minimark",[9,13,17,26,31,81,84,87,127,130,153,158,161,172,175,190,195,198,201,204,216,222,232,239,243,247,254,300,304,310,320,333,358,364,368,374,377,381,386,400,416,424,430,434,437,458,461,469,500,608,612,617,625,629,660,664,683,686,704,718,722,725,732,735,739,752,873,925,929,933,936,975,982,986,992,998,1001,1004,1007,1140,1144,1161,1209,1212,1226,1230,1233,1236,1239,1242,1272,1275,1318,1321,1401,1404,1421,1425,1433,1436,1445,1448,1452,1455,1458,1465,1470,1473,1479,1483,1512],[10,11,5],"h1",{"id":12},"docker-install",[14,15,16],"p",{},"This guide walks you through detailed set up of FlowFuse Platform on a Docker container environment using Docker Compose. Typically suited for small\u002Fmedium on premise deployments.\nBy the end, you will have a fully functioning FlowFuse instance running in a Docker container.",[14,18,19,20,25],{},"The following guide walks through a full production-ready deployment. If you want to install FlowFuse for evaluation purposes, please refer to the ",[21,22,24],"a",{"href":23},"\u002Fdocs\u002Fquick-start","Quick Start Guide",".",[27,28,30],"h2",{"id":29},"checklist","Checklist",[32,33,38,39,38,64],"div",{"className":34},[35,36,37],"grid","grid-cols-2","gap-8","\n  ",[32,40,42,43,42,47,38],{"className":41},[29],"\n    ",[44,45,46],"label",{},"Prerequisites",[32,48,49,50,49,54,49,57,49,61,42],{},"\n      ",[51,52],"checklist-item",{"task":53},"Domain Name",[51,55],{"task":56},"Docker Engine & Docker Compose",[51,58],{"type":59,"task":60},"recommended","Setup Dedicated Database",[51,62],{"type":59,"task":63},"Prepare TLS Certificates",[32,65,42,67,42,70,38],{"className":66},[29],[44,68,69],{},"Installation",[32,71,49,72,49,75,49,78,42],{},[51,73],{"task":74},"Download FlowFuse",[51,76],{"task":77},"Configure FlowFuse",[51,79],{"type":59,"task":80},"Enable HTTPS",[27,82,46],{"id":83},"prerequisites",[14,85,86],{},"Before you begin, ensure you have the following:",[88,89,90,103],"ol",{},[91,92,93,97,98,102],"li",{},[94,95,96],"strong",{},"Domain Name & DNS:"," A domain name that you own and can configure DNS settings for (explained in ",[21,99,101],{"href":100},"#dns","DNS",")",[91,104,105,108,109,115,116,121,122,126],{},[94,106,107],{},"Install Docker:"," ",[21,110,114],{"href":111,"rel":112},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002F",[113],"nofollow","Docker Engine"," and ",[21,117,120],{"href":118,"rel":119},"https:\u002F\u002Fdocs.docker.com\u002Fcompose\u002Finstall\u002F",[113],"Docker Compose"," (in ",[123,124,125],"code",{},"2.23.1"," version or higher) must be installed on your system (either as a standalone binary or as docker plugin).",[14,128,129],{},"For a production-ready environment, we also recommend:",[131,132,133,144],"ul",{},[91,134,135,138,139,143],{},[94,136,137],{},"Database:"," Prepare dedicated database on a external database server (see ",[21,140,142],{"href":141},"#how-to-use-external-database-server","FAQ"," for more details)",[91,145,146,149,150,102],{},[94,147,148],{},"TLS Certification:"," Prepare TLS certificate for your domain and configure FlowFuse platform to use it (see ",[21,151,80],{"href":152},"#enable-https-optional",[154,155,157],"h3",{"id":156},"requirements","Requirements",[14,159,160],{},"To run the FlowFuse platform smoothly, we recommend the following minimum hardware specs:",[131,162,163,166,169],{},[91,164,165],{},"CPU: 2 cores",[91,167,168],{},"Memory: 4 GB RAM",[91,170,171],{},"Storage: 20 GB disk space\nEach Node-RED instance you host will uses 0.1 CPU cores and 256 MB of memory by default. This parameters can be adjusted in admin area of FlowFuse platform. Keep this in mind when sizing your hardware, especially if plan to create multiple hosted instances.",[14,173,174],{},"When deploying the FlowFuse platform behind a firewall or proxy, ensure that the following ports are open and forwards a traffic to the server where FlowFuse is installed:",[131,176,177,184],{},[91,178,179,180,183],{},"Port ",[123,181,182],{},"80"," (HTTP)",[91,185,179,186,189],{},[123,187,188],{},"443"," (HTTPS)",[191,192,194],"h4",{"id":193},"aws-elastic-container-service","AWS Elastic Container Service",[14,196,197],{},"At this time we do not support deploying FlowFuse to AWS's Elastic Container Service.",[154,199,101],{"id":200},"dns",[14,202,203],{},"The orchestration uses an instance of Nginx to route requests to each Node-RED instance. To do this it needs each instance to have a unique hostname, to generate this the instance name is prepended to a supplied domain.",[14,205,206,207,212,213,25],{},"To make this work you will need to configure a DNS server to map a ",[21,208,211],{"href":209,"rel":210},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWildcard_DNS_record",[113],"wildcard domain entry"," to the IP address of the host running Docker. e.g ",[123,214,215],{},"*.example.com",[14,217,218,219],{},"The FlowFuse Application will be hosted on ",[123,220,221],{},"http:\u002F\u002Fforge.example.com",[14,223,224,227,228,231],{},[94,225,226],{},"Note"," At this moment FlowFuse platform is not capable to run on localhost. You must point your domain to the external IP address of the host machine, not the loopback address (",[123,229,230],{},"127.0.0.1",").",[14,233,234,235,25],{},"Notes on how to setup DNS can be found ",[21,236,238],{"href":237},"\u002Fdocs\u002Finstall\u002Fdns-setup","here",[27,240,242],{"id":241},"installing-flowfuse","Installing FlowFuse",[154,244,246],{"id":245},"download-installation-files","Download installation files",[14,248,249,250,253],{},"Download the latest version of the FlowFuse Docker Compose file and example ",[123,251,252],{},".env"," file used for installation configuration:",[255,256,261],"pre",{"className":257,"code":258,"language":259,"meta":260,"style":260},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl -L -o docker-compose.yml https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fdocker-compose\u002Freleases\u002Flatest\u002Fdownload\u002Fdocker-compose.yml\ncurl -L -o .env https:\u002F\u002Fraw.githubusercontent.com\u002FFlowFuse\u002Fdocker-compose\u002Frefs\u002Fheads\u002Fmain\u002F.env.example\n","bash","",[123,262,263,285],{"__ignoreMap":260},[264,265,268,272,276,279,282],"span",{"class":266,"line":267},"line",1,[264,269,271],{"class":270},"sBMFI","curl",[264,273,275],{"class":274},"sfazB"," -L",[264,277,278],{"class":274}," -o",[264,280,281],{"class":274}," docker-compose.yml",[264,283,284],{"class":274}," https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fdocker-compose\u002Freleases\u002Flatest\u002Fdownload\u002Fdocker-compose.yml\n",[264,286,288,290,292,294,297],{"class":266,"line":287},2,[264,289,271],{"class":270},[264,291,275],{"class":274},[264,293,278],{"class":274},[264,295,296],{"class":274}," .env",[264,298,299],{"class":274}," https:\u002F\u002Fraw.githubusercontent.com\u002FFlowFuse\u002Fdocker-compose\u002Frefs\u002Fheads\u002Fmain\u002F.env.example\n",[154,301,303],{"id":302},"configure","Configure",[14,305,306,307,309],{},"Installation configuration is done via the ",[123,308,252],{}," file.\nThe minimal configuration required is the domain name you will be using for the platform.",[14,311,312,313,315,316,319],{},"Edit downloaded ",[123,314,252],{}," file with the editor of your choice and update the ",[123,317,318],{},"DOMAIN"," variable with the domain you will be using for the platform.",[14,321,322,323,326,327,329,330,332],{},"Alternatevily, use ",[123,324,325],{},"sed"," to update the ",[123,328,318],{}," variable in the ",[123,331,252],{}," file:",[255,334,336],{"className":257,"code":335,"language":259,"meta":260,"style":260},"sed -i 's\u002F^DOMAIN=.*\u002FDOMAIN=example.com\u002F' .env\n",[123,337,338],{"__ignoreMap":260},[264,339,340,342,345,349,352,355],{"class":266,"line":267},[264,341,325],{"class":270},[264,343,344],{"class":274}," -i",[264,346,348],{"class":347},"sMK4o"," '",[264,350,351],{"class":274},"s\u002F^DOMAIN=.*\u002FDOMAIN=example.com\u002F",[264,353,354],{"class":347},"'",[264,356,357],{"class":274}," .env\n",[14,359,360,361,363],{},"Please note that once set, the ",[123,362,318],{}," value should not be changed as it is used as part of the configuration stored in the database of each Node-RED instance. The ability to migrate to different domain is on the feature backlog.",[154,365,367],{"id":366},"enable-https-optional","Enable HTTPS (optional)",[14,369,370,371,373],{},"If you want to serve the FlowFuse platform and Node-RED instances over TLS you will need to obtain a wildcard TLS certificate for the domain you are using eg ",[123,372,215],{},". If you are running on an Internet facing machine you can use our configuration files to generate it atomatically.",[14,375,376],{},"Otherwise you will need to contact a SSL Certificate vendor and configure Nginx manually.",[191,378,380],{"id":379},"automatic-tls-certificate","Automatic TLS Certificate",[14,382,383],{},[94,384,385],{},"Note: Automatic TLS generation is possible only for the publicly available servers",[14,387,388,389,391,392,395,396,399],{},"In the ",[123,390,252],{}," file, set the ",[123,393,394],{},"TLS_ENABLED"," variable to ",[123,397,398],{},"true",":",[255,401,403],{"className":257,"code":402,"language":259,"meta":260,"style":260},"TLS_ENABLED=true\n",[123,404,405],{"__ignoreMap":260},[264,406,407,410,413],{"class":266,"line":267},[264,408,394],{"class":409},"sTEyZ",[264,411,412],{"class":347},"=",[264,414,415],{"class":274},"true\n",[14,417,418,419,423],{},"Proceed to the ",[21,420,422],{"href":421},"#start-flowfuse-platform","next paragraph"," to start the platform with automatically generated TLS certificate.",[425,426,427],"blockquote",{},[14,428,429],{},"When using automatic TLS certificate generation, the platform will take a few minutes to generate them on the first platform startup.\nFor a short period of time browsers may report untrusted certificate warning. This is expected behavior and should resolve itself once the certificate is generated.",[191,431,433],{"id":432},"custom-tls-certificate","Custom TLS Certificate",[14,435,436],{},"If you have own TLS certificate, you can use it in FlowFuse platform installation as well. As mentioned before, the certificate must be a wildcard one for the domain you are using.",[32,438,442,446],{"className":439},[440,441],"ff-callout","ff-callout--note",[14,443,226],{"className":444},[445],"ff-callout__title",[32,447,450],{"className":448},[449],"ff-callout__content",[14,451,452,453,457],{},"If your TLS certificate is issued by a private Certificate Authority, additional configuration is required so that Hosted Instances trust the CA. See ",[21,454,456],{"href":455},"#what-additional-configuration-is-required-when-the-tls-certificate-is-issued-by-a-private-certificate-authority","What additional configuration is required when the TLS certificate is issued by a private Certificate Authority?"," for the step-by-step instructions.",[14,459,460],{},"To configure FlowFuse platform with your certificate, you need to have:",[131,462,463,466],{},[91,464,465],{},"certificate key file",[91,467,468],{},"certificate's full chain (server certificate and intermediate certificates bundled into single file)",[14,470,471,472,474,475,477,478,115,481,484,485,487,488,490,491,493,494,496,497,499],{},"To add your certificate to the platform, edit the ",[123,473,252],{}," file downloaded earlier and set values for ",[123,476,394],{},", ",[123,479,480],{},"TLS_CERTIFICATE",[123,482,483],{},"TLS_KEY"," variables. ",[123,486,394],{}," variable should be set to ",[123,489,398],{},".\n",[123,492,480],{}," should contain the full chain of the certificate while ",[123,495,483],{}," should contain the key file.\nExample of ",[123,498,252],{}," file with the custom TLS certificate configuration:",[255,501,503],{"className":257,"code":502,"language":259,"meta":260,"style":260},"TLS_ENABLED=true\nTLS_CERTIFICATE=\"\n-----BEGIN CERTIFICATE-----\nMIIFfzCCBKegAwIBAgISA0\n...\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIFfzCCBKegAwIBAgISA0\n...\n-----END CERTIFICATE-----\n\"\nTLS_KEY=\"\n-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD\n...\n-----END PRIVATE KEY-----\n\"\n",[123,504,505,513,522,528,534,540,546,551,556,561,566,571,580,586,592,597,603],{"__ignoreMap":260},[264,506,507,509,511],{"class":266,"line":267},[264,508,394],{"class":409},[264,510,412],{"class":347},[264,512,415],{"class":274},[264,514,515,517,519],{"class":266,"line":287},[264,516,480],{"class":409},[264,518,412],{"class":347},[264,520,521],{"class":347},"\"\n",[264,523,525],{"class":266,"line":524},3,[264,526,527],{"class":274},"-----BEGIN CERTIFICATE-----\n",[264,529,531],{"class":266,"line":530},4,[264,532,533],{"class":274},"MIIFfzCCBKegAwIBAgISA0\n",[264,535,537],{"class":266,"line":536},5,[264,538,539],{"class":274},"...\n",[264,541,543],{"class":266,"line":542},6,[264,544,545],{"class":274},"-----END CERTIFICATE-----\n",[264,547,549],{"class":266,"line":548},7,[264,550,527],{"class":274},[264,552,554],{"class":266,"line":553},8,[264,555,533],{"class":274},[264,557,559],{"class":266,"line":558},9,[264,560,539],{"class":274},[264,562,564],{"class":266,"line":563},10,[264,565,545],{"class":274},[264,567,569],{"class":266,"line":568},11,[264,570,521],{"class":347},[264,572,574,576,578],{"class":266,"line":573},12,[264,575,483],{"class":409},[264,577,412],{"class":347},[264,579,521],{"class":347},[264,581,583],{"class":266,"line":582},13,[264,584,585],{"class":274},"-----BEGIN PRIVATE KEY-----\n",[264,587,589],{"class":266,"line":588},14,[264,590,591],{"class":274},"MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD\n",[264,593,595],{"class":266,"line":594},15,[264,596,539],{"class":274},[264,598,600],{"class":266,"line":599},16,[264,601,602],{"class":274},"-----END PRIVATE KEY-----\n",[264,604,606],{"class":266,"line":605},17,[264,607,521],{"class":347},[27,609,611],{"id":610},"start-flowfuse-platform","Start FlowFuse platform",[14,613,614],{},[94,615,616],{},"Note: Make sure all configuration are done above before proceeding.",[14,618,619],{},[94,620,621,622,624],{},"Note: Commands must be executed within the same directory where the Docker Compose and ",[123,623,252],{}," files are located.",[191,626,628],{"id":627},"with-automatic-tls-certificate-generation","With automatic TLS certificate generation",[255,630,632],{"className":257,"code":631,"language":259,"meta":260,"style":260},"docker compose --profile autotls -p flowfuse up -d\n",[123,633,634],{"__ignoreMap":260},[264,635,636,639,642,645,648,651,654,657],{"class":266,"line":267},[264,637,638],{"class":270},"docker",[264,640,641],{"class":274}," compose",[264,643,644],{"class":274}," --profile",[264,646,647],{"class":274}," autotls",[264,649,650],{"class":274}," -p",[264,652,653],{"class":274}," flowfuse",[264,655,656],{"class":274}," up",[264,658,659],{"class":274}," -d\n",[191,661,663],{"id":662},"in-all-other-scenarios-including-custom-tls-certificate","In all other scenarios, including custom TLS certificate",[255,665,667],{"className":257,"code":666,"language":259,"meta":260,"style":260},"docker compose -p flowfuse up -d\n",[123,668,669],{"__ignoreMap":260},[264,670,671,673,675,677,679,681],{"class":266,"line":267},[264,672,638],{"class":270},[264,674,641],{"class":274},[264,676,650],{"class":274},[264,678,653],{"class":274},[264,680,656],{"class":274},[264,682,659],{"class":274},[14,684,685],{},"The platform will take a few minutes to start up. You can check the status of the containers by running:",[255,687,689],{"className":257,"code":688,"language":259,"meta":260,"style":260},"docker compose -p flowfuse ps\n",[123,690,691],{"__ignoreMap":260},[264,692,693,695,697,699,701],{"class":266,"line":267},[264,694,638],{"class":270},[264,696,641],{"class":274},[264,698,650],{"class":274},[264,700,653],{"class":274},[264,702,703],{"class":274}," ps\n",[14,705,706,707,710,711,714,715,717],{},"Visit ",[123,708,709],{},"forge.example.com"," (replace ",[123,712,713],{},"example.com"," with the domain configured in the ",[123,716,252],{}," file) in your browser to access the FlowFuse platform.",[27,719,721],{"id":720},"first-run-setup","First Run Setup",[14,723,724],{},"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,726,727,728,25],{},"For more information, follow ",[21,729,731],{"href":730},"\u002Fdocs\u002Finstall\u002Ffirst-run","this guide",[14,733,734],{},"Once you have finished setting up the admin user there are some Docker specific items to consider.",[27,736,738],{"id":737},"upgrade","Upgrade",[14,740,741],{},[94,742,743,744,747,748],{},"Note: If you are upgrading from version ",[123,745,746],{},"2.10.0"," or lower, please follow ",[21,749,731],{"href":750,"rel":751},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fdocker-compose\u002Fblob\u002Fmain\u002FUPGRADE.md",[113],[88,753,754,772,804,824,849,867],{},[91,755,756,757,771],{},"Find the Docker Compose project name:\n",[255,758,760],{"className":257,"code":759,"language":259,"meta":260,"style":260},"docker compose ls\n",[123,761,762],{"__ignoreMap":260},[264,763,764,766,768],{"class":266,"line":267},[264,765,638],{"class":270},[264,767,641],{"class":274},[264,769,770],{"class":274}," ls\n","\nThe output will show the project name, as well as the location of Docker Compose file used for creating the project.",[91,773,774,775,778,779],{},"Stop the existing project (replace ",[123,776,777],{},"$projectName"," with your project name):\n",[255,780,782],{"className":257,"code":781,"language":259,"meta":260,"style":260},"docker compose -p $projectName down --rmi all\n",[123,783,784],{"__ignoreMap":260},[264,785,786,788,790,792,795,798,801],{"class":266,"line":267},[264,787,638],{"class":270},[264,789,641],{"class":274},[264,791,650],{"class":274},[264,793,794],{"class":409}," $projectName ",[264,796,797],{"class":274},"down",[264,799,800],{"class":274}," --rmi",[264,802,803],{"class":274}," all\n",[91,805,806,807],{},"Download the latest Docker Compose files:\n",[255,808,810],{"className":257,"code":809,"language":259,"meta":260,"style":260},"curl -L -o docker-compose.yml https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fdocker-compose\u002Freleases\u002Flatest\u002Fdownload\u002Fdocker-compose.yml\n",[123,811,812],{"__ignoreMap":260},[264,813,814,816,818,820,822],{"class":266,"line":267},[264,815,271],{"class":270},[264,817,275],{"class":274},[264,819,278],{"class":274},[264,821,281],{"class":274},[264,823,284],{"class":274},[91,825,826,827,829,830,832,833],{},"Make sure the ",[123,828,252],{}," file is present and contains your installation-specific configuration. Download an example ",[123,831,252],{}," file if needed:\n",[255,834,836],{"className":257,"code":835,"language":259,"meta":260,"style":260},"curl -o .env.example https:\u002F\u002Fraw.githubusercontent.com\u002FFlowFuse\u002Fdocker-compose\u002Frefs\u002Fheads\u002Fmain\u002F.env.example\n",[123,837,838],{"__ignoreMap":260},[264,839,840,842,844,847],{"class":266,"line":267},[264,841,271],{"class":270},[264,843,278],{"class":274},[264,845,846],{"class":274}," .env.example",[264,848,299],{"class":274},[91,850,851,852],{},"Pull the latest version of the default stack container (and any other stacks you have configured)\n",[255,853,855],{"className":257,"code":854,"language":259,"meta":260,"style":260},"docker pull flowfuse\u002Fnode-red:latest\n",[123,856,857],{"__ignoreMap":260},[264,858,859,861,864],{"class":266,"line":267},[264,860,638],{"class":270},[264,862,863],{"class":274}," pull",[264,865,866],{"class":274}," flowfuse\u002Fnode-red:latest\n",[91,868,869,870,872],{},"Start the project depending on the TLS configuration (replace ",[123,871,777],{}," with your project name):",[131,874,875,903],{},[91,876,877,878],{},"automatic TLS:\n",[255,879,881],{"className":257,"code":880,"language":259,"meta":260,"style":260},"docker compose --profile autossl -p $projectName up -d\n",[123,882,883],{"__ignoreMap":260},[264,884,885,887,889,891,894,896,898,901],{"class":266,"line":267},[264,886,638],{"class":270},[264,888,641],{"class":274},[264,890,644],{"class":274},[264,892,893],{"class":274}," autossl",[264,895,650],{"class":274},[264,897,794],{"class":409},[264,899,900],{"class":274},"up",[264,902,659],{"class":274},[91,904,905,906],{},"any other scenario:\n",[255,907,909],{"className":257,"code":908,"language":259,"meta":260,"style":260},"docker compose -p $projectName up -d\n",[123,910,911],{"__ignoreMap":260},[264,912,913,915,917,919,921,923],{"class":266,"line":267},[264,914,638],{"class":270},[264,916,641],{"class":274},[264,918,650],{"class":274},[264,920,794],{"class":409},[264,922,900],{"class":274},[264,924,659],{"class":274},[27,926,928],{"id":927},"common-questions","Common Questions",[154,930,932],{"id":931},"how-to-use-external-database-server","How to use external database server?",[14,934,935],{},"FlowFuse platform uses PostgreSQL database to store its data. By default, the database is created and managed by the Docker Compose.\nIf you want to use an external database server, you need to:",[131,937,938,959],{},[91,939,940,941,115,944,947,948,115,951,954,955,958],{},"on your database server, create ",[123,942,943],{},"flowforge",[123,945,946],{},"ff-context"," databases as well as a user with access to both of them (see ",[123,949,950],{},"configs.postgres_db_setup",[123,952,953],{},"configs.postgres_context_setup"," in the ",[123,956,957],{},"docker-compose.yml"," file for the reference)",[91,960,961,962,964,965,477,968,477,971,974],{},"configure the connection to the database in the ",[123,963,252],{}," file. Set the ",[123,966,967],{},"DB_HOST",[123,969,970],{},"DB_USER",[123,972,973],{},"DB_PASSWORD"," variables to the connection details of the external database server",[14,976,977,978,981],{},"Once ready, ",[21,979,980],{"href":421},"start the application"," .",[154,983,985],{"id":984},"how-can-i-provide-my-own-tls-certificate","How can I provide my own TLS certificate?",[14,987,988,989,991],{},"If you have your own TLS certificate, you can use it in FlowFuse platform installation as well. See ",[21,990,80],{"href":152}," section for more details.",[14,993,994,995,457],{},"Additionally, if your TLS certificate is issued by a private Certificate Authority, you will need to perform some additional configuration to make hosted Node-RED instances trust the CA. See ",[21,996,997],{"href":455},"What additional configuration is required when the TLS certificate is issued by a private Certificate Authority",[154,999,456],{"id":1000},"what-additional-configuration-is-required-when-the-tls-certificate-is-issued-by-a-private-certificate-authority",[14,1002,1003],{},"When the FlowFuse platform is configured with a TLS certificate issued by a private Certificate Authority (CA), hosted Node-RED instances will not trust the CA by default. As a result, opening the editor for a hosted instance will fail with a certificate trust error.",[14,1005,1006],{},"To make hosted Node-RED instances trust the private CA, follow the steps below:",[88,1008,1009,1047,1111,1134],{},[91,1010,1011,1014,1015,1017,1018,1021,1022,1025,1026,399,1029],{},[94,1012,1013],{},"Update the environment file."," In the ",[123,1016,252],{}," file created during the installation process, set ",[123,1019,1020],{},"DOCKER_DRIVER_PRIVATE_CA_PATH"," to the path of your Certificate Authority certificate file. This must be the path to the file stored on the Docker host server. For example, if the ",[123,1023,1024],{},"ca.pem"," file is located at ",[123,1027,1028],{},"\u002Fusr\u002Flocal\u002Fssl\u002Fca.pem",[255,1030,1032],{"className":257,"code":1031,"language":259,"meta":260,"style":260},"DOCKER_DRIVER_PRIVATE_CA_PATH=\"\u002Fusr\u002Flocal\u002Fssl\u002Fca.pem\"\n",[123,1033,1034],{"__ignoreMap":260},[264,1035,1036,1038,1040,1043,1045],{"class":266,"line":267},[264,1037,1020],{"class":409},[264,1039,412],{"class":347},[264,1041,1042],{"class":347},"\"",[264,1044,1028],{"class":274},[264,1046,521],{"class":347},[91,1048,1049,1014,1052,1054,1055,1058,1059,1062,1063,1065,1066],{},[94,1050,1051],{},"Modify the Compose file.",[123,1053,957],{}," file used to create the FlowFuse Docker stack, uncomment the ",[123,1056,1057],{},"NODE_EXTRA_CA_CERTS"," environment variable and the corresponding volume mount on the ",[123,1060,1061],{},"forge"," service so the certificate is passed correctly to the platform. You can apply both changes with a single ",[123,1064,325],{}," command:",[255,1067,1069],{"className":257,"code":1068,"language":259,"meta":260,"style":260},"sed -i.bak -E -e 's\u002F^#([[:space:]]*- \"NODE_EXTRA_CA_CERTS=)\u002F\\1\u002F' -e 's\u002F^#([[:space:]]*- \\$\\{DOCKER_DRIVER_PRIVATE_CA_PATH\\})\u002F\\1\u002F' docker-compose.yml && rm docker-compose.yml.bak\n",[123,1070,1071],{"__ignoreMap":260},[264,1072,1073,1075,1078,1081,1084,1086,1089,1091,1093,1095,1098,1100,1102,1105,1108],{"class":266,"line":267},[264,1074,325],{"class":270},[264,1076,1077],{"class":274}," -i.bak",[264,1079,1080],{"class":274}," -E",[264,1082,1083],{"class":274}," -e",[264,1085,348],{"class":347},[264,1087,1088],{"class":274},"s\u002F^#([[:space:]]*- \"NODE_EXTRA_CA_CERTS=)\u002F\\1\u002F",[264,1090,354],{"class":347},[264,1092,1083],{"class":274},[264,1094,348],{"class":347},[264,1096,1097],{"class":274},"s\u002F^#([[:space:]]*- \\$\\{DOCKER_DRIVER_PRIVATE_CA_PATH\\})\u002F\\1\u002F",[264,1099,354],{"class":347},[264,1101,281],{"class":274},[264,1103,1104],{"class":347}," &&",[264,1106,1107],{"class":270}," rm",[264,1109,1110],{"class":274}," docker-compose.yml.bak\n",[91,1112,1113,1116,1117],{},[94,1114,1115],{},"Restart the Forge service"," to apply the changes:",[255,1118,1120],{"className":257,"code":1119,"language":259,"meta":260,"style":260},"docker compose restart forge\n",[123,1121,1122],{"__ignoreMap":260},[264,1123,1124,1126,1128,1131],{"class":266,"line":267},[264,1125,638],{"class":270},[264,1127,641],{"class":274},[264,1129,1130],{"class":274}," restart",[264,1132,1133],{"class":274}," forge\n",[91,1135,1136,1139],{},[94,1137,1138],{},"Apply changes to running instances."," Once the platform is online, manually suspend and start all running hosted instances so they pick up the new TLS settings.",[154,1141,1143],{"id":1142},"i-would-like-to-invite-my-team-members-to-the-platform-with-e-mail-how-can-i-do-that","I would like to invite my team members to the platform with e-mail, how can I do that?",[14,1145,1146,1147,1150,1151,1153,1154,1156,1157,1160],{},"In order to configure FlowFuse platform with external e-mail server, you need to adjust ",[123,1148,1149],{},"EMAIL_*"," variables in the ",[123,1152,252],{}," file.\nFind the ",[123,1155,252],{}," file end edit ",[123,1158,1159],{},"Email configuration"," section with following details:",[131,1162,1163,1172,1178,1187,1195,1201],{},[91,1164,1165,1168,1169,1171],{},[123,1166,1167],{},"EMAIL_ENABLED"," - set to ",[123,1170,398],{}," to enable e-mail functionality",[91,1173,1174,1177],{},[123,1175,1176],{},"EMAIL_HOST"," - provide SMTP server host",[91,1179,1180,1183,1184,102],{},[123,1181,1182],{},"EMAIL_PORT"," - provide SMTP server port (default is ",[123,1185,1186],{},"587",[91,1188,1189,1168,1192,1194],{},[123,1190,1191],{},"EMAIL_SECURE",[123,1193,398],{}," if the connection should be secured",[91,1196,1197,1200],{},[123,1198,1199],{},"EMAIL_USER"," - provide SMTP server username",[91,1202,1203,1206,1207],{},[123,1204,1205],{},"EMAIL_PASSWORD"," - provide SMTP for the user defined in ",[123,1208,1199],{},[14,1210,1211],{},"Restart the core application to apply the changes:",[255,1213,1214],{"className":257,"code":1119,"language":259,"meta":260,"style":260},[123,1215,1216],{"__ignoreMap":260},[264,1217,1218,1220,1222,1224],{"class":266,"line":267},[264,1219,638],{"class":270},[264,1221,641],{"class":274},[264,1223,1130],{"class":274},[264,1225,1133],{"class":274},[154,1227,1229],{"id":1228},"connection-refused-error","Connection Refused error",[14,1231,1232],{},"After starting the platform, I can't access it in the browser - I see \"Connection Refused error\"",[14,1234,1235],{},"If you are using the Digital Ocean Docker Droplet to host FlowFuse you will need to ensure that port 80 & 443 are opened in the UFW firewall before starting.",[14,1237,1238],{},"FlowFuse platform is running on ports 80 and 443, so you need to open these ports in the firewall. Below are examples of commands to open these ports:",[14,1240,1241],{},"Ubuntu:",[255,1243,1245],{"className":257,"code":1244,"language":259,"meta":260,"style":260},"sudo ufw apply http\nsudo ufw apply https\n",[123,1246,1247,1261],{"__ignoreMap":260},[264,1248,1249,1252,1255,1258],{"class":266,"line":267},[264,1250,1251],{"class":270},"sudo",[264,1253,1254],{"class":274}," ufw",[264,1256,1257],{"class":274}," apply",[264,1259,1260],{"class":274}," http\n",[264,1262,1263,1265,1267,1269],{"class":266,"line":287},[264,1264,1251],{"class":270},[264,1266,1254],{"class":274},[264,1268,1257],{"class":274},[264,1270,1271],{"class":274}," https\n",[14,1273,1274],{},"CentOS:",[255,1276,1278],{"className":257,"code":1277,"language":259,"meta":260,"style":260},"sudo firewall-cmd --zone=public --add-service=http --permanent\nsudo firewall-cmd --zone=public --add-service=https --permanent\nsudo firewall-cmd --reload\n",[123,1279,1280,1296,1309],{"__ignoreMap":260},[264,1281,1282,1284,1287,1290,1293],{"class":266,"line":267},[264,1283,1251],{"class":270},[264,1285,1286],{"class":274}," firewall-cmd",[264,1288,1289],{"class":274}," --zone=public",[264,1291,1292],{"class":274}," --add-service=http",[264,1294,1295],{"class":274}," --permanent\n",[264,1297,1298,1300,1302,1304,1307],{"class":266,"line":287},[264,1299,1251],{"class":270},[264,1301,1286],{"class":274},[264,1303,1289],{"class":274},[264,1305,1306],{"class":274}," --add-service=https",[264,1308,1295],{"class":274},[264,1310,1311,1313,1315],{"class":266,"line":524},[264,1312,1251],{"class":270},[264,1314,1286],{"class":274},[264,1316,1317],{"class":274}," --reload\n",[14,1319,1320],{},"Windows (command prompt):",[255,1322,1324],{"className":257,"code":1323,"language":259,"meta":260,"style":260},"netsh advfirewall firewall add rule name=\"Open Port 80\" dir=in action=allow protocol=TCP localport=80\nnetsh advfirewall firewall add rule name=\"Open Port 443\" dir=in action=allow protocol=TCP localport=443\n",[123,1325,1326,1369],{"__ignoreMap":260},[264,1327,1328,1331,1334,1337,1340,1343,1346,1348,1351,1353,1356,1359,1362,1365],{"class":266,"line":267},[264,1329,1330],{"class":270},"netsh",[264,1332,1333],{"class":274}," advfirewall",[264,1335,1336],{"class":274}," firewall",[264,1338,1339],{"class":274}," add",[264,1341,1342],{"class":274}," rule",[264,1344,1345],{"class":274}," name=",[264,1347,1042],{"class":347},[264,1349,1350],{"class":274},"Open Port 80",[264,1352,1042],{"class":347},[264,1354,1355],{"class":274}," dir=in",[264,1357,1358],{"class":274}," action=allow",[264,1360,1361],{"class":274}," protocol=TCP",[264,1363,1364],{"class":274}," localport=",[264,1366,1368],{"class":1367},"sbssI","80\n",[264,1370,1371,1373,1375,1377,1379,1381,1383,1385,1388,1390,1392,1394,1396,1398],{"class":266,"line":287},[264,1372,1330],{"class":270},[264,1374,1333],{"class":274},[264,1376,1336],{"class":274},[264,1378,1339],{"class":274},[264,1380,1342],{"class":274},[264,1382,1345],{"class":274},[264,1384,1042],{"class":347},[264,1386,1387],{"class":274},"Open Port 443",[264,1389,1042],{"class":347},[264,1391,1355],{"class":274},[264,1393,1358],{"class":274},[264,1395,1361],{"class":274},[264,1397,1364],{"class":274},[264,1399,1400],{"class":1367},"443\n",[14,1402,1403],{},"Windows (PowerShell):",[255,1405,1409],{"className":1406,"code":1407,"language":1408,"meta":260,"style":260},"language-powershell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","New-NetFireWallRule -DisplayName 'WSL 8080TCP' -Direction Inbound -LocalPort 8080 -Action Allow -Protocol TCP\nNew-NetFireWallRule -DisplayName 'WSL 8080TCP' -Direction Outbound -LocalPort 8080 -Action Allow -Protocol TCP\n","powershell",[123,1410,1411,1416],{"__ignoreMap":260},[264,1412,1413],{"class":266,"line":267},[264,1414,1415],{},"New-NetFireWallRule -DisplayName 'WSL 8080TCP' -Direction Inbound -LocalPort 8080 -Action Allow -Protocol TCP\n",[264,1417,1418],{"class":266,"line":287},[264,1419,1420],{},"New-NetFireWallRule -DisplayName 'WSL 8080TCP' -Direction Outbound -LocalPort 8080 -Action Allow -Protocol TCP\n",[154,1422,1424],{"id":1423},"i-installed-flowfuse-on-windows-with-wsl2-application-is-running-but-i-cant-access-it-in-the-browser","I installed FlowFuse on Windows with WSL2, application is running but I can't access it in the browser",[14,1426,1427,1428,1432],{},"Next to ",[21,1429,1431],{"href":1430},"#connection-refused-error","opening the ports in the firewall",",\nyou need to configure port forwarding from Windows host to WSL2 server.",[14,1434,1435],{},"To forward traffic from an external IP to your container, run the following PowerShell command (administrator privileges required):",[255,1437,1439],{"className":1406,"code":1438,"language":1408,"meta":260,"style":260},"netsh interface portproxy add v4tov4 listenport=80 listenaddress=0.0.0.0 connectport=80 connectaddress=127.0.0.1\n",[123,1440,1441],{"__ignoreMap":260},[264,1442,1443],{"class":266,"line":267},[264,1444,1438],{},[14,1446,1447],{},"This command forwards traffic from port 80 on your external IP address to port 80 on your localhost, where the Nginx Proxy container is listening for connections.",[154,1449,1451],{"id":1450},"how-can-i-enable-persistent-storage-for-node-red-instances","How can I enable persistent storage for Node-RED instances?",[14,1453,1454],{},"Node-RED instances running in Docker do not have direct access to a persistent file system to store files or use for storing context data.",[14,1456,1457],{},"FlowFuse includes a File Storage service that can be enabled to provide persistent storage.",[14,1459,1460,1461,1464],{},"To disable the default File nodes, edit the Template and add ",[123,1462,1463],{},"10-file.js,23-watch.js"," to the \"Exclude nodes by filename\" section",[1466,1467],"img",{"src":1468,"width":1469},"\u002Fdocs\u002Finstall\u002Fimages\u002Ffile-node-template.png",500,[14,1471,1472],{},"FlowFuse Docker Compose files includes FlowFuse File Storage component by default and starts it along with the platform.",[14,1474,1475,1476,25],{},"Full details on configuring the File Storage service are available ",[21,1477,238],{"href":1478},"\u002Fdocs\u002Finstall\u002Ffile-storage",[27,1480,1482],{"id":1481},"uninstall","Uninstall",[131,1484,1485,1496,1503],{},[91,1486,1487,1488,1491,1492,1495],{},"Bring the services down with ",[123,1489,1490],{},"docker compose -p flowfuse down -v"," (note the extra ",[123,1493,1494],{},"-v"," to delete all the volumes, only include this if you do not want to reuse this install)",[91,1497,1498,1499,1502],{},"Use ",[123,1500,1501],{},"docker images"," to list container images",[91,1504,1498,1505,1508,1509],{},[123,1506,1507],{},"docker rmi [imagename]:[tag]"," to remove all images that start with ",[123,1510,1511],{},"flowfuse\u002F",[1513,1514,1515],"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 .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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":260,"searchDepth":530,"depth":530,"links":1517},[1518,1519,1525,1533,1537,1538,1539,1548],{"id":29,"depth":287,"text":30},{"id":83,"depth":287,"text":46,"children":1520},[1521,1524],{"id":156,"depth":524,"text":157,"children":1522},[1523],{"id":193,"depth":530,"text":194},{"id":200,"depth":524,"text":101},{"id":241,"depth":287,"text":242,"children":1526},[1527,1528,1529],{"id":245,"depth":524,"text":246},{"id":302,"depth":524,"text":303},{"id":366,"depth":524,"text":367,"children":1530},[1531,1532],{"id":379,"depth":530,"text":380},{"id":432,"depth":530,"text":433},{"id":610,"depth":287,"text":611,"children":1534},[1535,1536],{"id":627,"depth":530,"text":628},{"id":662,"depth":530,"text":663},{"id":720,"depth":287,"text":721},{"id":737,"depth":287,"text":738},{"id":927,"depth":287,"text":928,"children":1540},[1541,1542,1543,1544,1545,1546,1547],{"id":931,"depth":524,"text":932},{"id":984,"depth":524,"text":985},{"id":1000,"depth":524,"text":456},{"id":1142,"depth":524,"text":1143},{"id":1228,"depth":524,"text":1229},{"id":1423,"depth":524,"text":1424},{"id":1450,"depth":524,"text":1451},{"id":1481,"depth":287,"text":1482},"md",null,{},"Docker install",true,"install\u002Fdocker\u002FREADME.md","\u002Fdocs\u002Finstall\u002Fdocker",{"title":5,"description":16},"docs\u002Finstall\u002Fdocker\u002Findex","2026-08-04 15:31:36 +0200","2.33.2","eD4mc9t7NGKOnmk3YtObI_MyJKYOq0CaTJ_34fK4xtw",[1562,1569,1587,1598],{"name":1563,"order":267,"children":1564},"FlowFuse User Manuals",[1565],{"title":1566,"path":1567,"group":1563,"groupOrder":267,"order":287,"children":1568},"FlowFuse API","\u002Fdocs\u002Fapi",[],{"name":1570,"order":530,"children":1571},"FlowFuse Self-Hosted",[1572,1575],{"title":1573,"path":23,"group":1570,"groupOrder":530,"order":267,"children":1574},"Quick Start",[],{"title":1576,"path":1577,"group":1570,"groupOrder":530,"order":524,"children":1578},"Upgrading FlowFuse","\u002Fdocs\u002Fupgrade",[1579,1583],{"title":1580,"path":1581,"order":1550,"children":1582},"Installing a license","\u002Fdocs\u002Fupgrade\u002Fopen-source-to-premium",[],{"title":1584,"path":1585,"order":1550,"children":1586},"Upgrading the Node-RED version","\u002Fdocs\u002Fupgrade\u002Fnodered-version",[],{"name":1588,"order":536,"children":1589},"Support",[1590,1594],{"title":1591,"path":1592,"group":1588,"groupOrder":536,"order":524,"children":1593},"Premium Support","\u002Fdocs\u002Fpremium-support",[],{"title":1595,"path":1596,"group":1588,"groupOrder":536,"order":1550,"children":1597},"Debugging Node-RED issues","\u002Fdocs\u002Fdebugging",[],{"name":1599,"order":1550,"children":1600},"Other",[1601,1649,1661,1740,1787,1806,1873,1884],{"title":1602,"path":1603,"order":1550,"children":1604},"admin","\u002Fdocs\u002Fadmin",[1605,1609,1621,1629,1633,1637,1641,1645],{"title":1606,"path":1607,"order":267,"children":1608},"Administering FlowFuse","\u002Fdocs\u002Fadmin\u002Fintroduction",[],{"title":1610,"path":1611,"order":1550,"children":1612},"Configuring Single Sign-On (SSO)","\u002Fdocs\u002Fadmin\u002Fsso",[1613,1617],{"title":1614,"path":1615,"order":1550,"children":1616},"LDAP SSO","\u002Fdocs\u002Fadmin\u002Fsso\u002Fldap",[],{"title":1618,"path":1619,"order":1550,"children":1620},"SAML SSO","\u002Fdocs\u002Fadmin\u002Fsso\u002Fsaml",[],{"title":1622,"path":1623,"order":1550,"children":1624},"hardening","\u002Fdocs\u002Fadmin\u002Fhardening",[1625],{"title":1626,"path":1627,"order":1550,"children":1628},"Kubernetes Hardening","\u002Fdocs\u002Fadmin\u002Fhardening\u002Fkubernetes",[],{"title":1630,"path":1631,"order":1550,"children":1632},"Monitoring","\u002Fdocs\u002Fadmin\u002Fmonitoring",[],{"title":1634,"path":1635,"order":1550,"children":1636},"Observability","\u002Fdocs\u002Fadmin\u002Fobservability",[],{"title":1638,"path":1639,"order":1550,"children":1640},"Soft Launch Enablement","\u002Fdocs\u002Fadmin\u002Ffeature-flags",[],{"title":1642,"path":1643,"order":1550,"children":1644},"Telemetry","\u002Fdocs\u002Fadmin\u002Ftelemetry",[],{"title":1646,"path":1647,"order":1550,"children":1648},"User Management","\u002Fdocs\u002Fadmin\u002Fuser-management",[],{"title":1650,"path":1651,"order":1550,"children":1652},"cloud","\u002Fdocs\u002Fcloud",[1653,1657],{"title":1654,"path":1655,"order":267,"children":1656},"Introduction","\u002Fdocs\u002Fcloud\u002Fintroduction",[],{"title":1658,"path":1659,"order":1550,"children":1660},"FlowFuse Cloud Billing","\u002Fdocs\u002Fcloud\u002Fbilling",[],{"title":1662,"path":1663,"order":1550,"children":1664},"contribute","\u002Fdocs\u002Fcontribute",[1665,1668,1672,1676,1680,1684,1688,1696,1732,1736],{"title":1654,"path":1666,"order":267,"children":1667},"\u002Fdocs\u002Fcontribute\u002Fintroduction",[],{"title":1669,"path":1670,"order":1550,"children":1671},"Adding Template Settings","\u002Fdocs\u002Fcontribute\u002Fadding-template-settings",[],{"title":1673,"path":1674,"order":1550,"children":1675},"API Design","\u002Fdocs\u002Fcontribute\u002Fapi-design",[],{"title":1677,"path":1678,"order":1550,"children":1679},"Creating debug stack containers","\u002Fdocs\u002Fcontribute\u002Fcreating-debug-stack-containers",[],{"title":1681,"path":1682,"order":1550,"children":1683},"Database migrations","\u002Fdocs\u002Fcontribute\u002Fdb-migrations",[],{"title":1685,"path":1686,"order":1550,"children":1687},"FlowFuse Architecture","\u002Fdocs\u002Fcontribute\u002Farchitecture",[],{"title":1689,"path":1690,"order":1550,"children":1691},"Local Install","\u002Fdocs\u002Fcontribute\u002Flocal",[1692],{"title":1693,"path":1694,"order":1550,"children":1695},"Local Stacks","\u002Fdocs\u002Fcontribute\u002Flocal\u002Fstacks",[],{"title":1697,"path":1698,"order":1550,"children":1699},"State Flows","\u002Fdocs\u002Fcontribute\u002Fworkflows",[1700,1704,1708,1712,1716,1720,1724,1728],{"title":1701,"path":1702,"order":1550,"children":1703},"Device Editor","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fdevice-editor",[],{"title":1705,"path":1706,"order":1550,"children":1707},"Instance states","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fproject-states",[],{"title":1709,"path":1710,"order":1550,"children":1711},"Invite External Users","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Finvite-external-user",[],{"title":1713,"path":1714,"order":1550,"children":1715},"Project Creation","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fproject-create",[],{"title":1717,"path":1718,"order":1550,"children":1719},"Reset Password Flow","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fpassword-reset",[],{"title":1721,"path":1722,"order":1550,"children":1723},"Team creation Flow","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fteam-create",[],{"title":1725,"path":1726,"order":1550,"children":1727},"User Login Flows","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Flogin",[],{"title":1729,"path":1730,"order":1550,"children":1731},"User Sign up Flow","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fsignup",[],{"title":1733,"path":1734,"order":1550,"children":1735},"Team Broker","\u002Fdocs\u002Fcontribute\u002Fteam-broker",[],{"title":1737,"path":1738,"order":1550,"children":1739},"Working with Feature Flags","\u002Fdocs\u002Fcontribute\u002Ffeature-flags",[],{"title":1741,"path":1742,"order":1550,"children":1743},"device-agent","\u002Fdocs\u002Fdevice-agent",[1744,1748,1751,1755,1759,1763],{"title":1745,"path":1746,"order":267,"children":1747},"FlowFuse Device Agent Introduction","\u002Fdocs\u002Fdevice-agent\u002Fintroduction",[],{"title":1573,"path":1749,"order":287,"children":1750},"\u002Fdocs\u002Fdevice-agent\u002Fquickstart",[],{"title":1752,"path":1753,"order":530,"children":1754},"Register your Remote Instance","\u002Fdocs\u002Fdevice-agent\u002Fregister",[],{"title":1756,"path":1757,"order":536,"children":1758},"Running the Agent","\u002Fdocs\u002Fdevice-agent\u002Frunning",[],{"title":1760,"path":1761,"order":542,"children":1762},"Deploying your Flows","\u002Fdocs\u002Fdevice-agent\u002Fdeploy",[],{"title":1764,"path":1765,"order":1550,"children":1766},"install","\u002Fdocs\u002Fdevice-agent\u002Finstall",[1767,1772,1776,1779,1783],{"title":1768,"path":1769,"group":1770,"order":267,"children":1771},"Overview","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Foverview","DeviceAgentInstallation",[],{"title":1773,"path":1774,"group":1770,"order":287,"children":1775},"Device Agent Installer","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fdevice-agent-installer",[],{"title":5,"path":1777,"group":1770,"order":524,"children":1778},"\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fdocker",[],{"title":1780,"path":1781,"group":1770,"order":530,"children":1782},"Kubernetes Install","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fkubernetes",[],{"title":1784,"path":1785,"group":1770,"order":536,"children":1786},"Manual Install with NPM","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fmanual",[],{"title":1788,"path":1789,"order":1550,"children":1790},"hardware","\u002Fdocs\u002Fhardware",[1791,1794,1798,1802],{"title":1768,"path":1792,"order":267,"children":1793},"\u002Fdocs\u002Fhardware\u002Fintroduction",[],{"title":1795,"path":1796,"order":287,"children":1797},"ctrlX - Node-RED","\u002Fdocs\u002Fhardware\u002Fctrlx-node-red",[],{"title":1799,"path":1800,"order":524,"children":1801},"ctrlX - Device Agent","\u002Fdocs\u002Fhardware\u002Fctrlx-device-agent",[],{"title":1803,"path":1804,"order":524,"children":1805},"Raspberry Pi with Raspbian","\u002Fdocs\u002Fhardware\u002Fraspbian",[],{"title":1764,"path":1807,"order":1550,"children":1808},"\u002Fdocs\u002Finstall",[1809,1812,1816,1819,1837,1840,1842,1845],{"title":1768,"path":1810,"order":267,"children":1811},"\u002Fdocs\u002Finstall\u002Fintroduction",[],{"title":1813,"path":1814,"order":1550,"children":1815},"Configuring FlowFuse","\u002Fdocs\u002Finstall\u002Fconfiguration",[],{"title":1817,"path":237,"order":1550,"children":1818},"DNS Setup",[],{"title":1552,"path":1555,"order":1550,"children":1820},[1821,1825,1829,1833],{"title":1822,"path":1823,"order":1550,"children":1824},"Add Project Stacks on Docker","\u002Fdocs\u002Finstall\u002Fdocker\u002Fstacks",[],{"title":1826,"path":1827,"order":1550,"children":1828},"Docker Engine on Windows","\u002Fdocs\u002Finstall\u002Fdocker\u002Fwindows-docker-ce",[],{"title":1830,"path":1831,"order":1550,"children":1832},"Docker from AWS Market Place","\u002Fdocs\u002Finstall\u002Fdocker\u002Faws-marketplace",[],{"title":1834,"path":1835,"order":1550,"children":1836},"Docker on Digital Ocean","\u002Fdocs\u002Finstall\u002Fdocker\u002Fdigital-ocean",[],{"title":1159,"path":1838,"order":1550,"children":1839},"\u002Fdocs\u002Finstall\u002Femail-providers",[],{"title":721,"path":730,"order":1550,"children":1841},[],{"title":1843,"path":1478,"order":1550,"children":1844},"FlowFuse File Storage",[],{"title":1846,"path":1847,"order":1550,"children":1848},"Install FlowFuse on Kubernetes","\u002Fdocs\u002Finstall\u002Fkubernetes",[1849,1853,1857,1861,1865,1869],{"title":1850,"path":1851,"order":1550,"children":1852},"AWS EKS Installation","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Faws",[],{"title":1854,"path":1855,"order":1550,"children":1856},"AWS EKS Installation with Terraform and Helm","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Faws-terraform",[],{"title":1858,"path":1859,"order":1550,"children":1860},"Digital Ocean Kubernetes Installation","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fdigital-ocean",[],{"title":1862,"path":1863,"order":1550,"children":1864},"Ingress Controller Migration","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fingress-controller-migration",[],{"title":1866,"path":1867,"order":1550,"children":1868},"Kubernetes Project Stacks","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fstacks",[],{"title":1870,"path":1871,"order":1550,"children":1872},"OpenShift Installation","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fopenshift",[],{"title":1874,"path":1875,"order":1550,"children":1876},"migration","\u002Fdocs\u002Fmigration",[1877,1880],{"title":1654,"path":1878,"order":267,"children":1879},"\u002Fdocs\u002Fmigration\u002Fintroduction",[],{"title":1881,"path":1882,"order":1550,"children":1883},"Node-RED Tools plugin","\u002Fdocs\u002Fmigration\u002Fnode-red-tools",[],{"title":1885,"path":1886,"order":1550,"children":1887},"user","\u002Fdocs\u002Fuser",[1888,1892,1896,1900,1904,1908,1912,1916,1920,1924,1928,1932,1944,1948,1952,1956,1960,1964,1968,1972,1976,1980,1984,1988,1992,1996,1999,2003],{"title":1889,"path":1890,"order":267,"children":1891},"Getting Started","\u002Fdocs\u002Fuser\u002Fintroduction",[],{"title":1893,"path":1894,"order":267,"children":1895},"Static asset service","\u002Fdocs\u002Fuser\u002Fstatic-asset-service",[],{"title":1897,"path":1898,"order":287,"children":1899},"Bill of Materials","\u002Fdocs\u002Fuser\u002Fbill-of-materials",[],{"title":1901,"path":1902,"order":287,"children":1903},"FlowFuse Concepts","\u002Fdocs\u002Fuser\u002Fconcepts",[],{"title":1905,"path":1906,"order":563,"children":1907},"Instance States","\u002Fdocs\u002Fuser\u002Finstance-states",[],{"title":1909,"path":1910,"order":1550,"children":1911},"Changing the Stack","\u002Fdocs\u002Fuser\u002Fchangestack",[],{"title":1913,"path":1914,"order":1550,"children":1915},"Custom Hostnames","\u002Fdocs\u002Fuser\u002Fcustom-hostnames",[],{"title":1917,"path":1918,"order":1550,"children":1919},"Custom Node Packages","\u002Fdocs\u002Fuser\u002Fcustom-npm-packages",[],{"title":1921,"path":1922,"order":1550,"children":1923},"Dashboards","\u002Fdocs\u002Fuser\u002Fdashboards",[],{"title":1925,"path":1926,"order":1550,"children":1927},"DevOps Pipelines","\u002Fdocs\u002Fuser\u002Fdevops-pipelines",[],{"title":1929,"path":1930,"order":1550,"children":1931},"Environment Variables","\u002Fdocs\u002Fuser\u002Fenvvar",[],{"title":1933,"path":1934,"order":1550,"children":1935},"FlowFuse Expert","\u002Fdocs\u002Fuser\u002Fexpert",[1936,1940],{"title":1937,"path":1938,"order":1550,"children":1939},"AI in Node-RED","\u002Fdocs\u002Fuser\u002Fexpert\u002Fnode-red-embedded-ai",[],{"title":1941,"path":1942,"order":1550,"children":1943},"Chat Interface","\u002Fdocs\u002Fuser\u002Fexpert\u002Fchat",[],{"title":1945,"path":1946,"order":1550,"children":1947},"FlowFuse File Nodes","\u002Fdocs\u002Fuser\u002Ffilenodes",[],{"title":1949,"path":1950,"order":1550,"children":1951},"FlowFuse MQTT Nodes","\u002Fdocs\u002Fuser\u002Fmqtt-nodes",[],{"title":1953,"path":1954,"order":1550,"children":1955},"FlowFuse Persistent Context","\u002Fdocs\u002Fuser\u002Fpersistent-context",[],{"title":1957,"path":1958,"order":1550,"children":1959},"FlowFuse Project Nodes","\u002Fdocs\u002Fuser\u002Fprojectnodes",[],{"title":1961,"path":1962,"order":1550,"children":1963},"FlowFuse Tables","\u002Fdocs\u002Fuser\u002Fff-tables",[],{"title":1965,"path":1966,"order":1550,"children":1967},"Groups","\u002Fdocs\u002Fuser\u002Fdevice-groups",[],{"title":1969,"path":1970,"order":1550,"children":1971},"High Availability mode","\u002Fdocs\u002Fuser\u002Fhigh-availability",[],{"title":1973,"path":1974,"order":1550,"children":1975},"HTTP Access Tokens","\u002Fdocs\u002Fuser\u002Fhttp-access-tokens",[],{"title":1977,"path":1978,"order":1550,"children":1979},"Instance Settings","\u002Fdocs\u002Fuser\u002Finstance-settings",[],{"title":1981,"path":1982,"order":1550,"children":1983},"Logging","\u002Fdocs\u002Fuser\u002Flogs",[],{"title":1985,"path":1986,"order":1550,"children":1987},"Role-Based Access Control","\u002Fdocs\u002Fuser\u002Frole-based-access-control",[],{"title":1989,"path":1990,"order":1550,"children":1991},"Shared Team Library","\u002Fdocs\u002Fuser\u002Fshared-library",[],{"title":1993,"path":1994,"order":1550,"children":1995},"Snapshots","\u002Fdocs\u002Fuser\u002Fsnapshots",[],{"title":1733,"path":1997,"order":1550,"children":1998},"\u002Fdocs\u002Fuser\u002Fteambroker",[],{"title":2000,"path":2001,"order":1550,"children":2002},"Teams","\u002Fdocs\u002Fuser\u002Fteam",[],{"title":2004,"path":2005,"order":1550,"children":2006},"User Settings","\u002Fdocs\u002Fuser\u002Fuser-settings",[],1786546040843]