How to Self-Host a Form Builder
Self-hosting a form builder means running the survey software on infrastructure you control rather than relying on a vendor's cloud. The benefits are significant: all respondent data stays within your network, you pay only for server resources instead of per-user or per-response fees, and you can modify the application code to add custom features or integrations. The trade-off is that you are responsible for installation, updates, security, and backups.
Step 1: Choose Your Platform and Server
Your server requirements depend on which form builder you choose and how many concurrent respondents you expect.
For LimeSurvey, you need a server running Linux (Ubuntu 22.04 or Debian 12 are well-tested choices) with Apache or Nginx as the web server, PHP 8.1 or higher, and MySQL 8.0 or PostgreSQL 14+. A server with 2 GB of RAM and 1 CPU core handles small to medium survey loads comfortably. For large-scale deployments with thousands of simultaneous respondents, 4 GB of RAM and 2 cores is recommended.
For Formbricks, you need a server with Docker and Docker Compose installed. The minimum recommendation is 2 GB of RAM and 2 CPU cores. Formbricks runs as a set of containers including the application server and PostgreSQL database, so Docker experience is helpful.
For HeyForm or Typebot, Docker is also the standard deployment method, with similar resource requirements to Formbricks.
Hosting options include cloud VPS providers like DigitalOcean, Hetzner, Linode, and Vultr, where suitable servers start at $5 to $12 per month. You can also deploy on AWS EC2, Google Cloud, or Azure instances, or use on-premises servers within your organization's data center for maximum data sovereignty.
Step 2: Install Server Dependencies
For a PHP-based deployment like LimeSurvey on Ubuntu, you need to install the web server, PHP, and database. The core PHP extensions required are php-mysql (or php-pgsql for PostgreSQL), php-gd for image processing, php-mbstring for multi-byte string handling, php-xml for import and export functions, php-zip for archive handling, php-curl for remote API calls, and php-ldap if you plan to use LDAP authentication.
Install Apache with mod_rewrite enabled for clean URLs, or Nginx with the appropriate FastCGI configuration for PHP processing. Create a MySQL database and user specifically for LimeSurvey, granting all privileges on that database only.
For Docker-based deployments, install Docker Engine and Docker Compose on your server. On Ubuntu, the official Docker repository provides the latest stable versions. Verify the installation works by running a test container. No additional web server or database installation is needed since everything runs inside containers.
Step 3: Deploy the Application
For LimeSurvey, download the latest Community Edition from the official website or clone the repository from GitHub. Extract the files to your web server's document root or a subdirectory. Set file ownership to the web server user (www-data on Ubuntu) and ensure the tmp, upload, and application/config directories are writable. Navigate to the installation URL in your browser to launch the setup wizard, which guides you through database configuration, admin account creation, and initial settings.
For Formbricks, create a project directory and download the official docker-compose.yml file. Create a .env file with your configuration settings including the application URL, database credentials, and encryption keys. Run docker-compose up to start all services. The application becomes available on the configured port, and you create your admin account on first access through the web interface.
For HeyForm, the process is similar: clone the repository, configure environment variables, and run docker-compose up. Typebot follows the same pattern with its own docker-compose configuration.
Step 4: Configure SSL and Domain
Every self-hosted survey tool must run behind HTTPS. Survey responses often contain personal or sensitive data, and browsers display security warnings on non-HTTPS pages that discourage respondents from submitting forms. Additionally, search engines and some email providers penalize or block links to HTTP-only sites.
Let's Encrypt provides free SSL certificates that auto-renew. For Apache deployments, install Certbot and run it with the Apache plugin to automatically obtain and configure the certificate. For Nginx, use the Nginx plugin. For Docker deployments, a reverse proxy like Traefik or Nginx Proxy Manager handles SSL termination and automatic certificate renewal for all your containers.
Point your domain's DNS A record to your server's IP address. If you are using a reverse proxy, configure it to forward requests for your survey domain to the appropriate container port. Verify HTTPS works by visiting your survey URL and confirming the browser shows a secure connection.
Step 5: Set Up Email Delivery
Survey tools need to send email for invitation delivery, response notifications, password resets, and reminder messages. Direct SMTP from your server often gets flagged as spam by major email providers, so using a dedicated transactional email service produces much better deliverability.
Popular options include Amazon SES (very low cost at about $0.10 per 1,000 emails), Postmark (focused on deliverability), SendGrid (generous free tier), and Mailgun. Each provides SMTP credentials you configure in your survey tool's email settings.
In LimeSurvey, navigate to Global Settings then Email Settings to configure the SMTP host, port, username, and password. LimeSurvey supports SMTP with TLS or SSL encryption. Test the configuration by sending a test email from the admin panel.
In Formbricks, email settings are configured through environment variables in the .env file, specifying the SMTP host, port, credentials, and sender address. Restart the containers after changing email configuration for the settings to take effect.
Step 6: Secure and Harden the Installation
A self-hosted survey platform is internet-facing, so security hardening is essential to protect both the application and respondent data.
Start with a firewall that only allows incoming traffic on ports 80 (HTTP, for redirect to HTTPS), 443 (HTTPS), and 22 (SSH for administration). Block all other ports. If your database runs on the same server, it should not be accessible from the network at all, only through localhost connections.
For LimeSurvey, disable directory listing in Apache, remove the installation directory after initial setup, and set restrictive file permissions so the web server can only write to the directories it needs. Enable CSRF protection and set the admin panel to require strong passwords.
For Docker deployments, ensure containers run as non-root users where possible, bind database ports only to localhost (not 0.0.0.0), and keep Docker images updated to receive security patches. Use Docker secrets or environment files with restricted permissions for sensitive configuration like database passwords and API keys.
Enable automatic security updates for your operating system. On Ubuntu, the unattended-upgrades package handles this automatically for critical patches.
Step 7: Configure Backups and Monitoring
Survey data represents significant value, both the survey instruments you have designed and the response data you have collected. Losing either to a server failure, accidental deletion, or security incident is unacceptable for most organizations.
Set up automated daily database backups using mysqldump for MySQL or pg_dump for PostgreSQL. Store backups on a separate server or cloud storage service like S3, not only on the same server that runs your survey platform. Test your backups regularly by restoring them to a separate environment to verify they work.
For Docker deployments, back up both the database volumes and any persistent file storage volumes. The docker-compose down command does not delete volumes, but accidental volume cleanup or server replacement will erase data if you do not have external backups.
Set up uptime monitoring using a service like UptimeRobot (free for up to 50 monitors), Hetrix Tools, or a self-hosted solution like Uptime Kuma. Configure alerts to notify you by email or Slack if your survey platform goes down, so you can restore service before respondents encounter errors.
Monitor disk space, especially if you allow file uploads in surveys. Response databases grow steadily with active survey usage, and running out of disk space can corrupt databases and cause data loss.
Self-hosting an open source form builder is a straightforward process for anyone with basic Linux server administration skills. The most critical steps after initial deployment are configuring SSL for secure data transmission, setting up reliable email delivery for survey invitations, and implementing automated backups to protect your survey data. Once these foundations are in place, a self-hosted survey platform requires minimal ongoing maintenance while giving you complete control over your data.