
Formbricks è una piattaforma open source per la gestione dell’experience management, pensata per la raccolta di feedback e la creazione di sondaggi (survey) sia in-app che tramite link condivisibili.
Nato come alternativa self-hosted a strumenti SaaS come Typeform o SurveyMonkey, Formbricks consente alle organizzazioni di mantenere il pieno controllo sui dati raccolti, senza vincoli di licenza per numero di risposte e con piena conformità alle politiche di data privacy interne, un aspetto particolarmente rilevante per enti che gestiscono dati sensibili o operano in contesti normati (GDPR, policy aziendali di data residency).
L’architettura di Formbricks è containerizzata e si basa su un’infrastruttura Docker composta da diversi servizi: l’applicazione web principale (Next.js), un database PostgreSQL per la persistenza dei dati, Redis per la gestione di cache e code, un servizio di storage oggetti (RustFS) per gli allegati, e componenti aggiuntivi come Cube per l’analisi dei dati e Hub per funzionalità di integrazione.
L’accesso all’applicativo avviene tipicamente tramite un reverse proxy (Traefik), che gestisce il routing verso i singoli container e, dove necessario, la terminazione TLS.
Questo documento descrive la procedura di installazione e configurazione base di Formbricks su un server Ubuntu Server 26.04, in ambiente di test/laboratorio, coprendo il deployment tramite Docker Compose, la configurazione delle variabili d’ambiente principali (URL pubblico dell’applicazione, parametri di autenticazione), la creazione e gestione dell’utente amministratore, e le verifiche di funzionamento post-installazione.
PREREQUISITI
Prima di iniziare assicurarsi di avere:
- Un server con Ubuntu Server 26.04, accesso SSH e utente con privilegi sudo.
- Requisiti minimi hardware: 1 vCPU, 2 GB di RAM, 8 GB di spazio SSD (per un uso reale con più progetti/risposte, meglio partire da 2 vCPU / 4 GB RAM).
- Un nome a dominio (es. feedback.tuodominio.it) con un record DNS di tipo A che punti all’IP pubblico del server.
- Le porte 80 e 443 raggiungibili dall’esterno (aperte sul firewall del server e su eventuale firewall del provider/cloud).
- Un indirizzo email valido, da usare per le notifiche del certificato SSL (Let’s Encrypt).
PREPARAZIONE DEL SERVER
Collegarsi via SSH al server e aggiornare il sistema con il comando:
|
0 |
sudo apt update && sudo apt upgrade -y
|
Se non hai già un utente non-root con sudo, creane uno (consigliato non lavorare come root):
|
0
1
2
3
4
|
sudo adduser formbricks-admin
sudo usermod -aG sudo formbricks-admin
su - formbricks-admin
|
CONFIGURAZIONE DEL FIREWALL
Configurare il firewall con i seguenti comandi:
|
0
1
2
3
4
5
6
7
8
9
10
|
sudo apt install -y ufw
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status
|
VERIFICA DEL DNS
Prima di procedere, controlla che il dominio scelto risolva correttamente verso l’IP del server:
|
0 |
dig +short feedback.tuodominio.it
|
L’output deve corrispondere all’IP pubblico del tuo server Ubuntu. Se non è ancora propagato, attendi qualche minuto prima di continuare (il rilascio del certificato SSL fallisce se il DNS non è corretto).
INSTALLAZIONE DI FORMBRICKS (SCRIPT ONE-CLICK)
Lo script ufficiale gestisce da solo l’installazione di Docker e di tutti i componenti necessari, quindi non serve installare Docker manualmente prima.
Creare una cartella di lavoro e scaricare lo script con i seguenti comandi:
|
0
1
2
3
|
mkdir -p ~/formbricks-install && cd ~/formbricks-install
curl -fsSL https://raw.githubusercontent.com/formbricks/formbricks/stable/docker/formbricks.sh \
-o formbricks.sh && chmod +x formbricks.sh
|
Avviare l’installazione con il comando:
|
0 |
./formbricks.sh install
|
Durante l’esecuzione lo script farà alcune domande interattive:
Chiavi GPG di Docker: se richiesto, conferma il sovrascrivere eventuali chiavi Docker già presenti.
Dominio: inserire il tuo dominio senza protocollo, cioè senza http:// o https:// (es. feedback.tuodominio.it).
Certificato HTTPS: rispondi “sì” per attivare la generazione automatica del certificato con Let’s Encrypt.
Verifica DNS: conferma che il dominio punti correttamente al server e che le porte 80/443 siano raggiungibili.
Email per SSL: indirizzo email da associare al certificato (notifiche di scadenza/rinnovo).
HSTS: puoi abilitarlo per forzare sempre HTTPS (consigliato per un ambiente di produzione stabile).
Servizio email/SMTP: opzionale, puoi rispondere “no” e configurarlo in un secondo momento (vedi punto 6).
Al termine, lo script crea una cartella ./formbricks/ contenente:
docker-compose.yml: la definizione dei container
.env: variabili d’ambiente e credenziali (da tenere privato e da includere nei backup)
traefik.yaml / traefik-dynamic.yaml: configurazione del reverse proxy
acme.json: i certificati SSL emessi da Let’s Encrypt
VERIFICA DELL’INSTALLAZIONE
Controllare che tutti i container siano attivi:
|
0
1
2
|
cd ~/formbricks-install/formbricks
docker ps
|
Dovremmo vedere in esecuzione (tra gli altri) i container di Formbricks, PostgreSQL, Redis, Traefik e Cube.
|
0
1
2
3
4
5
6
7
|
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
421e398d73b1 traefik:v3.6.4 "/entrypoint.sh trae…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp traefik
feafd58746f0 cubejs/cube:v1.6.6 "docker-entrypoint.s…" About a minute ago Up About a minute (healthy) 4000/tcp formbricks-cube-1
6bb06dd3e131 ghcr.io/formbricks/hub:latest "/app/hub-api" About a minute ago Up About a minute (healthy) 8080/tcp formbricks-hub-1
ac8b179d82ed ghcr.io/formbricks/formbricks:latest "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:3000->3000/tcp, [::]:3000->3000/tcp formbricks-formbricks-1
498bdc4abc05 rustfs/rustfs:1.0.0-rc.2 "/entrypoint.sh /data" About a minute ago Up About a minute 9000-9001/tcp formbricks-rustfs-1
af4eff0dc365 pgvector/pgvector:pg18 "docker-entrypoint.s…" About a minute ago Up About a minute (healthy) 5432/tcp formbricks-postgres-1
63140f3ade9c e0eb7c480958 "docker-entrypoint.s…" About a minute ago Up About a minute (healthy) 6379/tcp formbricks-redis-1
|
Aprire quindi nel browser:
https://feedback.tuodominio.it
Se tutto è andato a buon fine, il certificato HTTPS sarà valido (lucchetto verde) e comparirà la schermata di primo avvio di Formbricks.
CONFIGURAZIONE INZIALE VIA BROWSER
Alla prima apertura del dominio, Formbricks ti guida nella configurazione base:
Cliccare su Continue with mail
Crea l’account amministratore: nome, email e password del primo utente (avrà ruolo di owner dell’organizzazione)
Spuntare l’opzione Security Updates quindi cliccare Continue with Email
Cliccare Log In
Cliccare Log in with Email
Inserire le credenziali amministrative create in precedenza quindi cliccare Log In with Email
Inserire il nome dell’organizzazione quindi cliccare Continue
Dato che l’SMTP non è configurato cliccare Skip
Cliccare Start From Scratch per creare il primo progetto. Formbricks propone anche modelli pronti (survey NPS, feedback prodotto, ecc.) da cui partire.
Inserire tutte le info della Survey quindi cliccare Save and Close
La survey è Live. Cliccare su Preview per vedere l’anteprima
Se è tutto OK dovremmo visualizzare la Survey appena creata
Da questo momento l’app è pienamente operativa: puoi creare survey, invitare collaboratori e collegare i tuoi siti/app tramite l’SDK Formbricks.
CONFIGURAZIONE BASE AGGIUNTIVA (OPZIONALE MA CONSIGLIATA)
Le impostazioni aggiuntive si configurano modificando il file .env nella cartella ~/formbricks-install/formbricks/ e poi riavviando lo stack.
Invio email (SMTP)
Necessario per inviti team, notifiche e reset password. Aggiungi/modifica nel file .env:
|
0
1
2
3
4
5
6
|
MAIL_FROM=notifiche@tuodominio.it
MAIL_FROM_NAME="Formbricks - Tuo Nome Azienda"
SMTP_HOST=smtp.tuoprovider.it
SMTP_PORT=587
SMTP_USER=nome-utente-smtp
SMTP_PASSWORD=password-smtp
SMTP_SECURE_ENABLED=1
|
Login con Google o GitHub (opzionale)
Se vuoi permettere il login con account Google o GitHub, aggiungi le credenziali OAuth ottenute dalla rispettiva console sviluppatori:
|
0
1
2
3
4
|
GOOGLE_CLIENT_ID=...
GOOGLE_CLIENT_SECRET=...
GITHUB_ID=...
GITHUB_SECRET=...
|
Applicare le modifiche
Dopo ogni modifica al file .env, riavviare lo stack perché le variabili vengano ricaricate:
|
0
1
2
|
cd ~/formbricks-install/formbricks
./formbricks.sh restart
|
NOTA BENE: non modificare mai a mano i secret generati automaticamente durante l’installazione (NEXTAUTH_SECRET, ENCRYPTION_KEY, CRON_SECRET, ecc.) sono legati ai dati già cifrati nel database.
COMANDI DI GESTIONE UTILI
Tutti i comandi vanno eseguiti dentro ~/formbricks-install/formbricks/:
|
0
1
2
3
4
|
./formbricks.sh logs # visualizza i log dei container
./formbricks.sh stop # ferma lo stack
./formbricks.sh restart # riavvia lo stack
./formbricks.sh update # aggiorna Formbricks all'ultima versione stabile
./formbricks.sh uninstall # disinstalla e rimuove tutti i dati (irreversibile)
|
Lo script update non sovrascrive il tuo docker-compose.yml personalizzato, quindi eventuali modifiche manuali vengono preservate.
BACKUP CONSIGLIATI
Per poter ripristinare l’installazione in caso di problemi, includi periodicamente nel tuo piano di backup:
Il file ~/formbricks-install/formbricks/.env (contiene tutti i secret).
Un dump del database PostgreSQL:
|
0
1
2
|
cd ~/formbricks-install/formbricks
docker compose exec postgres pg_dump -U postgres formbricks > backup-formbricks-$(date +%F).sql
|
Se usi lo storage file locale (RustFS incluso), anche i relativi volumi Docker.
PRO E CONTRO
PRO
- Open source e self-hosted senza limiti artificiali: a differenza di alternative SaaS come Typeform o SurveyMonkey, la versione self-hosted di Formbricks non impone limiti sul numero di risposte raccolte, e il codice sorgente è liberamente ispezionabile e modificabile.
- Controllo completo sui dati: essendo ospitato su infrastruttura propria, tutti i dati restano all’interno del perimetro dell’organizzazione, un vantaggio rilevante per requisiti di data residency, GDPR o policy interne di sicurezza.
- Targeting comportamentale avanzato: consente di attivare micro-survey in-app basate su comportamento dell’utente, pagine visitate o eventi personalizzati, permettendo di raccogliere feedback nel momento più significativo.
- Builder no-code: la creazione di sondaggi (NPS, CSAT, CES e altri template predefiniti) non richiede competenze tecniche, rendendo lo strumento accessibile anche a team non sviluppatori.
- Flessibilità nei canali di distribuzione: supporta sondaggi in-app, pop-up su sito web e link condivisibili, coprendo diversi scenari di raccolta feedback.
CONTRO
- Complessità dell’auto-hosting: come abbiamo sperimentato direttamente in questa installazione, il deployment richiede familiarità con Docker, Docker Compose, reverse proxy (Traefik) e gestione di variabili d’ambiente — non è un prodotto “plug and play” per team privi di competenze sistemistiche.
- Manutenzione continuativa: essendo self-hosted, l’organizzazione si assume la responsabilità di aggiornamenti, backup del database, gestione dei certificati TLS e troubleshooting (come il problema di “Invalid origin” legato al mismatch tra protocollo configurato e protocollo di accesso).
- Focus limitato a survey in-app e su sito: è meno adatto a form standalone complessi, quiz strutturati o flussi collegati a pagamenti, ambiti in cui strumenti come Typeform restano più maturi.
- Libreria template ridotta: rispetto a competitor consolidati, offre meno template predefiniti e minori opzioni di personalizzazione grafica “out of the box”.
- Integrazione per survey in-app: richiede l’integrazione di un SDK JavaScript nel prodotto/sito, il che comporta un carico di lavoro di sviluppo iniziale non banale.
- Analytics essenziali: le dashboard di reporting integrate sono più basilari rispetto a strumenti concorrenti orientati all’analisi avanzata dei dati.

0 Commenti