
Formbricks is a solution for in-product micro-surveys that promises to supercharge your product experience. Formbricks provides a free and open source surveying platform. Gather feedback at every point in the user journey with beautiful in-app, website, link and email surveys. In this step by step guide I will show you how to install Formbricks on your Synology NAS using Docker & Portainer.
This guide works perfectly with the latest Formbricks v6.0.2Ā release.
STEP 1
Please Support My work by Making a Donation.
STEP 2
InstallĀ Portainer using my step by step guide. If you already have Portainer installed on your Synology NAS, skip this STEP. Attention: Make sure you have installed the latest Portainer version.
STEP 3
Make sure you have a synology.me Wildcard Certificate. Follow my guide to get a Wildcard Certificate. If you already have a synology.me Wildcard certificate, skip this STEP.
STEP 4
Go toĀ Control PanelĀ /Ā Login PortalĀ /Ā AdvancedĀ Tab / clickĀ Reverse Proxy. Follow the instructions in the image below.

STEP 5
Now click the āCreateā button. Follow the instructions in the image below.

STEP 6
After you click the Create button, the window below will open. Follow the instructions in the image below.
On the General area, set the Reverse Proxy Name description: type in Formbricks. After that, add the following instructions:
Source:
Protocol:Ā HTTPS
Hostname: formbricks.yourname.synology.me
Port:Ā 443
Check Enable HSTS
Destination:
Protocol:Ā HTTP
Hostname:Ā localhost
Port:Ā 3774

STEP 7
On the Reverse Proxy Rules, click the Custom HeaderĀ tab. ClickĀ CreateĀ and then, from the drop-down menu, clickĀ WebSocket. After you click on WebSocket, two Header Names and two Values will be automatically added. ClickĀ Save. Follow the instructions in the image below.

STEP 8
Go to Control Panel / Network / Connectivity tab/ Check Enable HTTP/2 then click Apply. Follow the instructions in the image below.

STEP 9
Go to Control Panel / Security / Advanced tab/ Check Enable HTTP CompressionĀ then click Apply. Follow the instructions in the image below.

STEP 10
Go toĀ Control PanelĀ /Ā Login PortalĀ /Ā AdvancedĀ Tab / clickĀ Reverse Proxy. Follow the instructions in the image below.

STEP 11
Now click the āCreateā button. Follow the instructions in the image below.

STEP 12
After you click the Create button, the window below will open. Follow the instructions in the image below.
On the General area, set the Reverse Proxy Name description: type in Rustfs-Bricks. After that, add the following instructions:
Source:
Protocol:Ā HTTPS
Hostname: rustfsbricks.yourname.synology.me
Port:Ā 443
Check Enable HSTS
Destination:
Protocol:Ā HTTP
Hostname:Ā localhost
Port: 9540

STEP 13
On the Reverse Proxy Rules, click the Custom HeaderĀ tab. ClickĀ CreateĀ and then, from the drop-down menu, clickĀ WebSocket. After you click on WebSocket, two Header Names and two Values will be automatically added. ClickĀ Save. Follow the instructions in the image below.
STEP 14
Go toĀ File StationĀ and open the docker folder. Inside the docker folder, create one new folder and name itĀ formbricks. Follow the instructions in the image below.
Note: Be careful to enter only lowercase, not uppercase letters.

STEP 15
Now create six new folders inside the formbricks folder that you have previously created at STEP 14 and name them db,Ā redis, rustfsdata, rustfslogs, saml, uploads.Ā Follow the instructions in the image below.
Note: Be careful to enter only lowercase, not uppercase letters.

STEP 16
Download (click on the blue link below) then upload the authzed-postgres-bootstrap.shĀ file below in the formbricks folder that you have previously created at STEP 15. Follow the instructions in the image below. šNote: Support my work to unlock the password. You can use this password to download any file on mariushosting forever!

STEP 17
Follow my step by step guide on how to activate SMTP for your Gmail account. This step is mandatory. Note: If you don’t want to use the easiest way for SMTP with Google and you already have SMTP details from your own Mail Server, you can just skip this STEP and use your personalized email SMTP details instead.
STEP 18
Log into Portainer using your username and password. On the left sidebar in Portainer, click on Home then click inside the local rectangle. Follow the instructions in the image below.

On the left sidebar in Portainer, click on StacksĀ thenĀ + Add stack. Follow the instructions in the image below.

STEP 19
In the Name field type in formbricks. Follow the instructions in the image below.
services:
redis:
image: redis
container_name: Formbricks-REDIS
security_opt:
- no-new-privileges:true
read_only: true
user: 1026:100
healthcheck:
test: ["CMD-SHELL", "redis-cli ping || exit 1"]
volumes:
- /volume1/docker/formbricks/redis:/data:rw
environment:
TZ: Europe/Bucharest
restart: on-failure:5
db:
image: pgvector/pgvector:pg18
container_name: Formbricks-DB
hostname: formbricks-db
security_opt:
- no-new-privileges:true
healthcheck:
test: ["CMD", "pg_isready", "-q", "-d", "formbricks", "-U", "formbricksuser"]
timeout: 45s
interval: 10s
retries: 10
volumes:
- /volume1/docker/formbricks/db:/var/lib/postgresql:rw
environment:
POSTGRES_DB: formbricks
POSTGRES_USER: formbricksuser
POSTGRES_PASSWORD: formbrickspass
restart: on-failure:5
authzed-db-bootstrap:
image: pgvector/pgvector:pg18
container_name: Formbricks-Authzed-Bootstrap
restart: "no"
entrypoint: ["/bin/sh", "/usr/local/bin/authzed-postgres-bootstrap.sh"]
environment:
POSTGRES_ADMIN_URL: postgresql://formbricksuser:formbrickspass@formbricks-db:5432/postgres?sslmode=disable
AUTHZED_DATABASE_NAME: spicedb
AUTHZED_DATABASE_USERNAME: spicedb
AUTHZED_DATABASE_PASSWORD: abe3da279c66792836d87f91798e039d9444e1f9fd940f34d5b6bdaa0b567af5
volumes:
- /volume1/docker/formbricks/authzed-postgres-bootstrap.sh:/usr/local/bin/authzed-postgres-bootstrap.sh:ro
depends_on:
db:
condition: service_healthy
spicedb-migrate:
image: authzed/spicedb:v1.52.0
container_name: Formbricks-Authzed-SpiceDB-Migrate
command: datastore migrate head
environment:
SPICEDB_DATASTORE_ENGINE: postgres
SPICEDB_DATASTORE_CONN_URI: postgresql://spicedb:abe3da279c66792836d87f91798e039d9444e1f9fd940f34d5b6bdaa0b567af5@formbricks-db:5432/spicedb?sslmode=disable
GOMAXPROCS: "2"
depends_on:
authzed-db-bootstrap:
condition: service_completed_successfully
restart: "no"
spicedb:
image: authzed/spicedb:v1.52.0
container_name: Formbricks-SpiceDB
healthcheck:
test: ["CMD", "/usr/local/bin/grpc_health_probe", "-addr=localhost:50051"]
interval: 5s
timeout: 5s
retries: 12
start_period: 10s
command: serve
environment:
SPICEDB_DATASTORE_ENGINE: postgres
SPICEDB_DATASTORE_CONN_URI: postgresql://spicedb:abe3da279c66792836d87f91798e039d9444e1f9fd940f34d5b6bdaa0b567af5@formbricks-db:5432/spicedb?sslmode=disable
SPICEDB_GRPC_PRESHARED_KEY: 8563d0d3ed3bb10ee34e1bc8157798b543e3c4360f71c0217a89e61f26a521de
SPICEDB_LOG_FORMAT: json
SPICEDB_LOG_LEVEL: info
SPICEDB_TELEMETRY_ENDPOINT: ""
GOMAXPROCS: "2"
depends_on:
spicedb-migrate:
condition: service_completed_successfully
restart: on-failure:5
authzed-initialize:
image: ghcr.io/formbricks/formbricks:latest
container_name: Formbricks-Authzed-Initialize
restart: "no"
entrypoint: ["formbricks-authzed"]
command: ["schema", "apply"]
environment:
DATABASE_URL: postgresql://formbricksuser:formbrickspass@formbricks-db:5432/formbricks?schema=public
ENCRYPTION_KEY: unused
CUBEJS_API_SECRET: unused
CUBEJS_API_URL: http://localhost
HUB_API_KEY: unused
HUB_API_URL: http://localhost
REDIS_URL: redis://redis:6379
LOG_LEVEL: info
AUTHZED_ENABLED: "true"
AUTHZED_ENDPOINT: spicedb:50051
AUTHZED_TOKEN: 8563d0d3ed3bb10ee34e1bc8157798b543e3c4360f71c0217a89e61f26a521de
AUTHZED_SYSTEM_KEY: formbricks
AUTHZED_INSECURE: "true"
AUTHZED_CONSISTENCY: fully_consistent
depends_on:
spicedb:
condition: service_healthy
db:
condition: service_healthy
rustfs:
image: rustfs/rustfs:latest
container_name: Formbricks-RustFS
user: 0:0
healthcheck:
test: ["CMD-SHELL", "nc -z 127.0.0.1 9000 || exit 1"]
interval: 10s
timeout: 5s
retries: 3
start_period: 90s
environment:
RUSTFS_SERVER_DOMAINS: rustfsbricks.yourname.synology.me
RUSTFS_CONSOLE_CORS_ALLOWED_ORIGINS: "*"
RUSTFS_CORS_ALLOWED_ORIGINS: "*"
RUSTFS_CONSOLE_ENABLE: true
RUSTFS_ACCESS_KEY: marius
RUSTFS_SECRET_KEY: mariushosting
volumes:
- /volume1/docker/formbricks/rustfsdata:/data:rw
- /volume1/docker/formbricks/rustfslogs:/logs:rw
ports:
- 9541:9000
- 9540:9001
restart: on-failure:5
formbricks:
image: ghcr.io/formbricks/formbricks:latest
container_name: Formbricks-B
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
rustfs:
condition: service_started
spicedb:
condition: service_healthy
authzed-initialize:
condition: service_completed_successfully
ports:
- 3774:3000
volumes:
- /volume1/docker/formbricks/uploads:/home/nextjs/apps/web/uploads/:rw
- /volume1/docker/formbricks/saml:/home/nextjs/apps/web/saml-connection:rw
environment:
WEBAPP_URL: https://formbricks.yourname.synology.me
NEXTAUTH_URL: https://formbricks.yourname.synology.me
DATABASE_URL: postgresql://formbricksuser:formbrickspass@formbricks-db:5432/formbricks?schema=public
NEXTAUTH_SECRET: dOxZYTTZgXKMHkqLBIQVImayQXAVWdzGBPuFJKggzcgvgPJPXpWzqzKaUOIOGGIr
HUB_API_KEY: CTZHVLTgXtDEDUAuUZaDurpGPtZYEcEYVzWvDUHAmJxUoVHQGwPhmIiWfPuDFlrX
CUBEJS_API_SECRET: 30fc3f00a323c728c81d1d3ef2bf207ceb14e00bf35998b651aa9f91777be190
CRON_SECRET: c68e9d73282ed33f632c8dae2690061426e6df4aa243f6e4f0da96601bb6f63f
ENCRYPTION_KEY: 5143d27b56ad198ad8fec4f180a7aaf206c8b8c3a63b0cf62d0f79a4071cf84a
HUB_API_URL: http://localhost:8080
CUBEJS_API_URL: http://localhost:4000
CUBEJS_JWT_ISSUER: formbricks-web
CUBEJS_JWT_AUDIENCE: formbricks-cube
POSTGRES_PASSWORD: formbrickspass
REDIS_URL: redis://redis:6379
EMAIL_VERIFICATION_DISABLED: 1
PASSWORD_RESET_DISABLED: 0
SIGNUP_DISABLED: 0
INVITE_DISABLED: 0
MAIL_FROM: Your-own-gmail-address
SMTP_USER: Your-own-gmail-address
SMTP_PASSWORD: Your-own-app-password
SMTP_HOST: smtp.gmail.com
SMTP_PORT: 465
SMTP_SECURE_ENABLED: 1
S3_ACCESS_KEY: marius
S3_SECRET_KEY: mariushosting
S3_REGION: us-east-1
S3_BUCKET_NAME: formbricks
S3_ENDPOINT_URL: https://rustfsbricks.yourname.synology.me
S3_FORCE_PATH_STYLE: 1
AUTHZED_ENABLED: "true"
AUTHZED_ENDPOINT: spicedb:50051
AUTHZED_TOKEN: 8563d0d3ed3bb10ee34e1bc8157798b543e3c4360f71c0217a89e61f26a521de
AUTHZED_SYSTEM_KEY: formbricks
AUTHZED_INSECURE: "true"
AUTHZED_CONSISTENCY: fully_consistent
restart: on-failure:5
Note: Before you paste the code above in the Web editor area below, change the value numbers for user with your own UID and GID values. (Follow my step by step guide on how to do this.) 1026 is my personal UID value and 100 is my personal GID value. You have to type in your own values.
Note: Before you paste the code above in the Web editor area below, change the value for TZ.Ā (Select your current Time Zone from this list.)
Note: Before you paste the code above in the Web editor area below, change the value for AUTHZED_DATABASE_PASSWORD. (Generate your own Random 64 š
openssl rand -hex 32 length DATABASE_PASSWORD.) ā ļøWarning: This value should be the same for AUTHZED_DATABASE_PASSWORD and SPICEDB_DATASTORE_CONN_URI a total of 3 identical tokens. They are colored in greenĀ in the compose stack.
Note: Before you paste the code above in the Web editor area below, change the value for SPICEDB_GRPC_PRESHARED_KEY. (Generate your own Random 64 š
openssl rand -hex 32 length SPICEDB_GRPC_PRESHARED_KEY.) ā ļøWarning: This value should be the same for SPICEDB_GRPC_PRESHARED_KEY and AUTHZED_TOKEN a total of 3 identical tokens. They are colored in gold in the compose stack.
Note: Before you paste the code above in the Web editor area below, change the value for RUSTFS_SERVER_DOMAINSĀ and type in your own synology.me DDNS withoutĀ https:// at the beginning that you have previously created at STEP 12.
Note: Before you paste the code above in the Web editor area below, change the value for RUSTFS_ACCESS_KEYĀ and S3_ACCESS_KEY type in your own username. marius is an example for a username. Both usernames should be the same.
Note: Before you paste the code above in the Web editor area below, change the value for RUSTFS_SECRET_KEY and S3_SECRET_KEY and type in your own password. mariushosting is an example for a password. Both passwords should be the same.
Note: Before you paste the code above in the Web editor area below, change the value for WEBAPP_URL and type in your own synology.me DDNS withĀ https:// at the beginning that you have previously created at STEP 6.
Note: Before you paste the code above in the Web editor area below, change the value for NEXTAUTH_URLĀ and type in your own synology.me DDNS withĀ https:// at the beginning that you have previously created at STEP 6.
Note: Before you paste the code above in the Web editor area below, change the value for NEXTAUTH_SECRET. (Generate your own Random 64 length NEXTAUTH_SECRET.)
Note: Before you paste the code above in the Web editor area below, change the value for HUB_API_KEY. (Generate your own Random 64 length ENCRYPTION_KEY.)
Note: Before you paste the code above in the Web editor area below, change the value for CUBEJS_API_SECRET. (Generate Your Own Free š
openssl rand -hex 32 CUBEJS_API_SECRET.)
Note: Before you paste the code above in the Web editor area below, change the value for CRON_SECRET. (Generate Your Own Free š
openssl rand -hex 32 CRON SECRET.)
Note: Before you paste the code above in the Web editor area below, change the value for ENCRYPTION_KEY. (Generate Your Own Free š
openssl rand -hex 32 ENCRYPTION_KEY.)
Note: Before you paste the code above in the Web editor area below, change the value for MAIL_FROMĀ and type in your own Gmail address. STEP 17.
Note: Before you paste the code above in the Web editor area below, change the value for SMTP_USERĀ and type in your own Gmail address. STEP 17.
Note: Before you paste the code above in the Web editor area below, change the value for SMTP_PASSWORDĀ and type in your own Gmail app password. STEP 17. ā ļøWarning: Do NOT confuse with your own Gmail password. This is the Gmail APP password.
Note: Before you paste the code above in the Web editor area below, change the value for S3_ENDPOINT_URLĀ and type in your own synology.me DDNS withĀ https:// at the beginning that you have previously created at STEP 12.

STEP 20
Scroll down on the page until you see a button called Deploy the stack. Click on it. Follow the instructions in the image below. The installation process can take up to a few minutes. It will depend on your Internet speed connection.

STEP 20
If everything goes right, you will see this message at the top right of your screen: āSuccess Stack successfully deployedā.

STEP 21
Now wait approximately 10-15 minutes. Go to Portainer, left sidebar, and select Containers. Wait until the containers Formbrics-Authzed-Boostrap, Formbricks-Authzed-Initialize, Formbricks-Authzed-SpiceDB-Migrate are marked as exited – code 0. This is a normal behavior. Go straight to the next step.

STEP 22
š¢Please Support My work by Making a Donation. Almost 99,9% of the people that install something using my guidesĀ forget to support my work, or justĀ ignoreĀ STEP 1. Iāve been very honest about this aspect of my work since the beginning: I donāt run any ADS, I donāt require subscriptions, paid or otherwise, I donāt collect IPs, emails, and I donāt have any referral links from Amazon or other merchants. I also donāt have any POP-UPs or COOKIES. I have repeatedly been told over the years how much I have contributed to the community. Itās something I love doing and have been honest about my passion since the beginning. But I also Need The Community to Support me Back to be able to continue doing this work.
STEP 23
The installation process can take up to a few seconds/minutes. It will depend on your Internet speed connection. Now open your browser and type in your HTTPS/SSL certificate like this https://rustfsbricks.yourname.synology.me In my case it’s https://rustfsbricks.mariushosting.synology.me If everything goes right, you will see the RustFS Login page. Switch the theme toĀ Dark. In theĀ AccountĀ area, type in your ownĀ UsernameĀ (RUSTFS_ACCESS_KEY) that you have previously added atĀ STEP 18. In theĀ KeyĀ area, type in your ownĀ PasswordĀ (RUSTFS_SECRET_KEY) that you have previously added atĀ STEP 18.Ā ClickĀ Login. Follow the instructions in the image below.

STEP 24
On the left sidebar, click Browser. Click + Create Bucket. Type in formbricks as the name for the Bucket. Click Create. Follow the instructions in the image below.

STEP 25
š¢Please Support My work by Making a Donation. Almost 99,9% of the people that install something using my guidesĀ forget to support my work, or justĀ ignoreĀ STEP 1. Iāve been very honest about this aspect of my work since the beginning: I donāt run any ADS, I donāt require subscriptions, paid or otherwise, I donāt collect IPs, emails, and I donāt have any referral links from Amazon or other merchants. I also donāt have any POP-UPs or COOKIES. I have repeatedly been told over the years how much I have contributed to the community. Itās something I love doing and have been honest about my passion since the beginning. But I also Need The Community to Support me Back to be able to continue doing this work.
STEP 26
Please wait approximately 10 minutes or you will get a blank synology error page if you try to connect too soon and unhealthy container. Now open your browser and type in your HTTPS/SSL certificate like this https://formbricks.yourname.synology.me In my case it’s https://formbricks.mariushosting.synology.me If everything goes right, you will see the Formbricks Login Page. Click Get started.Ā Follow the instructions in the image below.

STEP 27
Click Continue with Email to Create your Administrator user. Follow the instructions in the image below.

STEP 28
Type in your own details, then click Continue with Email. Follow the instructions in the image below.

STEP 29
Click Log in. If you get some red error message when creating new user, ignore it the user is already created. Follow the instructions in the image below.

STEP 30
Click Login with Email.Ā Follow the instructions in the image below.

STEP 31
Type in your own Email and Password that you have previously created at STEP 28, then click Login with Email. Follow the instructions in the image below.

STEP 32
Type in a name for your organization, then click Continue. Follow the instructions in the image below.

STEP 33
Invite a new member to your Organization via email, then click ContinueĀ or Skip to invite later. Follow the instructions in the image below.

STEP 34
Use a predefined template or Start from scratch. After your selection, go straight to the next STEP.

STEP 35
Your Formbricks dashboard at a glance!

STEP 36
Confirm your email. Go to your gmail account then click Verify Email. ā ļøNote: You will receive the verification email only if you have correctly added MAIL_FROM, SMTP_USER and SMTP_PASSWORD at STEP 19. Go straight to the next STEP.

STEP 37
On the left sidebar, click Settings. Follow the instructions in the image below.

STEP 38
Click Appearance. Upload your own Logo. Follow the instructions in the image below.

Enjoy Formbricks!
Note: Check the full Formbricks documentation!
If you encounter issues by using this container, make sure to check out the Common Docker issuesĀ article.
Note: Can I run Docker on my Synology NAS?Ā See the supported models.
Note: How to Back Up Docker Containers on your Synology NAS.
Note: Find outĀ how to update the Formbricks container with the latest image.
Note: How to Free Disk Space on Your NAS if You Run Docker.
Note: How to Schedule Start & Stop For Docker Containers.
Note: How to Activate Email Notifications.
Note: How to Add Access Control Profile on Your NAS.
Note: How to Change Docker Containers Restart Policy.
Note: How to Use Docker Containers With VPN.
Note: Convert Docker Run Into Docker Compose.
Note: How to Clean Docker.
Note: How to Clean Docker Automatically.
Note: Best Practices When Using Docker and DDNS.
Note: Some Docker Containers Need WebSocket.
Note: Find out the Best NAS Models For Docker.
Note: Activate Gmail SMTP For Docker Containers.
This post was updated on Sunday / October 11th, 2026 at 5:08 AM