Skip to main content

Overview

Langflow is a visual low-code builder for AI agents, RAG pipelines and MCP servers. You build a flow on a canvas, test it in the editor, then call it through the REST API or as MCP tools. This template runs Langflow on a bundled PostgreSQL that holds users, flows, messages and stored credentials, with a shared data volume for uploaded files and knowledge bases. A login is always required.
This template does not create a GVC. It deploys into an existing GVC that you already have, and that GVC should have exactly one location, because the database, the data volume and Redis run in one location.

What Gets Created

The template creates no credentials. The public *.cpln.app URL is on by default and every request needs a Langflow login.

Prerequisites

1

Create the database credentials secret

A dictionary secret with exactly username, password and database. Langflow receives them inside a connection URL, so use only letters, digits, -, _, . and ~:
Set postgres.config.credentialsSecretName to this name (or postgresHA.config.credentialsSecretName with the HA database).
2

Create the admin login secret

A dictionary secret with the superuser that Langflow creates on first start:
Set admin.secretName to this name.
3

Create the encryption key secret

An opaque secret holding a 44-character Fernet key. It encrypts every API key saved in Langflow and signs logins:
Set secretKey.secretName to this name. Langflow refuses to start with a key that is not a valid Fernet key.
4

Create the optional secrets

Provider keys: a dictionary secret whose keys (such as OPENAI_API_KEY) you list in variableSecrets.keys. A Redis password: a dictionary secret with a URL-safe password key. The Control Plane MCP server needs a service-account key, see Control Plane MCP Server. Backups need a bucket and a Control Plane cloud account, see Backing Up.
Secret names are org-wide, so give each release its own secrets.
Every secret your release names must exist before you install. If one does not, the deployment waits silently: cpln logs returns nothing, and the only place the missing secret is named is status.versions[].message in cpln workload get-deployments RELEASE_NAME-langflow --gvc GVC_NAME -o yaml. Create the secret and the deployment recovers on its own after several minutes, or run cpln workload force-redeployment RELEASE_NAME-langflow --gvc GVC_NAME to skip the wait.

Installation

The required values are the names of the three secrets from Prerequisites:
To install with the highly available database, add --set postgres.enabled=false --set postgresHA.enabled=true --set postgresHA.config.credentialsSecretName=DB_CREDENTIALS_SECRET_NAME. To install with the CLI, UI, Terraform or Pulumi, follow the instructions for your preferred method:

UI

Browse, install, and manage templates visually

CLI

Manage templates from your terminal

Terraform

Declare templates in your Terraform configurations

Pulumi

Declare templates in your Pulumi programs

Configuration

Langflow

Login and Keys

Access

Database

Redis

Control Plane MCP Server

With cplnMcp.keySecretName set, Langflow registers the Control Plane MCP server as the MCP server cpln of the superuser at boot, so an MCP Tools component can see and manage your org. Langflow’s MCP client cannot sign in with OAuth, so it authenticates with a service-account key, and every flow that uses the server acts as that service account. Give the service account only what your flows need. This example lets it view one GVC:
Add a policy for each further resource kind the flows should see or change, such as workload with view. Then install or upgrade with --set cplnMcp.keySecretName=CPLN_MCP_KEY_SECRET_NAME. The default cplnMcp.url offers the read-only tools: none can create, update or delete. Set it to https://mcp.cpln.io/mcp to offer every tool, and bound the service account’s policies accordingly. Registration runs in the background after boot and never delays startup. The log line starting cpln-mcp: says whether it worked, and a key the server refuses is reported there and not registered. A server that is already registered is left unchanged, so edits users make under Settings → MCP Servers are kept.

Connecting

Read the admin login with cpln secret reveal ADMIN_SECRET_NAME -o yaml. To check the server, forward the port and read its health:
Langflow blocks requests to private addresses by default, which includes services in your GVC (*.cpln.local). To let flows call one, such as an Ollama or Qdrant release, add {name: LANGFLOW_SSRF_ALLOWED_HOSTS, value: "*.cpln.local"} to langflow.extraEnv.

Operations

Backing Up

All state lives in PostgreSQL and the data volume. Enable postgres.backup.enabled (or postgresHA.backup.enabled with the HA database) and fill in the provider block; the keys and defaults are in the chart’s values.yaml. The bucket, cloud account and IAM policy are set up as described in the postgres or postgres-highly-available template, and a MinIO provider needs a dictionary secret with the keys accessKey and secretKey. Restore steps are in those templates’ pages. The backup covers the database only; uploaded files and knowledge bases on the data volume are not included.

Scaling and Availability

Set langflow.replicas from 1 to 4. Replicas share PostgreSQL, the data volume and Redis, so they are interchangeable, and more than one requires redis.enabled: true. Redis stays a single node, because Langflow takes one Redis URL and cannot follow Sentinel. For near-zero-downtime upgrades and failover, set langflow.replicas: 2, redis.enabled: true and postgresHA.enabled: true. Above one replica, use the Streamable HTTP MCP URL; the legacy SSE URL (/sse) works with one replica only. After turning on redis.enabled or Redis auth on a running release, redeploy so every replica picks up the change:

Rotating the Control Plane MCP Key

Rotating the service-account key does not update a server that is already registered. Either edit its Authorization header under Settings → MCP Servers, or delete the cpln server there and redeploy so it is registered again with the new key:

Troubleshooting

A secret named in the values does not exist. Read status.versions[].message with cpln workload get-deployments RELEASE_NAME-langflow --gvc GVC_NAME -o yaml, create the secret, then run cpln workload force-redeployment RELEASE_NAME-langflow --gvc GVC_NAME.
The encryption key secret is not a valid 44-character Fernet key. On a new release, create a key as shown in Prerequisites. On an existing release, do not replace the key: API keys already saved could no longer be decrypted.
A self sign-up account stays inactive until an admin activates it in Langflow. Log in as the superuser and activate it, or add {name: LANGFLOW_ENABLE_SIGNUP, value: "false"} to langflow.extraEnv to turn sign-up off.
Langflow blocks private addresses, including *.cpln.local. Add {name: LANGFLOW_SSRF_ALLOWED_HOSTS, value: "*.cpln.local"} to langflow.extraEnv.
The Control Plane MCP server refused the service-account key. Check the key secret and the service account’s policies, then run cpln workload force-redeployment RELEASE_NAME-langflow --gvc GVC_NAME. If the log says login-failed, the superuser’s password was changed in the UI after install, and registration cannot log in; add the cpln server under Settings → MCP Servers instead.
Rotating a provider-keys secret does not restart Langflow. Run cpln workload force-redeployment RELEASE_NAME-langflow --gvc GVC_NAME.
The public endpoint cuts requests after langflow.requestTimeoutSeconds (default 600, maximum 3600). Raise it for longer calls. Calls from inside the GVC over cpln.local are not subject to it.
The error names the offending value. The template rejects langflow.replicas outside 1-4, more than one replica without redis.enabled, redis.mode other than dev, enabling both or neither database, and extraEnv names that the chart sets itself.

Important Notes

  • Auth is always on and the public URL is on by default. Anyone who reaches it can sign up, but new accounts stay inactive until an admin activates them; add {name: LANGFLOW_ENABLE_SIGNUP, value: "false"} to langflow.extraEnv to turn sign-up off.
  • Any user who can log in can run Python on the server through custom components. Give accounts only to people you trust.
  • Never rotate or delete the encryption key secret: API keys already saved in Langflow could no longer be decrypted.
  • The admin secret is read on first start only. Change the password in the Langflow UI, since later changes to the secret are ignored.
  • MCP clients authenticate with a Langflow API key in the x-api-key header (create one under Settings → API Keys), even when the MCP Server tab shows no auth.
  • The Control Plane MCP server is registered for the superuser only; other users add their own under Settings → MCP Servers.
  • Any logged-in user can read the service-account key through Python, so grant that service account only what flows need.
  • After rotating a provider-keys secret, run cpln workload force-redeployment RELEASE_NAME-langflow --gvc GVC_NAME.
  • The first helm upgrade after an install can restart the bundled database, which briefly interrupts the editor and the API.
  • Use a single-location GVC: the database, the data volume and Redis run in one location.
  • Uninstalling deletes the database and the data volume, and with them every flow, user and uploaded file.

External References

Langflow documentation

Concepts, components and deployment

Environment variables

Langflow settings

Langflow as an MCP server

Exposing flows as MCP tools

API keys and authentication

Logins and API keys

Langflow on GitHub

Source and issues