Skip to content

Flowise

Deploy Flowise on Kubernetes — an open-source low-code tool for building LLM applications, chatbots, and AI agents with a visual drag-and-drop editor. Supports standalone SQLite mode and scalable queue mode with PostgreSQL, Redis, and S3 shared storage.

auth.existingSecret holds 5 keys — losing any of them invalidates all sessions and stored credentials

Flowise auto-generates 5 secrets on first boot: encryptionKey, jwtAuthTokenSecret, jwtRefreshTokenSecret, expressSessionSecret, and tokenHashSecret. Without auth.existingSecret, a reinstall generates new values and invalidates all existing sessions, stored API credentials, and tool configurations. Always provide a stable auth.existingSecret in production before the first deployment.

Key Features

  • Two topologies — standalone (SQLite + local PVC) or queue mode (PostgreSQL + Redis + S3)
  • 5-key auth secret — all Flowise security tokens managed via a single existingSecret
  • BullMQ queue mode — separate main pod (UI + API) and worker pods (execution) for scale-out
  • PostgreSQL bootstrapuuid-ossp extension injected automatically on first run
  • S3 shared storage required in queue mode — local PVC is incompatible with multiple replicas

Installation

HTTPS repository:

helm repo add helmforge https://repo.helmforge.dev
helm repo update
helm install flowise helmforge/flowise -f values.yaml

OCI registry:

helm install flowise oci://ghcr.io/helmforgedev/helm/flowise -f values.yaml

Deployment Examples

# values.yaml — Flowise standalone with SQLite (zero database configuration)
architecture:
  mode: standalone

flowise:
  appUrl: 'https://flowise.example.com'
  fileSizeLimit: 50mb

auth:
  existingSecret: flowise-auth-secrets # must contain all 5 keys before first deploy
  existingSecretEncryptionKeyKey: encryption-key
  existingSecretJwtAuthTokenSecretKey: jwt-auth-token-secret
  existingSecretJwtRefreshTokenSecretKey: jwt-refresh-token-secret
  existingSecretExpressSessionSecretKey: express-session-secret
  existingSecretTokenHashSecretKey: token-hash-secret
  secureCookies: true # enable when serving via HTTPS

persistence:
  enabled: true
  size: 10Gi

ingress:
  enabled: true
  ingressClassName: traefik
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
  hosts:
    - host: flowise.example.com
      paths:
        - path: /
          pathType: Prefix
  tls:
    - secretName: flowise-tls
      hosts:
        - flowise.example.com
# values.yaml — Flowise standalone with bundled PostgreSQL
# NOTE: bundled PostgreSQL auto-injects uuid-ossp extension
architecture:
  mode: standalone

flowise:
  appUrl: 'https://flowise.example.com'

auth:
  existingSecret: flowise-auth-secrets
  secureCookies: true

postgresql:
  enabled: true
  auth:
    database: flowise
    username: flowise
    password: 'strong-db-password'
  standalone:
    persistence:
      enabled: true
      size: 20Gi

persistence:
  enabled: true
  size: 5Gi # tool data and uploads (no SQLite when PostgreSQL active)

ingress:
  enabled: true
  ingressClassName: traefik
  hosts:
    - host: flowise.example.com
      paths:
        - path: /
          pathType: Prefix
# values.yaml — Flowise in queue mode (PostgreSQL + Redis + S3 mandatory)
# Queue mode: persistence.enabled MUST be false; storage.type MUST be s3
architecture:
  mode: queue

flowise:
  replicaCount: 2 # main pods (UI + API + job submission)
  appUrl: 'https://flowise.example.com'

queue:
  name: flowise-queue
  worker:
    replicaCount: 3 # separate worker pods consuming BullMQ jobs
    concurrency: 10 # simultaneous BullMQ jobs per worker

auth:
  existingSecret: flowise-auth-secrets
  secureCookies: true

postgresql:
  enabled: true
  auth:
    password: 'strong-db-password'

redis:
  enabled: true
  auth:
    enabled: true
    password: 'strong-redis-password'

persistence:
  enabled: false # local PVC is incompatible with queue mode replicas

storage:
  type: s3 # required in queue mode for shared blob storage
  s3:
    bucketName: flowise-storage
    region: us-east-1
    endpointUrl: 'https://s3.amazonaws.com'
    forcePathStyle: false # set to true for MinIO
    existingSecret: flowise-s3-credentials

ingress:
  enabled: true
  ingressClassName: traefik
  hosts:
    - host: flowise.example.com
      paths:
        - path: /
          pathType: Prefix
# values.yaml — Flowise with external PostgreSQL
# IMPORTANT: External PostgreSQL must have uuid-ossp extension:
#   CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
architecture:
  mode: standalone

flowise:
  appUrl: 'https://flowise.example.com'

auth:
  existingSecret: flowise-auth-secrets

postgresql:
  enabled: false

database:
  mode: external
  external:
    vendor: postgres
    host: postgres.database.svc.cluster.local
    name: flowise
    username: flowise
    existingSecret: flowise-db-credentials
    existingSecretPasswordKey: database-password
    ssl: false

persistence:
  enabled: true
  size: 10Gi

Configuration Reference

Core

ParameterTypeDefaultDescription
nameOverridestring""Override the chart name.
fullnameOverridestring""Override the full release name.
architecture.modestringstandaloneTopology: standalone or queue.

Image

ParameterTypeDefaultDescription
image.repositorystringdocker.io/flowiseai/flowiseFlowise image.
image.tagstring"3.1.1"Image tag.

Flowise Configuration

ParameterTypeDefaultDescription
flowise.replicaCountinteger1Main pod replicas. Use queue mode for more than 1.
flowise.appUrlstring""Full public URL. Auto-detected from Ingress if empty.
flowise.logLevelstringinfoLog level: error, warn, info, verbose, debug.
flowise.fileSizeLimitstring50mbMaximum file upload size accepted by Flowise.
flowise.corsOriginsstring*Allowed CORS origins.
flowise.disableTelemetrybooleantrueDisable telemetry reporting.
flowise.extraEnvarray[]Extra environment variables for the main container.

Auth Secrets

ParameterTypeDefaultDescription
auth.existingSecretstring""Existing secret with all 5 Flowise auth tokens.
auth.existingSecretEncryptionKeyKeystringencryption-keyKey for FLOWISE_SECRETKEY_OVERWRITE.
auth.existingSecretJwtAuthTokenSecretKeystringjwt-auth-token-secretKey for JWT_AUTH_TOKEN_SECRET.
auth.existingSecretJwtRefreshTokenSecretKeystringjwt-refresh-token-secretKey for JWT_REFRESH_TOKEN_SECRET.
auth.existingSecretExpressSessionSecretKeystringexpress-session-secretKey for EXPRESS_SESSION_SECRET.
auth.existingSecretTokenHashSecretKeystringtoken-hash-secretKey for TOKEN_HASH_SECRET.
auth.secureCookiesbooleanfalseEnable secure cookies. Set true when serving via HTTPS.

Database

ParameterTypeDefaultDescription
database.modestringautoMode: auto, sqlite, external, or postgresql.
database.sqlite.pathstring/root/.flowise/database.sqliteSQLite file path inside the data volume.
database.external.vendorstringpostgresExternal DB vendor: postgres or mysql.
database.external.hoststring""External database hostname.
database.external.existingSecretstring""Existing secret with database password.
database.external.sslbooleanfalseEnable SSL for external database connections.
External PostgreSQL requires uuid-ossp extension

Flowise 3.1.1 migrations use uuid_generate_v4(), which requires uuid-ossp. The bundled PostgreSQL subchart injects this extension automatically via initdb.scripts. For external PostgreSQL, run manually before installing:

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

PostgreSQL Subchart

ParameterTypeDefaultDescription
postgresql.enabledbooleanfalseDeploy the bundled PostgreSQL subchart.
postgresql.auth.databasestringflowiseDatabase name.
postgresql.auth.passwordstring""Password. Auto-generated if empty.
postgresql.standalone.persistence.sizestring8GiPVC size for PostgreSQL.

Queue Mode

Queue mode requires persistence.enabled=false and storage.type=s3

In queue mode, multiple main and worker pods share the same blob storage. Local PVC (ReadWriteOnce) cannot be shared across pods. Set persistence.enabled: false and configure storage.type: s3 with a shared S3-compatible bucket.

ParameterTypeDefaultDescription
queue.namestringflowise-queueBullMQ queue name shared by main and workers.
queue.worker.replicaCountinteger1Number of worker Deployment replicas.
queue.worker.concurrencyinteger100000Simultaneous BullMQ jobs per worker.
queue.worker.removeOnAgeinteger86400Completed job retention in seconds.
queue.worker.removeOnCountinteger10000Maximum completed job count retained.
queue.worker.extraEnvarray[]Extra environment variables for worker pods.
queue.worker.resourcesobject{}CPU/memory requests and limits for workers.

Storage

ParameterTypeDefaultDescription
storage.typestringlocalStorage type: local or s3.
storage.local.pathstring/root/.flowise/storageLocal blob storage path.
storage.s3.bucketNamestring""S3 bucket name.
storage.s3.regionstringus-east-1S3 region.
storage.s3.endpointUrlstring""Custom S3 endpoint URL.
storage.s3.forcePathStylebooleanfalseForce path-style requests. Set true for MinIO.
storage.s3.existingSecretstring""Existing secret with S3 credentials.

Persistence

ParameterTypeDefaultDescription
persistence.enabledbooleantrueEnable PVC for /root/.flowise. Set false in queue mode.
persistence.sizestring10GiPVC size.
persistence.storageClassstring""StorageClass for the PVC.
persistence.existingClaimstring""Use an existing PVC.

Backup

Backup runs pg_dump on PostgreSQL only. SQLite and local storage blobs are not included.

ParameterTypeDefaultDescription
backup.enabledbooleanfalseEnable scheduled pg_dump S3 backup.
backup.schedulestring"0 3 * * *"Cron schedule.
backup.s3.endpointstring""S3-compatible endpoint URL.
backup.s3.bucketstring""Target bucket name.
backup.s3.existingSecretstring""Existing secret with S3 credentials.

More Information