Files
formbricks/docs/self-hosting/setup/cluster-setup.mdx
2025-09-12 11:16:13 +00:00

198 lines
5.5 KiB
Plaintext

---
title: "Cluster Setup"
description: "How to set up Formbricks in a High-Availability Cluster"
icon: "circle-nodes"
---
## Overview
Running Formbricks as a cluster of multiple instances offers several key advantages:
- **High Availability**: Ensure your surveys remain accessible even if some instances fail
- **Load Distribution**: Handle higher traffic by distributing requests across multiple instances
- **Scalability**: Easily scale horizontally by adding more instances as your needs grow
- **Zero-Downtime Updates**: Rolling updates without service interruption
## Requirements
To run Formbricks in a cluster setup, you'll need:
- Enterprise Edition license key
- Shared PostgreSQL database
- Shared Redis cache for session management and caching
- Load balancer to distribute traffic
## Architecture
The Formbricks cluster setup consists of multiple components working together to provide a scalable and highly available system. Here's a detailed overview of the architecture:
```mermaid
graph TD
subgraph Load Balancer
LB[Load Balancer/Ingress]
end
subgraph Formbricks Cluster
FB1[Formbricks Instance 1]
FB2[Formbricks Instance 2]
FB3[Formbricks Instance n]
end
subgraph Data Storage
subgraph PostgreSQL HA
PSQL_P[(PostgreSQL Primary)]
PSQL_R[(PostgreSQL Replica)]
end
subgraph Redis Cluster
RC_P[(Redis Primary)]
RC_R[(Redis Replica)]
end
S3[S3 Compatible Storage]
end
%% Connections
LB --> FB1
LB --> FB2
LB --> FB3
FB1 --> PSQL_P
FB2 --> PSQL_P
FB3 --> PSQL_P
PSQL_P --> PSQL_R
FB1 --> RC_P
FB2 --> RC_P
FB3 --> RC_P
RC_P --> RC_R
FB1 --> S3
FB2 --> S3
FB3 --> S3
style PSQL_P fill:#00C4B8,color:#ffffff
style PSQL_R fill:#00C4B8,color:#ffffff
style RC_P fill:#FF6B6B,color:#ffffff
style RC_R fill:#FF6B6B,color:#ffffff
style S3 fill:#FFA94D,color:#ffffff
style FB1,FB2,FB3 fill:#0D9373,color:#ffffff
style LB fill:#4C6EF5,color:#ffffff
```
### Component Description
1. **Formbricks Cluster**
- Multiple Formbricks instances (1..n) running in parallel
- Each instance is stateless and can handle any incoming request
- Automatic failover if any instance becomes unavailable
2. **PostgreSQL Database**
- Primary database storing all survey, response, and contact data
- Optional high-availability setup with primary-replica configuration
- Handles all persistent data storage needs
3. **Redis Cluster**
- Acts as a distributed cache layer
- Improves performance by caching frequently accessed data
- Can be configured in HA mode with primary-replica setup
- Handles session management and real-time features
4. **S3 Compatible Storage**
- Stores file uploads and attachments
- Can be any S3-compatible storage service (AWS S3, MinIO, etc.)
- Provides reliable and scalable file storage
5. **Load Balancer**
- Distributes incoming traffic across all Formbricks instances
- Performs health checks and removes unhealthy instances
- Ensures even load distribution and high availability
## Redis Configuration
<Note>Redis is required for Formbricks to function. The application will not start without a Redis URL configured.</Note>
Configure Redis by adding the following **required** environment variable to your instances:
```sh env
REDIS_URL=redis://your-redis-host:6379
```
## S3 Configuration
Configure S3 storage by adding the following environment variables to your instances:
```sh env
# Required for file uploads in serverless environments
S3_ACCESS_KEY=your-access-key
S3_SECRET_KEY=your-secret-key
S3_REGION=your-region
S3_BUCKET_NAME=your-bucket-name
# For S3-compatible storage (e.g., StorJ, MinIO)
# Leave empty for Amazon S3
S3_ENDPOINT_URL=https://your-s3-compatible-endpoint
# Enable for S3-compatible storage that requires path style
# 0 for disabled, 1 for enabled
S3_FORCE_PATH_STYLE=0
```
When using S3 in a cluster setup, ensure that:
- All Formbricks instances have access to the same S3 bucket
- The bucket has appropriate CORS settings configured
- IAM roles/users have sufficient permissions for read/write operations
## Kubernetes Setup
Formbricks provides an official Helm chart for deploying the entire cluster stack on Kubernetes. The Helm chart is available in the [Formbricks GitHub repository](https://github.com/formbricks/formbricks/tree/main/helm-chart).
### Features of the Helm Chart
The Helm chart provides a complete deployment solution that includes:
- Formbricks application with configurable replicas
- PostgreSQL database (with optional HA configuration)
- Redis cluster for caching
- Optional Traefik ingress controller for routing and SSL termination
- Automatic configuration of dependencies and networking
### Installation Steps
1. Add the Formbricks Helm repository:
```sh
helm repo add formbricks https://raw.githubusercontent.com/formbricks/formbricks/main/helm-chart
helm repo update
```
2. Install the chart:
```sh
helm install formbricks formbricks/formbricks
```
### Configuration Options
The Helm chart can be customized using a `values.yaml` file to configure:
- Number of Formbricks replicas
- Resource limits and requests
- Database configuration
- Redis settings
- Ingress rules and TLS
- Environment variables and secrets
Refer to the [Helm chart documentation](https://github.com/formbricks/formbricks/tree/main/helm-chart) for detailed configuration options and examples.