flowiseai/flowise: the web process serves the visual editor and the API that runs your flows, and a Sevalla PostgreSQL database keeps the accounts, flows, API keys and encrypted credentials, so the application needs no disk. Environment variables fix the encryption key and the sign-in secrets, so credentials and sessions survive every deployment, and each flow you call from other applications is protected by a Flowise API key.
At a glance
Environment variables
Before you begin
- A Sevalla company with a payment method: Flowise needs the S1 size or larger.
- OpenSSL,
curlandjqon your computer, to generate the secrets and call Flowise’s API. - An API key from your model provider. This guide uses Anthropic.
Create the database
Open the create form
Choose PostgreSQL
Name and place it
flowise-db, choose the Data center where Flowise will run, and choose the Size. This guide was tested on DB1.Create it
TypeError: this.db.exec is not a function.
Create the application
Choose the image
flowiseai/flowise:3.1.4 in Docker image. Keep the Registry credential at None (public image).Name, place and size it
flowise, choose the database’s Data center, and choose the Size S1.Create it without deploying
flowise-x7k2m.sevalla.app: APP_URL needs it.3.1.4 is the current one. The image is a 1.5 GB download and runs Flowise as the unprivileged node user. Flowise migrates its database when a new version starts, so pin a version and upgrade on purpose.
Connect the database
Flowise reads its database settings from separate variables, not a connection URL. The internal connection adds the same values under other names; rename them as you add them.Open the database's networking
flowise-db. Click the Networking tab.Add the connection
flowise Application.Rename the variables
DB_HOST to DATABASE_HOST, DB_PORT to DATABASE_PORT, DB_DATABASE to DATABASE_NAME, DB_USERNAME to DATABASE_USER and DB_PASSWORD to DATABASE_PASSWORD. Click the trash icon next to DB_URL: Flowise doesn’t read it.Save
Set the environment variables
Generate five secrets on your computer, one per run of this command, and store them in your password manager before you add them:PORT: Sevalla sets it to the web process port, 8080, and Flowise listens on it on all interfaces. Flowise trusts the X-Forwarded-For header of every proxy by default, so it needs no setting for Cloudflare and Sevalla’s proxy.
Add a readiness probe
Flowise connects to PostgreSQL and runs its migrations before it answers; in the tests, it was ready 6 seconds after it started. A readiness probe keeps sending requests to the running version until the new one is ready.Open the web process
Turn on the probe
/api/v1/ping, the Initial delay 10 and the Timeout 5. Keep the Port at 8080.Save
Deploy Flowise
Click the Overview tab, click Deploy now, then click Deploy. The deployment pulls the image and starts the web process; there’s no build. In the tests, a deployment took between 35 seconds and 2.5 minutes, most of it pulling the image.Open Flowise
Create the first account
400 with You can only have one organization. Sign-in is required for the editor and for Flowise’s management API.
Verify the deployment
-
On the Deployments tab, the deployment’s status is Deployed. With the API, Get deployment (
getDeploymentV3) returns"status": "success". -
The application’s runtime logs show
Flowise Server is listening at :8080. Get application runtime logs (getApplicationRuntimeLogsV3) finds it withsearch=listening. -
The ping endpoint answers:
Error during initDatabase for the ReAct agent and AWS Bedrock nodes at each start. Flowise 3.1.4 can’t load those nodes and leaves them out of the editor; everything else works.
Create a flow with Claude
This flow answers customer questions about a shop withclaude-haiku-5-5, Anthropic’s fastest and cheapest current model. You create it with Flowise’s own API, which also stores your Anthropic key as an encrypted credential and protects the flow with a Flowise API key. Set these variables first:
shop-assistant.json. It connects an Anthropic chat model and a prompt template to an LLM chain:
Sign in
POST /api/v1/auth/login stores the session cookies in flowise.cookies. Calls that use the cookies also need the header x-request-from: internal, which Flowise’s editor sends; without it, Flowise answers 401 with Unauthorized Access.Create an API key
FLOWISE_API_KEY in the calling application’s environment variables. In the editor, the keys are under API Keys.Store the Anthropic key
FLOWISE_SECRETKEY_OVERWRITE:Create the flow
adaptiveThinking and thinkingEffort are there because of claude-haiku-5-5: Flowise 3.1.4’s Anthropic node sends temperature unless thinking is on, and the model rejects it with `temperature` is deprecated for this model. With adaptive thinking at the low effort, the model used no thinking tokens in the tests: a question cost 102 input and 46 output tokens.
The flow in the editor
Flowise’s editor shows this flow’s three nodes, but not their settings or connections: the JSON leaves out the field definitions that the editor adds when you build a flow there. Change the flow through the API (Flowise’s API reference has the update operation), or build flows in the editor instead. In the editor, the Anthropic node’s Model Name list comes from a model list that Flowise downloads from its GitHub repository: today its newest models areclaude-opus-4-7 and claude-haiku-4-5, and the node shows Adaptive Thinking only for claude-opus-4-7, claude-opus-4-6 and claude-sonnet-4-6. In the tests, the node ran claude-haiku-4-5 with its default temperature.
Run the flow through the API
The prediction endpoint runs a flow by its ID, with the flow’s API key in theAuthorization header:
500 with Error: predictionsServices.buildChatflow - Unauthorized.
Add "streaming": true to the body to receive the answer as Server-Sent Events (Content-Type: text/event-stream, Cache-Control: no-cache): a start event, one token event per piece of text, then metadata and end. Through Cloudflare and Sevalla’s proxy, the first token of a two-sentence answer arrived after 1.4 seconds and the last after 1.5 seconds, without buffering.
Keep the secrets
FLOWISE_SECRETKEY_OVERWRITE and the four sign-in secrets must stay the same for the life of the instance. In the tests, sessions and credentials survived every deployment while they stayed the same.
Set the variable back to the original key and deploy again: the credentials are readable again. A changed JWT_AUTH_TOKEN_SECRET only signs everyone out: requests with the old session answer 401 with {"message":"Invalid or Missing token"} until you sign in again.
Keep uploaded files
Flows, credentials, API keys and chat history are in PostgreSQL. Files that flows store, such as uploads in a chat or documents in a document store, go to/home/node/.flowise/storage, which every deployment deletes. To keep them, add a disk:
Create the disk
/home/node/.flowise, pick the Size 10 GB, and click Create disk.Deploy
/home/node/.flowise/storage was still there after the next deployment. A process with a disk runs 1 instance and stops before the new version starts (Persistent storage): during each deployment, Flowise answered 503 for about 30 seconds.
Upgrade Flowise
- Read the release notes of every version between yours and the new one on Flowise’s GitHub releases.
- Back up
flowise-db: on its Backups tab, create a manual backup. See Backups. - On the application’s Settings tab, in the Source section, click Update source, change the tag in Docker image, and click Update source.
- Deploy. Flowise migrates the database when the new version starts.
Add a custom domain
To serve Flowise from your own domain, such asflows.example.com, add it on the application’s Domains tab and create the DNS records Sevalla shows; the web process must be larger than H1, which S1 is. Then change APP_URL to https://flows.example.com and deploy. See Custom domains.
Troubleshoot
Deploy with the API
These calls create the same deployment without the dashboard: the database, the application, the variables, the readiness probe, the first deployment and the first account. They need:- An API key that can create applications and databases, in
SEVALLA_API_KEY. curl,jqandopenssl.
Choose the location and sizes
listClustersV3), List process resource types (listProcessResourceTypesV3) and List database resource types (listDatabaseResourceTypesV3). Pick the location by its region ID, here Frankfurt:sevalla resources clusters, sevalla resources process-types and sevalla resources db-types. MCP: get_platform_options.Create the database
createDatabaseV3). The API doesn’t return the password later, so generate it here:sevalla databases create --name flowise-db --type postgresql --db-version 18 --cluster $CLUSTER_ID --resource-type $DB1 --db-name flowise --db-user flowise --db-password $DB_PASSWORD. MCP: sevalla_api_create with createDatabaseV3 and the same body (create_database generates a password it doesn’t return, and Flowise needs it).Wait for the database
getDatabaseV3) until status is ready, then read the internal hostname:sevalla databases get $DB_ID. MCP: get_database.Create the application
createApplicationV3) with the Docker image source. It doesn’t start a deployment:listApplicationDomainsV3) and List processes (listProcessesV3). CLI: sevalla apps create --name flowise --cluster $CLUSTER_ID --source dockerImage --docker-image flowiseai/flowise:3.1.4. MCP: create_application with deploy: false, then get_application.Size the web process and add the readiness probe
updateProcessV3). The API creates the web process at S1 already; send the size anyway if you change it. Always send timeoutSeconds: without it, the probe gets 120 seconds instead of the dashboard’s 1:sevalla apps processes update $WEB_ID --app-id $APP_ID --resource-type $S1 (the CLI can’t set a probe). MCP: sevalla_api_update with updateProcessV3 and the same body.Connect the database
createApplicationInternalConnectionV3). Unlike the dashboard, it adds no variables:sevalla apps internal-connections create $APP_ID --target-id $DB_ID --target-type database. MCP: sevalla_api_create with createApplicationInternalConnectionV3.Add the environment variables
createEnvironmentVariableV3), once per variable. Store FLOWISE_SECRETKEY_OVERWRITE somewhere safe before you send it:sevalla apps env-vars create $APP_ID --key DATABASE_TYPE --value postgres, once per variable; the CLI makes each variable available during runtime and build, which makes no difference for an image. MCP: set_environment_variables with all of them in variables.Deploy
triggerDeploymentV3):sevalla apps deployments trigger $APP_ID. MCP: trigger_deployment.Wait for the deployment
getDeploymentV3) until status is final (success, failed, cancelled or skipped), for up to 30 minutes; Get application deployment logs (getApplicationDeploymentLogsV3) with ?limit=5000 shows why one failed:sevalla apps deployments get $DEPLOYMENT_ID --app-id $APP_ID and sevalla apps deployments logs $DEPLOYMENT_ID --app-id $APP_ID. MCP: get_deployment and get_deployment_logs.Create the first account
ANTHROPIC_API_KEY and run the steps in Create a flow with Claude and Run the flow through the API with these variables.