You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -95,6 +95,7 @@ If you would like to add your own config, you can use the [service-template](tem
95
95
| 🔄 **Resilio Sync**| A fast, reliable, and simple file sync and share solution. |[Details](services/resilio-sync)|
96
96
| 🗂️ **Stirling-PDF**| A web application for managing and editing PDF files. |[Details](services/stirlingpdf)|
97
97
| 📄 **BentoPDF**| A lightweight, self-hosted web app for viewing and managing PDF documents. |[Details](services/bentopdf)|
98
+
| 📋 **Formbricks**| A self-hosted, open-source platform for collecting user feedback, surveys, and NPS. |[Details](services/formbricks)|
98
99
| 🏦 **Subtrackr**| A self-hosted web app to track subscriptions, renewal dates, costs, and payment methods. |[Details](services/subtrackr)|
99
100
| 🗃️ **Vaultwarden**| An unofficial Bitwarden server implementation written in Rust. |[Details](services/vaultwarden)|
100
101
| 💸 **Wallos**| An open-source, self-hostable web app to track and manage your recurring subscriptions and expenses, with multi-currency support, customizable categories, and statistics. |[Details](services/wallos)|
This Docker Compose configuration sets up **Formbricks** with a Tailscale sidecar container, enabling secure access to your self-hosted user feedback and survey platform over your private Tailscale network. With this setup, your Formbricks instance remains **private and accessible only from authorized devices on your Tailnet**, keeping feedback data and analytics protected from public exposure.
5
+
6
+
## Formbricks
7
+
8
+
[**Formbricks**](https://github.com/formbricks/formbricks) is an open-source, self-hosted alternative to tools like Typeform, Hotjar, and Google Forms. It allows you to collect **user feedback, surveys, NPS scores, and product insights** directly from your applications or websites, while maintaining full control over your data.
9
+
10
+
Formbricks is built with privacy, extensibility, and developer experience in mind, making it well-suited for internal tooling, SaaS products, and organizations that want insight without vendor lock-in.
11
+
12
+
## Key Features
13
+
14
+
- 📝 **Surveys & Forms** – Create surveys, forms, and questionnaires with a modern UI.
15
+
- ⭐ **NPS & CSAT** – Measure Net Promoter Score and customer satisfaction.
16
+
- 🎯 **In-App Feedback** – Embed feedback widgets directly into your applications.
- 🔌 **API & Webhooks** – Integrate feedback data into external systems.
19
+
- 🔐 **Privacy-First** – Full data ownership through self-hosting.
20
+
- 🐳 **Docker-Ready** – Designed for containerized deployments.
21
+
- 📦 **Open Source** – Community-driven and extensible.
22
+
23
+
## Why Self-Host?
24
+
25
+
Feedback data can include sensitive product insights, internal metrics, and personal information. Self-hosting Formbricks ensures **complete ownership and control over your data**, supports compliance requirements, and removes reliance on third-party SaaS platforms. Combined with Tailscale, Formbricks becomes a secure internal feedback system that is never exposed to the public internet.
26
+
27
+
## Configuration Overview
28
+
29
+
In this deployment, a **Tailscale sidecar container** (for example `tailscale-formbricks`) runs the Tailscale client and joins your private Tailscale network. The main `formbricks` service uses:
30
+
31
+
```plain
32
+
network_mode: service:tailscale-formbricks
33
+
```
34
+
35
+
This configuration routes all inbound and outbound traffic through the Tailscale interface, ensuring that the Formbricks admin UI, APIs, and feedback endpoints are accessible **only via your Tailscale network**. This keeps sensitive feedback data protected while still allowing secure access for authorized team members.
# Make sure you have updated/checked the .env file with the correct variables.
3
+
# All the ${ xx } need to be defined there.
4
+
# Tailscale Sidecar Configuration
5
+
tailscale:
6
+
image: tailscale/tailscale:latest # Image to be used
7
+
container_name: tailscale-${SERVICE} # Name for local container management
8
+
hostname: ${SERVICE} # Name used within your Tailscale environment
9
+
environment:
10
+
- TS_AUTHKEY=${TS_AUTHKEY}
11
+
- TS_STATE_DIR=/var/lib/tailscale
12
+
- TS_SERVE_CONFIG=/config/serve.json # Tailscale Serve configuration to expose the web interface on your local Tailnet - remove this line if not required
- TS_LOCAL_ADDR_PORT=127.0.0.1:41234 # The <addr>:<port> for the healthz endpoint
16
+
#- TS_ACCEPT_DNS=true # Uncomment when using MagicDNS
17
+
volumes:
18
+
- ./config:/config # Config folder used to store Tailscale files - you may need to change the path
19
+
- ./ts/state:/var/lib/tailscale # Tailscale requirement - you may need to change the path
20
+
devices:
21
+
- /dev/net/tun:/dev/net/tun # Network configuration for Tailscale to work
22
+
cap_add:
23
+
- net_admin # Tailscale requirement
24
+
#ports:
25
+
# - 0.0.0.0:${SERVICEPORT}:${SERVICEPORT} # Binding port ${SERVICE}PORT to the local network - may be removed if only exposure to your Tailnet is required
26
+
# If any DNS issues arise, use your preferred DNS provider by uncommenting the config below
27
+
#dns:
28
+
# - ${DNS_SERVER}
29
+
healthcheck:
30
+
test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:41234/healthz"] # Check Tailscale has a Tailnet IP and is operational
31
+
interval: 1m# How often to perform the check
32
+
timeout: 10s# Time to wait for the check to succeed
33
+
retries: 3# Number of retries before marking as unhealthy
34
+
start_period: 10s# Time to wait before starting health checks
# signup is disabled by default for self-hosted instances, users can only signup using an invite link, in order to allow signup from SSO(without invite), set the below to 1
240
+
# AUTH_SKIP_INVITE_FOR_SSO: "1"
241
+
242
+
# Set the below to automatically assign new users to a specific team, insert an existing team id
243
+
# (Role Management is an Enterprise feature)
244
+
# AUTH_SSO_DEFAULT_TEAM_ID: ""
245
+
246
+
# Configure the minimum role for user management from UI(owner, manager, disabled)
247
+
# USER_MANAGEMENT_MINIMUM_ROLE: "manager"
248
+
249
+
# Configure the maximum age for the session in seconds. Default is 86400 (24 hours)
0 commit comments