[{"data":1,"prerenderedAt":684},["ShallowReactive",2],{"docs-\u002Fdocs\u002Finstall\u002Fdocker\u002Fdigital-ocean\u002F":3,"docs-nav":228},{"id":4,"title":5,"body":6,"description":215,"extension":216,"layout":217,"meta":218,"navGroup":217,"navGroupOrder":217,"navOrder":217,"navTitle":219,"navigation":220,"originalPath":221,"path":222,"redirect":217,"seo":223,"stem":224,"updated":225,"version":226,"__hash__":227},"docs\u002Fdocs\u002Finstall\u002Fdocker\u002Fdigital-ocean.md","1-Click Digital Ocean Droplet Install",{"type":7,"value":8,"toc":204},"minimark",[9,13,25,33,38,43,46,61,64,74,77,84,88,91,94,107,115,119,122,125,144,155,161,164,170,173,179,182,189,193],[10,11,5],"h1",{"id":12},"_1-click-digital-ocean-droplet-install",[14,15,16,17,24],"p",{},"We have packaged the Docker Compose build of FlowFuse as a Digital Ocean Droplet. It can be found in the ",[18,19,23],"a",{"href":20,"rel":21},"https:\u002F\u002Fmarketplace.digitalocean.com\u002Fapps\u002Fflowfuse?refcode=fb23e438a477",[22],"nofollow","Digital Ocean Market Place",".",[14,26,27,28],{},"You can go straight to the ",[18,29,32],{"href":30,"rel":31},"https:\u002F\u002Fmarketplace.digitalocean.com\u002Fapps\u002Fflowfuse?refcode=fb23e438a477&action=deploy",[22],"deployment wizard",[34,35,37],"h2",{"id":36},"prerequisites","Prerequisites",[39,40,42],"h3",{"id":41},"dns","DNS",[14,44,45],{},"To make use of this Droplet you will need a DNS Domain to host both the FlowFuse application and the Node-RED instances you create.",[14,47,48,49,53,54,57,58,24],{},"For example if you use ",[50,51,52],"code",{},"ff.example.com"," then the FlowFuse application will run on ",[50,55,56],{},"https:\u002F\u002Fforge.ff.example.com"," and Node-RED would be on ",[50,59,60],{},"https:\u002F\u002F[instance-name].ff.example.com",[14,62,63],{},"You will need to set up a wildcard DNS entry that points the whole domain to the Public IP address of the Droplet.",[65,66,71],"pre",{"className":67,"code":69,"language":70},[68],"language-text","*.ff.example.com 3600 A xxx.xxx.xxx.xxx\n","text",[50,72,69],{"__ignoreMap":73},"",[14,75,76],{},"The Public IP address of the Droplet will be listed in the UI when it has been created",[14,78,79],{},[80,81],"img",{"alt":82,"src":83},"Digital Ocean Droplet IP address ","\u002Fdocs\u002Finstall\u002Fimages\u002Fdo-public-ip.png",[39,85,87],{"id":86},"smtp-server-optional","SMTP Server (Optional)",[14,89,90],{},"This is used to send invites to new user and to enable password resets.",[14,92,93],{},"You will need to know the following:",[95,96,97,101,104],"ul",{},[98,99,100],"li",{},"SMTP Server hostname",[98,102,103],{},"Port (Default 587)",[98,105,106],{},"Username\u002FPassword",[14,108,109,110,24],{},"If you don't already have a SMTP server you can grab one from an email delivery service like\nSparkPost, Sendgrid, Mailgun, or any ",[18,111,114],{"href":112,"rel":113},"https:\u002F\u002Fmarketplace.digitalocean.com\u002Fcategory\u002Femail",[22],"other email solution provided by Digital Ocean",[34,116,118],{"id":117},"setup","Setup",[14,120,121],{},"After the Droplet has been created and you have set up the DNS entry you will need to connect to the droplet to and enter the domain name",[14,123,124],{},"You can do this in 2 ways",[126,127,128,137],"ol",{},[98,129,130,131],{},"With SSH, either using keys or password depending on what Authentication mechanism you picked at creation time\n",[65,132,135],{"className":133,"code":134,"language":70},[68],"ssh -i digital-ocean-ssh.key root@xxx.xxx.xxx.xxx\n",[50,136,134],{"__ignoreMap":73},[98,138,139,140],{},"Opening a Console from the Web Interface\n",[80,141],{"alt":142,"src":143},"Digital Ocean Console","\u002Fdocs\u002Finstall\u002Fimages\u002Fdo-droplet-console.png",[14,145,146,147,150,151,154],{},"Once logged in you will be presented with a wizard to set the domain and confirm by entering ",[50,148,149],{},"1"," or ",[50,152,153],{},"2"," to enter the domain again.",[14,156,157],{},[80,158],{"alt":159,"src":160},"Digital Ocean Wizard","\u002Fdocs\u002Finstall\u002Fimages\u002Fdo-wizard.png",[14,162,163],{},"The wizard will then ask about setting up a SMTP server to allow FlowFuse to send email. This used to invite users or reset passwords,\nit is optional.",[14,165,166],{},[80,167],{"alt":168,"src":169},"Digital Ocean Wizard SMTP","\u002Fdocs\u002Finstall\u002Fimages\u002Fdo-wizard-smtp.png",[14,171,172],{},"The wizard will then update the configuration files and start FlowFuse",[14,174,175],{},[80,176],{"alt":177,"src":178},"Digital Ocean Direct to Setup","\u002Fdocs\u002Finstall\u002Fimages\u002Fdo-direct-to-setup.png",[14,180,181],{},"It will then present a link to complete setup in the browser. You can now close the console connection to the droplet.",[14,183,184,185],{},"Details of how to complete this steps are ",[18,186,188],{"href":187},"\u002Fdocs\u002Finstall\u002Ffirst-run","here",[34,190,192],{"id":191},"upgrade","Upgrade",[14,194,195,196,200,201],{},"You can follow the normal FlowFuse Docker ",[18,197,199],{"href":198},"\u002Fdocs\u002Finstall\u002Fdocker#upgrade","upgrade instructions",", the install directory is ",[50,202,203],{},"\u002Fopt\u002Fflowforge",{"title":73,"searchDepth":205,"depth":205,"links":206},4,[207,213,214],{"id":36,"depth":208,"text":37,"children":209},2,[210,212],{"id":41,"depth":211,"text":42},3,{"id":86,"depth":211,"text":87},{"id":117,"depth":208,"text":118},{"id":191,"depth":208,"text":192},"We have packaged the Docker Compose build of FlowFuse as a Digital Ocean Droplet. It can be found in the Digital Ocean Market Place.","md",null,{},"Docker on Digital Ocean",true,"install\u002Fdocker\u002Fdigital-ocean.md","\u002Fdocs\u002Finstall\u002Fdocker\u002Fdigital-ocean",{"title":5,"description":215},"docs\u002Finstall\u002Fdocker\u002Fdigital-ocean","2025-04-08 10:37:31 +0200","2.33.2","gP54DcRAHfb0IH90ybro96OZ6zUPMfGu2gPXiPRZ4jA",[229,237,256,268],{"name":230,"order":231,"children":232},"FlowFuse User Manuals",1,[233],{"title":234,"path":235,"group":230,"groupOrder":231,"order":208,"children":236},"FlowFuse API","\u002Fdocs\u002Fapi",[],{"name":238,"order":205,"children":239},"FlowFuse Self-Hosted",[240,244],{"title":241,"path":242,"group":238,"groupOrder":205,"order":231,"children":243},"Quick Start","\u002Fdocs\u002Fquick-start",[],{"title":245,"path":246,"group":238,"groupOrder":205,"order":211,"children":247},"Upgrading FlowFuse","\u002Fdocs\u002Fupgrade",[248,252],{"title":249,"path":250,"order":217,"children":251},"Installing a license","\u002Fdocs\u002Fupgrade\u002Fopen-source-to-premium",[],{"title":253,"path":254,"order":217,"children":255},"Upgrading the Node-RED version","\u002Fdocs\u002Fupgrade\u002Fnodered-version",[],{"name":257,"order":258,"children":259},"Support",5,[260,264],{"title":261,"path":262,"group":257,"groupOrder":258,"order":211,"children":263},"Premium Support","\u002Fdocs\u002Fpremium-support",[],{"title":265,"path":266,"group":257,"groupOrder":258,"order":217,"children":267},"Debugging Node-RED issues","\u002Fdocs\u002Fdebugging",[],{"name":269,"order":217,"children":270},"Other",[271,319,331,410,459,478,549,560],{"title":272,"path":273,"order":217,"children":274},"admin","\u002Fdocs\u002Fadmin",[275,279,291,299,303,307,311,315],{"title":276,"path":277,"order":231,"children":278},"Administering FlowFuse","\u002Fdocs\u002Fadmin\u002Fintroduction",[],{"title":280,"path":281,"order":217,"children":282},"Configuring Single Sign-On (SSO)","\u002Fdocs\u002Fadmin\u002Fsso",[283,287],{"title":284,"path":285,"order":217,"children":286},"LDAP SSO","\u002Fdocs\u002Fadmin\u002Fsso\u002Fldap",[],{"title":288,"path":289,"order":217,"children":290},"SAML SSO","\u002Fdocs\u002Fadmin\u002Fsso\u002Fsaml",[],{"title":292,"path":293,"order":217,"children":294},"hardening","\u002Fdocs\u002Fadmin\u002Fhardening",[295],{"title":296,"path":297,"order":217,"children":298},"Kubernetes Hardening","\u002Fdocs\u002Fadmin\u002Fhardening\u002Fkubernetes",[],{"title":300,"path":301,"order":217,"children":302},"Monitoring","\u002Fdocs\u002Fadmin\u002Fmonitoring",[],{"title":304,"path":305,"order":217,"children":306},"Observability","\u002Fdocs\u002Fadmin\u002Fobservability",[],{"title":308,"path":309,"order":217,"children":310},"Soft Launch Enablement","\u002Fdocs\u002Fadmin\u002Ffeature-flags",[],{"title":312,"path":313,"order":217,"children":314},"Telemetry","\u002Fdocs\u002Fadmin\u002Ftelemetry",[],{"title":316,"path":317,"order":217,"children":318},"User Management","\u002Fdocs\u002Fadmin\u002Fuser-management",[],{"title":320,"path":321,"order":217,"children":322},"cloud","\u002Fdocs\u002Fcloud",[323,327],{"title":324,"path":325,"order":231,"children":326},"Introduction","\u002Fdocs\u002Fcloud\u002Fintroduction",[],{"title":328,"path":329,"order":217,"children":330},"FlowFuse Cloud Billing","\u002Fdocs\u002Fcloud\u002Fbilling",[],{"title":332,"path":333,"order":217,"children":334},"contribute","\u002Fdocs\u002Fcontribute",[335,338,342,346,350,354,358,366,402,406],{"title":324,"path":336,"order":231,"children":337},"\u002Fdocs\u002Fcontribute\u002Fintroduction",[],{"title":339,"path":340,"order":217,"children":341},"Adding Template Settings","\u002Fdocs\u002Fcontribute\u002Fadding-template-settings",[],{"title":343,"path":344,"order":217,"children":345},"API Design","\u002Fdocs\u002Fcontribute\u002Fapi-design",[],{"title":347,"path":348,"order":217,"children":349},"Creating debug stack containers","\u002Fdocs\u002Fcontribute\u002Fcreating-debug-stack-containers",[],{"title":351,"path":352,"order":217,"children":353},"Database migrations","\u002Fdocs\u002Fcontribute\u002Fdb-migrations",[],{"title":355,"path":356,"order":217,"children":357},"FlowFuse Architecture","\u002Fdocs\u002Fcontribute\u002Farchitecture",[],{"title":359,"path":360,"order":217,"children":361},"Local Install","\u002Fdocs\u002Fcontribute\u002Flocal",[362],{"title":363,"path":364,"order":217,"children":365},"Local Stacks","\u002Fdocs\u002Fcontribute\u002Flocal\u002Fstacks",[],{"title":367,"path":368,"order":217,"children":369},"State Flows","\u002Fdocs\u002Fcontribute\u002Fworkflows",[370,374,378,382,386,390,394,398],{"title":371,"path":372,"order":217,"children":373},"Device Editor","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fdevice-editor",[],{"title":375,"path":376,"order":217,"children":377},"Instance states","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fproject-states",[],{"title":379,"path":380,"order":217,"children":381},"Invite External Users","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Finvite-external-user",[],{"title":383,"path":384,"order":217,"children":385},"Project Creation","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fproject-create",[],{"title":387,"path":388,"order":217,"children":389},"Reset Password Flow","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fpassword-reset",[],{"title":391,"path":392,"order":217,"children":393},"Team creation Flow","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fteam-create",[],{"title":395,"path":396,"order":217,"children":397},"User Login Flows","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Flogin",[],{"title":399,"path":400,"order":217,"children":401},"User Sign up Flow","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fsignup",[],{"title":403,"path":404,"order":217,"children":405},"Team Broker","\u002Fdocs\u002Fcontribute\u002Fteam-broker",[],{"title":407,"path":408,"order":217,"children":409},"Working with Feature Flags","\u002Fdocs\u002Fcontribute\u002Ffeature-flags",[],{"title":411,"path":412,"order":217,"children":413},"device-agent","\u002Fdocs\u002Fdevice-agent",[414,418,421,425,429,434],{"title":415,"path":416,"order":231,"children":417},"FlowFuse Device Agent Introduction","\u002Fdocs\u002Fdevice-agent\u002Fintroduction",[],{"title":241,"path":419,"order":208,"children":420},"\u002Fdocs\u002Fdevice-agent\u002Fquickstart",[],{"title":422,"path":423,"order":205,"children":424},"Register your Remote Instance","\u002Fdocs\u002Fdevice-agent\u002Fregister",[],{"title":426,"path":427,"order":258,"children":428},"Running the Agent","\u002Fdocs\u002Fdevice-agent\u002Frunning",[],{"title":430,"path":431,"order":432,"children":433},"Deploying your Flows","\u002Fdocs\u002Fdevice-agent\u002Fdeploy",6,[],{"title":435,"path":436,"order":217,"children":437},"install","\u002Fdocs\u002Fdevice-agent\u002Finstall",[438,443,447,451,455],{"title":439,"path":440,"group":441,"order":231,"children":442},"Overview","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Foverview","DeviceAgentInstallation",[],{"title":444,"path":445,"group":441,"order":208,"children":446},"Device Agent Installer","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fdevice-agent-installer",[],{"title":448,"path":449,"group":441,"order":211,"children":450},"Docker Install","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fdocker",[],{"title":452,"path":453,"group":441,"order":205,"children":454},"Kubernetes Install","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fkubernetes",[],{"title":456,"path":457,"group":441,"order":258,"children":458},"Manual Install with NPM","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fmanual",[],{"title":460,"path":461,"order":217,"children":462},"hardware","\u002Fdocs\u002Fhardware",[463,466,470,474],{"title":439,"path":464,"order":231,"children":465},"\u002Fdocs\u002Fhardware\u002Fintroduction",[],{"title":467,"path":468,"order":208,"children":469},"ctrlX - Node-RED","\u002Fdocs\u002Fhardware\u002Fctrlx-node-red",[],{"title":471,"path":472,"order":211,"children":473},"ctrlX - Device Agent","\u002Fdocs\u002Fhardware\u002Fctrlx-device-agent",[],{"title":475,"path":476,"order":211,"children":477},"Raspberry Pi with Raspbian","\u002Fdocs\u002Fhardware\u002Fraspbian",[],{"title":435,"path":479,"order":217,"children":480},"\u002Fdocs\u002Finstall",[481,484,488,492,510,514,517,521],{"title":439,"path":482,"order":231,"children":483},"\u002Fdocs\u002Finstall\u002Fintroduction",[],{"title":485,"path":486,"order":217,"children":487},"Configuring FlowFuse","\u002Fdocs\u002Finstall\u002Fconfiguration",[],{"title":489,"path":490,"order":217,"children":491},"DNS Setup","\u002Fdocs\u002Finstall\u002Fdns-setup",[],{"title":493,"path":494,"order":217,"children":495},"Docker install","\u002Fdocs\u002Finstall\u002Fdocker",[496,500,504,508],{"title":497,"path":498,"order":217,"children":499},"Add Project Stacks on Docker","\u002Fdocs\u002Finstall\u002Fdocker\u002Fstacks",[],{"title":501,"path":502,"order":217,"children":503},"Docker Engine on Windows","\u002Fdocs\u002Finstall\u002Fdocker\u002Fwindows-docker-ce",[],{"title":505,"path":506,"order":217,"children":507},"Docker from AWS Market Place","\u002Fdocs\u002Finstall\u002Fdocker\u002Faws-marketplace",[],{"title":219,"path":222,"order":217,"children":509},[],{"title":511,"path":512,"order":217,"children":513},"Email configuration","\u002Fdocs\u002Finstall\u002Femail-providers",[],{"title":515,"path":187,"order":217,"children":516},"First Run Setup",[],{"title":518,"path":519,"order":217,"children":520},"FlowFuse File Storage","\u002Fdocs\u002Finstall\u002Ffile-storage",[],{"title":522,"path":523,"order":217,"children":524},"Install FlowFuse on Kubernetes","\u002Fdocs\u002Finstall\u002Fkubernetes",[525,529,533,537,541,545],{"title":526,"path":527,"order":217,"children":528},"AWS EKS Installation","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Faws",[],{"title":530,"path":531,"order":217,"children":532},"AWS EKS Installation with Terraform and Helm","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Faws-terraform",[],{"title":534,"path":535,"order":217,"children":536},"Digital Ocean Kubernetes Installation","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fdigital-ocean",[],{"title":538,"path":539,"order":217,"children":540},"Ingress Controller Migration","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fingress-controller-migration",[],{"title":542,"path":543,"order":217,"children":544},"Kubernetes Project Stacks","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fstacks",[],{"title":546,"path":547,"order":217,"children":548},"OpenShift Installation","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fopenshift",[],{"title":550,"path":551,"order":217,"children":552},"migration","\u002Fdocs\u002Fmigration",[553,556],{"title":324,"path":554,"order":231,"children":555},"\u002Fdocs\u002Fmigration\u002Fintroduction",[],{"title":557,"path":558,"order":217,"children":559},"Node-RED Tools plugin","\u002Fdocs\u002Fmigration\u002Fnode-red-tools",[],{"title":561,"path":562,"order":217,"children":563},"user","\u002Fdocs\u002Fuser",[564,568,572,576,580,585,589,593,597,601,605,609,621,625,629,633,637,641,645,649,653,657,661,665,669,673,676,680],{"title":565,"path":566,"order":231,"children":567},"Getting Started","\u002Fdocs\u002Fuser\u002Fintroduction",[],{"title":569,"path":570,"order":231,"children":571},"Static asset service","\u002Fdocs\u002Fuser\u002Fstatic-asset-service",[],{"title":573,"path":574,"order":208,"children":575},"Bill of Materials","\u002Fdocs\u002Fuser\u002Fbill-of-materials",[],{"title":577,"path":578,"order":208,"children":579},"FlowFuse Concepts","\u002Fdocs\u002Fuser\u002Fconcepts",[],{"title":581,"path":582,"order":583,"children":584},"Instance States","\u002Fdocs\u002Fuser\u002Finstance-states",10,[],{"title":586,"path":587,"order":217,"children":588},"Changing the Stack","\u002Fdocs\u002Fuser\u002Fchangestack",[],{"title":590,"path":591,"order":217,"children":592},"Custom Hostnames","\u002Fdocs\u002Fuser\u002Fcustom-hostnames",[],{"title":594,"path":595,"order":217,"children":596},"Custom Node Packages","\u002Fdocs\u002Fuser\u002Fcustom-npm-packages",[],{"title":598,"path":599,"order":217,"children":600},"Dashboards","\u002Fdocs\u002Fuser\u002Fdashboards",[],{"title":602,"path":603,"order":217,"children":604},"DevOps Pipelines","\u002Fdocs\u002Fuser\u002Fdevops-pipelines",[],{"title":606,"path":607,"order":217,"children":608},"Environment Variables","\u002Fdocs\u002Fuser\u002Fenvvar",[],{"title":610,"path":611,"order":217,"children":612},"FlowFuse Expert","\u002Fdocs\u002Fuser\u002Fexpert",[613,617],{"title":614,"path":615,"order":217,"children":616},"AI in Node-RED","\u002Fdocs\u002Fuser\u002Fexpert\u002Fnode-red-embedded-ai",[],{"title":618,"path":619,"order":217,"children":620},"Chat Interface","\u002Fdocs\u002Fuser\u002Fexpert\u002Fchat",[],{"title":622,"path":623,"order":217,"children":624},"FlowFuse File Nodes","\u002Fdocs\u002Fuser\u002Ffilenodes",[],{"title":626,"path":627,"order":217,"children":628},"FlowFuse MQTT Nodes","\u002Fdocs\u002Fuser\u002Fmqtt-nodes",[],{"title":630,"path":631,"order":217,"children":632},"FlowFuse Persistent Context","\u002Fdocs\u002Fuser\u002Fpersistent-context",[],{"title":634,"path":635,"order":217,"children":636},"FlowFuse Project Nodes","\u002Fdocs\u002Fuser\u002Fprojectnodes",[],{"title":638,"path":639,"order":217,"children":640},"FlowFuse Tables","\u002Fdocs\u002Fuser\u002Fff-tables",[],{"title":642,"path":643,"order":217,"children":644},"Groups","\u002Fdocs\u002Fuser\u002Fdevice-groups",[],{"title":646,"path":647,"order":217,"children":648},"High Availability mode","\u002Fdocs\u002Fuser\u002Fhigh-availability",[],{"title":650,"path":651,"order":217,"children":652},"HTTP Access Tokens","\u002Fdocs\u002Fuser\u002Fhttp-access-tokens",[],{"title":654,"path":655,"order":217,"children":656},"Instance Settings","\u002Fdocs\u002Fuser\u002Finstance-settings",[],{"title":658,"path":659,"order":217,"children":660},"Logging","\u002Fdocs\u002Fuser\u002Flogs",[],{"title":662,"path":663,"order":217,"children":664},"Role-Based Access Control","\u002Fdocs\u002Fuser\u002Frole-based-access-control",[],{"title":666,"path":667,"order":217,"children":668},"Shared Team Library","\u002Fdocs\u002Fuser\u002Fshared-library",[],{"title":670,"path":671,"order":217,"children":672},"Snapshots","\u002Fdocs\u002Fuser\u002Fsnapshots",[],{"title":403,"path":674,"order":217,"children":675},"\u002Fdocs\u002Fuser\u002Fteambroker",[],{"title":677,"path":678,"order":217,"children":679},"Teams","\u002Fdocs\u002Fuser\u002Fteam",[],{"title":681,"path":682,"order":217,"children":683},"User Settings","\u002Fdocs\u002Fuser\u002Fuser-settings",[],1786546040827]