Aller au contenu principal

Auto-hébergement Formbricks

CADENSA utilise Formbricks pour les sondages NPS in-app et le bouton de feedback. Plutôt que le cloud Formbricks, nous hébergeons notre propre instance sur notre infrastructure EU — aucun transfert de données vers les États-Unis, conformité RGPD complète.

URL auto-hébergée : https://surveys.cadensa.io (Hetzner, Allemagne)


Pourquoi auto-héberger ?

Formbricks CloudAuto-hébergé (surveys.cadensa.io)
Emplacement des donnéesServeurs Formbricks (US/EU mixte)Hetzner Allemagne (EU uniquement)
Transfert vers les USPossibleAucun
RGPDDPA requisAucun DPA tiers nécessaire
Porte de consentementRequiseRequise (catégorie analytics)

Architecture

cadensa-frontend / cadensa-landing
└─ @formbricks/js SDK
└─ VITE_FORMBRICKS_APP_URL / NEXT_PUBLIC_FORMBRICKS_APP_URL
└─ https://surveys.cadensa.io
└─ Application Formbricks (Kubernetes : namespace formbricks)
└─ PostgreSQL 15 (StatefulSet : formbricks-postgres)

L'application Formbricks s'exécute dans son propre namespace Kubernetes (formbricks) avec un StatefulSet PostgreSQL dédié. Elle est exposée via nginx Ingress avec un certificat TLS Let's Encrypt.


Déploiement Kubernetes

Tous les manifestes se trouvent dans cadensa-k8s/k8s/formbricks/ :

FichierDescription
namespace.yamlNamespace formbricks
postgres-statefulset.yamlPostgreSQL 15, PVC 10 Gi
formbricks-configmap.yamlConfiguration non sensible (URL, hôte SMTP, etc.)
formbricks-sealed-secret.yamlModèle Sealed Secret (à remplacer par de vraies valeurs)
formbricks-deployment.yamlApplication Formbricks + Service
formbricks-ingress.yamlIngress nginx avec TLS (surveys.cadensa.io)

Premier déploiement

# 1. Générer les secrets
NEXTAUTH_SECRET=$(openssl rand -base64 32)
ENCRYPTION_KEY=$(openssl rand -hex 32)
POSTGRES_PASSWORD=$(openssl rand -base64 24)

# 2. Créer le Sealed Secret
kubectl create secret generic formbricks-secrets \
--from-literal=DATABASE_URL="postgresql://formbricks:${POSTGRES_PASSWORD}@formbricks-postgres:5432/formbricks" \
--from-literal=NEXTAUTH_SECRET="${NEXTAUTH_SECRET}" \
--from-literal=ENCRYPTION_KEY="${ENCRYPTION_KEY}" \
--from-literal=SMTP_PASSWORD="<mot-de-passe-smtp>" \
-n formbricks --dry-run=client -o yaml \
| kubeseal --controller-namespace kube-system -o yaml \
> cadensa-k8s/k8s/formbricks/formbricks-sealed-secret.yaml

# 3. Appliquer les manifestes
kubectl apply -f cadensa-k8s/k8s/formbricks/namespace.yaml
kubectl apply -f cadensa-k8s/k8s/formbricks/postgres-statefulset.yaml
kubectl apply -f cadensa-k8s/k8s/formbricks/formbricks-configmap.yaml
kubectl apply -f cadensa-k8s/k8s/formbricks/formbricks-sealed-secret.yaml
kubectl apply -f cadensa-k8s/k8s/formbricks/formbricks-deployment.yaml
kubectl apply -f cadensa-k8s/k8s/formbricks/formbricks-ingress.yaml
Important

NEXTAUTH_SECRET et ENCRYPTION_KEY ne doivent jamais être modifiés après le premier déploiement — toutes les données de sondage sont chiffrées avec ces clés. Conservez-les en lieu sûr !

Mise à jour

# Modifier formbricks-deployment.yaml — mettre à jour le tag d'image
# image: formbricks/formbricks:v2.x.y
kubectl apply -f cadensa-k8s/k8s/formbricks/formbricks-deployment.yaml

Docker Compose (local / staging)

Pour les tests locaux ou les environnements de staging :

# 1. Copier et remplir le fichier env
cp cadensa-k8s/.env.formbricks.example cadensa-k8s/.env.formbricks
# Modifier .env.formbricks — remplacer toutes les valeurs CHANGE_ME

# 2. Démarrer
docker compose -f cadensa-k8s/docker-compose.formbricks.yml \
--env-file cadensa-k8s/.env.formbricks up -d

# Interface Formbricks : http://localhost:3001

Configuration de l'application

Après le premier déploiement, ouvrir https://surveys.cadensa.io et suivre l'assistant de configuration :

  1. Créer le compte administrateur
  2. Noter l'Environment ID : Settings → Developer → Environment
  3. Mettre à jour les variables d'environnement dans les deux applications :

cadensa-frontend (.env) :

VITE_FORMBRICKS_ENV_ID=<environment-id-from-formbricks>
VITE_FORMBRICKS_APP_URL=https://surveys.cadensa.io

cadensa-landing (.env.local) :

NEXT_PUBLIC_FORMBRICKS_ENV_ID=<environment-id-from-formbricks>
NEXT_PUBLIC_FORMBRICKS_APP_URL=https://surveys.cadensa.io

Télémétrie

TELEMETRY_DISABLED=1 est défini dans la ConfigMap — Formbricks n'envoie aucune donnée d'utilisation au cloud Formbricks.


Données et RGPD

  • Emplacement des données : Hetzner, Allemagne (EU)
  • Aucun transfert vers les US (contrairement à Formbricks Cloud)
  • Réponses aux sondages stockées dans PostgreSQL — chiffrées au repos (chiffrement du volume Hetzner)
  • Demandes des personnes concernées : Interface admin Formbricks → People → Delete person
  • Conservation : configurable dans les paramètres Formbricks

Documentation connexe : FAQ Données et Sécurité