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 Cloud | Auto-hébergé (surveys.cadensa.io) | |
|---|---|---|
| Emplacement des données | Serveurs Formbricks (US/EU mixte) | Hetzner Allemagne (EU uniquement) |
| Transfert vers les US | Possible | Aucun |
| RGPD | DPA requis | Aucun DPA tiers nécessaire |
| Porte de consentement | Requise | Requise (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/ :
| Fichier | Description |
|---|---|
namespace.yaml | Namespace formbricks |
postgres-statefulset.yaml | PostgreSQL 15, PVC 10 Gi |
formbricks-configmap.yaml | Configuration non sensible (URL, hôte SMTP, etc.) |
formbricks-sealed-secret.yaml | Modèle Sealed Secret (à remplacer par de vraies valeurs) |
formbricks-deployment.yaml | Application Formbricks + Service |
formbricks-ingress.yaml | Ingress 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
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 :
- Créer le compte administrateur
- Noter l'Environment ID : Settings → Developer → Environment
- 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é