This guide walks you through installing Formance Enterprise Edition on your Kubernetes cluster.
Prerequisites
Before you begin, ensure you have:
Kubernetes 1.30+ cluster
Helm 3.x installed
kubectl configured to access your cluster
An Ingress Controller with TLS support
SSL certificates for your domain
Enterprise Edition license (Cluster ID and License Token)
For detailed requirements, see the Requirements page.
Installation
Set Environment Variables
export CLUSTER_ID = $( kubectl get ns kube-system -o jsonpath='{.metadata.uid}' )
export LICENCE_TOKEN = "your-licence-token"
Install with Helm
helm upgrade --install formance oci://ghcr.io/formancehq/helm/formance \
--version 1.0.1 \
--namespace formance-system \
--create-namespace \
--set tags.EntrepriseEdition= true \
--set global.licence.clusterID= $CLUSTER_ID \
--set global.licence.token= $LICENCE_TOKEN
This installs the full Formance Platform including:
Data Plane — Operator, CRDs, and Versions (via the regions subchart)
Control Plane — Membership, Console, Portal, and Dex (via the cloudprem subchart)
Bundled PostgreSQL — shared by all components
All service hostnames are derived from global.serviceHost:
Service Default Hostname Membership membership.<serviceHost>Dex (OIDC) dex.<serviceHost>Portal portal.<serviceHost>Console V3 console.<serviceHost>
Using Minimal Profile
For a minimal Enterprise installation using the ee-minimal profile:
helm upgrade --install formance oci://ghcr.io/formancehq/helm/formance \
--version 1.0.1 \
--namespace formance-system \
--create-namespace \
--set tags.EntrepriseEdition= true \
--set global.licence.clusterID= $CLUSTER_ID \
--set global.licence.token= $LICENCE_TOKEN \
-f https://raw.githubusercontent.com/formancehq/helm/main/charts/formance/profiles/ee-minimal.yaml
EE Demo Profile
To deploy a complete EE platform with a pre-configured demo stack, layer ee-demo.yaml on top of ee-minimal.yaml:
helm upgrade --install formance oci://ghcr.io/formancehq/helm/formance \
--version 1.0.1 \
--namespace formance-system \
--create-namespace \
--set tags.EntrepriseEdition= true \
--set global.serviceHost= $BASE_DOMAIN \
--set global.licence.clusterID= $CLUSTER_ID \
--set global.licence.token= $LICENCE_TOKEN \
-f https://raw.githubusercontent.com/formancehq/helm/main/charts/formance/profiles/ee-minimal.yaml \
-f https://raw.githubusercontent.com/formancehq/helm/main/charts/formance/profiles/ee-demo.yaml
This adds a demo-demo stack with Auth, Gateway, Ledger, and Stargate modules, pre-configured demo users (support@formance.com / admin@formance.com, password: password), and a wizard that auto-creates the organization, region, and stack.
Profiles can be layered using multiple -f flags. Values from later files override earlier ones.
Full Configuration Example
For a production deployment with a custom domain and TLS:
export CLUSTER_ID = $( kubectl get ns kube-system -o jsonpath='{.metadata.uid}' )
export LICENCE_TOKEN = "your-licence-token"
export BASE_DOMAIN = "formance.example.com"
helm upgrade --install formance oci://ghcr.io/formancehq/helm/formance \
--version 1.0.1 \
--namespace formance-system \
--create-namespace \
--set tags.EntrepriseEdition= true \
--set global.licence.clusterID= $CLUSTER_ID \
--set global.licence.token= $LICENCE_TOKEN \
--set global.serviceHost= $BASE_DOMAIN
Using a Values File
For complex configurations, use a values file:
# values.yaml
tags :
EntrepriseEdition : true
global :
serviceHost : "formance.example.com"
licence :
clusterID : "your-cluster-id"
token : "your-licence-token"
postgresql :
host : "my-postgres.example.com"
additionalArgs : "sslmode=require"
auth :
username : "formance"
existingSecret : "postgres-credentials"
cloudprem :
membership :
ingress :
enabled : true
className : "nginx" # or traefik, alb, etc.
hosts :
- host : "membership.formance.example.com"
paths :
- path : "/api"
pathType : "Prefix"
tls :
- secretName : formance-tls
hosts :
- membership.formance.example.com
dex :
ingress :
enabled : true
hosts :
- host : "dex.formance.example.com"
paths :
- path : "/"
pathType : "Prefix"
tls :
- secretName : formance-tls
hosts :
- dex.formance.example.com
portal :
ingress :
enabled : true
hosts :
- host : "portal.formance.example.com"
paths :
- path : "/"
pathType : "Prefix"
tls :
- secretName : formance-tls
hosts :
- portal.formance.example.com
console-v3 :
ingress :
enabled : true
hosts :
- host : "console.formance.example.com"
paths :
- path : "/"
pathType : "Prefix"
tls :
- secretName : formance-tls
hosts :
- console.formance.example.com
postgresql :
enabled : false # Use external PostgreSQL
Install with your values file:
helm upgrade --install formance oci://ghcr.io/formancehq/helm/formance \
--version 1.0.1 \
--namespace formance-system \
--create-namespace \
-f values.yaml
License Validation
The chart enforces license validation when tags.EntrepriseEdition is true:
Installation will fail if global.licence.clusterID is missing
Installation will fail if global.licence.token is missing
This is intentional to prevent accidental misconfiguration.
Get your Cluster ID with: kubectl get ns kube-system -o jsonpath='{.metadata.uid}'
Verify Installation
Check that all components are running:
kubectl get pods -n formance-system
You should see:
NAME READY STATUS RESTARTS AGE
formance-operator-xxxxx-xxxxx 1/1 Running 0 2m
membership-xxxxx-xxxxx 1/1 Running 0 2m
console-v3-xxxxx-xxxxx 1/1 Running 0 2m
membership-dex-xxxxx-xxxxx 1/1 Running 0 2m
postgresql-0 1/1 Running 0 2m
Migration from Previous Charts
Migrating from cloudprem chart
If you previously used the cloudprem chart, follow these steps: 1. Backup Your Data # Export current values
helm get values cloudprem -n formance-system > cloudprem-values.yaml
# Backup PostgreSQL data (recommended)
kubectl exec -n formance-system postgresql-0 -- pg_dumpall -U postgres > backup.sql
2. Map Configuration The new chart nests cloudprem values under the cloudprem key. Common mappings: Old (cloudprem) New (formance) global.licence.tokenglobal.licence.tokenglobal.licence.clusterIDglobal.licence.clusterIDglobal.serviceHostglobal.serviceHostmembership.*cloudprem.membership.*console-v3.*cloudprem.console-v3.*portal.*cloudprem.portal.*dex.* (standalone)cloudprem.membership.dex.*
3. Uninstall Old Chart helm uninstall cloudprem -n formance-system
4. Install New Chart helm upgrade --install formance oci://ghcr.io/formancehq/helm/formance \
--version 1.0.1 \
--namespace formance-system \
--set tags.EntrepriseEdition= true \
--set global.licence.clusterID= $CLUSTER_ID \
--set global.licence.token= $LICENCE_TOKEN
5. Verify Migration # Check all pods are running
kubectl get pods -n formance-system
# Test Console access
curl -I https://console.your-domain.com
Next Steps
After installation:
Configure the Control Plane — Set up Dex, create organizations, and configure SSO
Configure Infrastructure Services
Deploy your Stack