Prerequisites

Ensure you have the following before proceeding:

  • A running Kubernetes cluster (EKS, GKE, AKS, Minikube, etc.)
  • An Ingress Controller (e.g., Traefik, Nginx)
  • Helm installed on your local machine
  • Production setup requires managed PostgreSQL and Redis services

Note: Redis is required for session handling when deploying multiple pods.


1. Installation Steps

1

Install with Default Configuration

helm install formbricks oci://ghcr.io/formbricks/helm-charts/formbricks -n formbricks --create-namespace

Note: To specify specific version use --version flag. E.g., --version 1.0.0. Starting from 3.5.0, the chart is available on the GitHub Container Registry (GHCR).

By default:

  • PostgreSQL and Redis are deployed within the cluster.
  • Secrets are dynamically generated and stored as Kubernetes Secrets.
2

Install with an Enterprise License

helm install formbricks oci://ghcr.io/formbricks/helm-charts/formbricks -n formbricks --create-namespace --set enterprise.licenseKey="YOUR_LICENSE_KEY"

2. Configuring Secrets

Using Kubernetes Secrets (Default)

By default, secrets are stored as Kubernetes Secrets. The chart automatically generates random values for required secrets.

Modify values.yaml:

secret:
  enabled: true

Using External Secrets (AWS Secrets Manager, Vault, etc.)

To use an external secrets manager, enable externalSecret in values.yaml:

secret:
  enabled: false  # Disable default secret generation

externalSecret:
  enabled: true
  secretStore:
    name: aws-secrets-manager
    kind: ClusterSecretStore
  refreshInterval: "1h"
  files:
    redis:
      data:
        REDIS_PASSWORD:
          remoteRef:
            key: "prod/formbricks/secrets"
            property: REDIS_PASSWORD
    postgres:
      data:
        POSTGRES_ADMIN_PASSWORD:
          remoteRef:
            key: "prod/formbricks/secrets"
            property: POSTGRES_ADMIN_PASSWORD
        POSTGRES_USER_PASSWORD:
          remoteRef:
            key: "prod/formbricks/secrets"
            property: POSTGRES_USER_PASSWORD
    app-secrets:
      data:
        DATABASE_URL:
          remoteRef:
            key: "prod/formbricks/secrets"
            property: DATABASE_URL
        REDIS_URL:
          remoteRef:
            key: "prod/formbricks/secrets"
            property: REDIS_URL
        ENCRYPTION_KEY:
          remoteRef:
            key: "prod/formbricks/secrets"
            property: ENCRYPTION_KEY

Ensure ExternalSecrets Operator is installed: https://external-secrets.io/latest/

Install with:

helm install formbricks oci://ghcr.io/formbricks/helm-charts/formbricks -n formbricks --create-namespace -f values.yaml

3. Configuring PostgreSQL and Redis

Using Managed PostgreSQL and Redis

For production, we recommend using managed database and cache services.

Modify values.yaml:

postgresql:
  enabled: false
  externalDatabaseUrl: "postgresql://user:password@your-postgres-host:5432/mydb"

redis:
  enabled: false
  externalRedisUrl: "redis://your-redis-host:6379"

Install with:

helm install formbricks oci://ghcr.io/formbricks/helm-charts/formbricks -n formbricks --create-namespace -f values.yaml

Using In-Cluster PostgreSQL and Redis (Default)

By default, PostgreSQL and Redis are deployed inside the cluster. To ensure in-cluster deployment, use:

postgresql:
  enabled: true

redis:
  enabled: true

Apply with:

helm install formbricks oci://ghcr.io/formbricks/helm-charts/formbricks -n formbricks --create-namespace -f values.yaml

4. Upgrading the Deployment

To apply changes:

helm upgrade formbricks oci://ghcr.io/formbricks/helm-charts/formbricks -n formbricks

Scaling Resources

helm upgrade formbricks oci://ghcr.io/formbricks/helm-charts/formbricks -n formbricks   --set deployment.resources.limits.cpu=2   --set deployment.resources.limits.memory=4Gi

Enabling Autoscaling

helm upgrade formbricks oci://ghcr.io/formbricks/helm-charts/formbricks -n formbricks   --set autoscaling.enabled=true   --set autoscaling.minReplicas=3   --set autoscaling.maxReplicas=10

5. Key Configuration Values

FieldDescriptionDefault Value
deployment.replicasNumber of application replicas1
deployment.image.repositoryDocker image repository"ghcr.io/formbricks/formbricks"
deployment.image.tagDocker image tag"latest"
autoscaling.enabledEnable autoscalingfalse
postgresql.enabledDeploy PostgreSQL in clustertrue
postgresql.externalDatabaseUrlExternal PostgreSQL URL""
redis.enabledDeploy Redis in clustertrue
redis.externalRedisUrlExternal Redis URL""
externalSecret.enabledEnable external secrets managerfalse

Refer to the Helm chart repository for full configuration options.


6. Uninstalling the Deployment

To remove the deployment:

helm uninstall formbricks -n formbricks

Removing Persistent Volumes (PVCs)

By default, PVCs are not deleted with Helm. To manually remove them:

kubectl delete pvc --all -n formbricks

To completely delete the namespace:

kubectl delete namespace formbricks

Additional Notes

  • Ingress Setup: If using an ingress controller, make sure to configure ingress.enabled: true in values.yaml.
  • Environment Variables: Pass custom environment variables via envFrom in values.yaml.
  • Backup Strategy: Ensure you have a backup policy for PostgreSQL if running in-cluster.

Your Formbricks deployment is now ready!