Deployment guide

Formbricks

Overview

Formbricks is an open source experience management and survey platform and a self-hosted alternative to Typeform, Qualtrics and Google Forms. Build link surveys, website and in-app surveys, and email surveys in a drag-and-drop editor. Collect and analyze responses, and manage contacts and segments, all through a modern web interface and a documented API.

The SecureAnyCloud image runs the official Formbricks self-hosted stack the supported way. The upstream container runs alongside a bundled PostgreSQL and cache, orchestrated by Docker Compose under systemd and fronted by nginx. Every image is pinned by digest and captured into the VM, so your instance starts in seconds. On first boot, before the port is reachable, each VM generates its own owner administrator, application secrets, database password and Management API key. The owner is pre-seeded, so nobody can claim your instance before you sign in.

Formbricks is a trademark of its respective owner. This image is produced by SecureAnyCloud and is not affiliated with, endorsed by or sponsored by Formbricks. It ships the free and open source AGPL 3.0 self-hosted core, unmodified, with no enterprise key set.

What you get:

  • Formbricks v5.1.4 (the AGPL 3.0 self-hosted core), shipped unmodified and pinned by image digest.
  • The official self-hosted stack: a bundled PostgreSQL and cache, plus the Apache 2.0 Formbricks Hub API and the Apache 2.0 Cube analytics service. All of them are reachable only inside a private Docker network and are never published to a host port.
  • Docker Engine (Docker CE) with Formbricks published to the loopback interface only, fronted by nginx on port 80.
  • formbricks.service, formbricks-firstboot.service and nginx.service as systemd units, enabled and active on boot.
  • A unique application secret, encryption key, cron secret, database password and Management API key, plus a pre-seeded owner administrator, generated per VM on first boot and never baked into the image.
  • Open sign-up disabled and the sign-up endpoint blocked, so nobody can seize your instance.
  • A clean, empty instance on first boot, with no default account, no shipped secret and no prior data.
  • 24/7 SecureAnyCloud support.

Prerequisites

You need an active Azure subscription, an SSH key pair, and a VNet plus subnet in the target region.

The image runs five containers (Formbricks, PostgreSQL, a cache, Hub and Cube). Standard_B2s (2 vCPU / 4 GiB RAM) is the practical minimum. Choose Standard_B2ms (8 GiB) or larger for production teams and heavier response volumes.

In the NSG, allow inbound 22/tcp from your management network. Also allow 80/tcp for the web interface, and 443/tcp once you add TLS. Formbricks serves plain HTTP on port 80. For production, put it behind TLS with your own domain (see the final section).

Step 1 - Deploy from the Azure Marketplace

  • In the Azure portal, choose Create a resource and search the Marketplace for the SecureAnyCloud Formbricks offer.
  • Select the plan, then select Create.
  • On the Basics tab, pick your subscription, resource group and region, name the VM, and select Standard_B2s (or larger).
  • Choose SSH public key authentication with admin username azureuser, and provide your public key.
  • On the Networking tab, allow inbound 22/tcp from your management network and 80/tcp for the web interface.
  • Review and create the VM. When it is running, note its public IP address.

Step 2 - Deploy from the Azure CLI

az vm image terms accept --urn sac1647283583153:formbricks:default:latest
az vm create \
  --resource-group my-formbricks-rg \
  --name formbricks \
  --image sac1647283583153:formbricks:default:latest \
  --size Standard_B2s \
  --admin-username azureuser \
  --generate-ssh-keys \
  --public-ip-sku Standard
az vm open-port --resource-group my-formbricks-rg --name formbricks --port 80 --priority 900

Step 3 - Connect to your VM

Replace <vm-ip> with your VM's public IP address:

ssh azureuser@<vm-ip>

Step 4 - Confirm the services are running

Formbricks, its bundled PostgreSQL and cache, the Hub and Cube services, and nginx all start automatically on first boot. Confirm that the core services are active:

sudo systemctl is-active docker formbricks nginx

Expected output:

active active active

The stack runs as five containers on a private Docker network. PostgreSQL, the cache, Hub and Cube are never published to a host port. Only Formbricks is published, and only to the loopback interface, with nginx in front on port 80.

Step 5 - Secure by default: the owner is pre-seeded

On a fresh Formbricks instance, the first account created owns it, and the setup wizard stays open until someone completes it. On a public server, that is a risk, because whoever reaches the instance first would own it.

The SecureAnyCloud image closes this gap. On first boot, before the port is reachable, it creates a unique owner administrator with a per-VM password, so the organization is already claimed. Open sign-up is disabled (it is off by default in self-hosted Formbricks) and blocked at nginx. The setup wizard is closed, so new members join by invitation only.

You can see the whole posture at a glance. Self-service sign-up and the setup wizard are refused, a wrong Management API key is rejected, and only the per-VM key is accepted:

curl -s -o /dev/null -w 'POST /auth/signup -> HTTP %{http_code}\n' -X POST http://127.0.0.1/auth/signup
curl -s -o /dev/null -w 'GET /setup -> HTTP %{http_code}\n' http://127.0.0.1/setup

Expected output (self-registration and the setup wizard are both blocked):

POST /auth/signup -> HTTP 403 GET /setup -> HTTP 404

Step 6 - Read your unique credentials

Your per-VM owner administrator, application secrets and Management API key are written to a file that only root can read. Show it:

sudo cat /root/formbricks-credentials.txt

The file holds the Formbricks URL, the admin email (admin@formbricks.local), the per-VM admin password and the per-VM Management API key. Keep the file safe.

Step 7 - Sign in to Formbricks

Open http://<vm-ip>/ in your browser. The Formbricks login screen appears. There is no anonymous access and no open sign-up.

Choose Login with Email, and sign in with the admin email and the password from the credentials file.

Step 8 - Explore your surveys

After you sign in, the Surveys list for your workspace opens. From here you can create a survey, filter by status and type, and open any survey to see its responses and summary.

The left sidebar gives you Surveys, Contacts, Feedback Records, Dashboards and Settings.

Step 9 - Create and edit a survey

Choose New Survey to start from a template or a blank survey. In the editor, add and reorder questions by drag and drop. Question types include ratings, multiple choice, open text, NPS, matrix and more, and a live preview sits alongside.

Configure styling, languages, logic and follow-ups. Then publish the survey to get a shareable link, or embed it on your website or app.

Step 10 - Workspace settings and the Management API

Under Settings, you manage your workspace name, survey languages, appearance, integrations and team access. Under the organization, you manage teams, domain and API Keys.

Create a scoped API key here to drive Formbricks from your own scripts with the documented Management API. The SecureAnyCloud image also pre-generates a per-VM key in the credentials file, so you can call the API right away:

curl -H "x-api-key: fbk_<your-api-key>" http://<vm-ip>/api/v1/management/me

Step 11 - Check the stack health from the command line

Formbricks exposes an unauthenticated liveness endpoint. It also exposes a readiness endpoint that reports whether the database and other dependencies are reachable. Both are useful for monitoring:

curl -s http://127.0.0.1/health

Expected output (a healthy app):

{"status":"ok"}

Step 12 - Invite your team and enable email

Open sign-up is disabled, so add colleagues from Settings, Organization, Members while signed in as the owner.

To send those invitations and email surveys, configure an SMTP server. Set the SMTP_* values in /etc/formbricks/formbricks.env and restart the stack:

# Edit /etc/formbricks/formbricks.env and set:
# SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD, MAIL_FROM
sudo systemctl restart formbricks

Step 13 - Production: your own domain with TLS

Formbricks serves plain HTTP on port 80. For production, point a DNS record at the VM, put Formbricks behind TLS, and set the application URL to your https domain. Survey links and authentication callbacks then use the right origin.

A common approach is to add a certificate to nginx with Certbot:

sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d surveys.<your-domain>

Then set WEBAPP_URL and NEXTAUTH_URL in /etc/formbricks/formbricks.env to https://surveys.<your-domain>, and restart with sudo systemctl restart formbricks. See the Formbricks documentation for the full production checklist.

Support

Every SecureAnyCloud image includes 24/7 support. If you have any questions about deploying or operating Formbricks on Azure, contact the SecureAnyCloud team through the Azure Marketplace listing or at secureanycloud.com.

Deploy on Azure

Launch Formbricks on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.

View this image

Need Help?

Our support team is available 24/7.

sales@secureanycloud.com

Deploy on Azure