Как установить и настроить Formbricks на VPS
Когда форма обратной связи или NPS-опрос собирают email, номера телефонов и мнения клиентов о продукте, отдавать эти данные стороннему SaaS вроде Typeform — сомнительная идея: данные лежат на чужих серверах, а бесплатный тариф обрывается на первой сотне ответов. Formbricks — открытая платформа опросов и форм с логикой ветвления, которую можно поднять на своём VPS за вечер и больше не думать ни о лимитах, ни о том, кто ещё видит ответы ваших пользователей. Разберём установку по шагам: от подготовки сервера до SMTP и резервных копий.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое Formbricks и чем он лучше облачных форм
Formbricks — это open-source инструмент для опросов, форм обратной связи и in-app анкетирования (NPS, CSAT, онбординг-опросы), написанный на Next.js с базой PostgreSQL. Ключевая функция, ради которой его чаще всего берут, — логика ветвления: следующий вопрос зависит от предыдущего ответа, часть блоков можно скрывать по условию, а на бесполезные для конкретного пользователя ветки респондент вообще не попадает. У Typeform и похожих сервисов это тоже есть, но за деньги и с лимитом ответов в месяц.
На своём VPS ограничений по числу ответов, опросов и участников проекта нет — вы упираетесь только в ресурсы собственного сервера. Плюс вы полностью контролируете, где физически хранятся персональные данные респондентов: это важно, если работаете с европейскими клиентами под GDPR или просто не хотите, чтобы обратная связь ваших пользователей оседала в чужой аналитике. Ядро проекта — Community Edition, полностью открытое и бесплатное; часть возможностей (SSO, кастомный whitelabel-домен для рассылки приглашений и некоторые enterprise-интеграции) доступна по лицензии — актуальный список стоит сверять на сайте проекта, он время от времени меняется.
Ресурсы Formbricks требует умеренные: для одного проекта с несколькими активными опросами ориентировочно достаточно 2 ядер и 4 ГБ памяти — это старт, при росте нагрузки от одновременных заполнений форм лучше следить за потреблением и добавлять память по факту. Точные цифры зависят от числа опросов и трафика, поэтому ориентируйтесь на мониторинг, а не на фиксированное число.
Шаг 1. Подготовка сервера и домена
Понадобится VPS с Ubuntu 24.04, root-доступ и домен (или поддомен вида forms.example.com), направленный A-записью на IP сервера — без домена официальный установщик Formbricks не получит HTTPS-сертификат. Обновите систему и откройте нужные порты:
apt update && apt upgrade -y
ufw allow 22/tcp && ufw allow 80,443/tcp && ufw enable
Пока DNS-запись распространяется (обычно от нескольких минут до пары часов), можно ставить Docker — он понадобится в любом случае, независимо от того, каким путём вы дальше пойдёте: официальным скриптом или ручным docker-compose.yml.
curl -fsSL https://get.docker.com | sh
docker compose version
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверШаг 2. Установка через официальный скрипт
Formbricks предлагает готовый bash-скрипт, который сам разворачивает Docker Compose со связкой приложение + PostgreSQL + Traefik в роли реверс-прокси и сам получает сертификат Let's Encrypt. Это самый быстрый путь для тех, кто хочет рабочий инстанс без ручной сборки конфигов:
curl -fsSL https://raw.githubusercontent.com/formbricks/formbricks/main/docker/install.sh | bash
Скрипт задаст несколько вопросов в интерактивном режиме: домен, на котором будет жить Formbricks, email для Let's Encrypt (на него придут уведомления об истечении сертификата, если продление вдруг сорвётся) и путь для установки. После ответов он сам сгенерирует секреты (NEXTAUTH_SECRET, ENCRYPTION_KEY, CRON_SECRET), поднимет контейнеры и подождёт, пока выпустится сертификат. Через несколько минут домен должен открыться с валидным HTTPS и формой создания первого аккаунта.
Этот путь удобен, но стоит понимать, что он завязан на Traefik как прокси — если у вас уже есть свой Nginx или Caddy перед другими сайтами на том же сервере, возможен конфликт портов 80/443. В этом случае логичнее собрать стек вручную и подключить Traefik или уже имеющийся у вас прокси как отдельный, управляемый вами компонент.
Шаг 3. Ручная установка через docker-compose
Если нужен полный контроль над конфигурацией — например, Formbricks должен встать рядом с другими сервисами за общим прокси — соберите стек сами. Создайте папку проекта и сгенерируйте секреты:
mkdir -p ~/formbricks && cd ~/formbricks
openssl rand -hex 32 # для NEXTAUTH_SECRET
openssl rand -hex 32 # для ENCRYPTION_KEY
openssl rand -hex 32 # для CRON_SECRET
Файл docker-compose.yml:
services:
postgres:
image: postgres:15-alpine
restart: always
environment:
- POSTGRES_USER=formbricks
- POSTGRES_PASSWORD=change_me_strong_password
- POSTGRES_DB=formbricks
volumes:
- postgres_data:/var/lib/postgresql/data
formbricks:
image: ghcr.io/formbricks/formbricks:latest
restart: always
depends_on:
- postgres
ports:
- "127.0.0.1:3000:3000"
environment:
- DATABASE_URL=postgresql://formbricks:change_me_strong_password@postgres:5432/formbricks
- NEXTAUTH_URL=https://forms.example.com
- WEBAPP_URL=https://forms.example.com
- NEXTAUTH_SECRET=вставьте_сгенерированный_секрет
- ENCRYPTION_KEY=вставьте_сгенерированный_секрет
- CRON_SECRET=вставьте_сгенерированный_секрет
volumes:
postgres_data:
Порт приложения проброшен только на 127.0.0.1 — наружу его отдаёт реверс-прокси с HTTPS, сам контейнер напрямую из интернета недоступен. Если у вас уже настроен PostgreSQL на отдельном сервере — например, для консолидации баз нескольких приложений — можно вынести postgres из compose-файла и указать в DATABASE_URL внешний адрес вместо контейнера.
Дальше — реверс-прокси. Если предпочитаете Caddy с автоматическим HTTPS, минимальный Caddyfile выглядит так:
forms.example.com {
reverse_proxy 127.0.0.1:3000
}
Подробный разбор настройки такого прокси — в статье про Caddy с авто-SSL на VPS. Если предпочитаете классику, Let's Encrypt через certbot работает так же надёжно, разница только в способе получения сертификата. Когда всё готово — поднимайте стек:
docker compose up -d
docker compose logs -f formbricks
При первом старте Formbricks сам прогонит миграции базы данных — в логах это видно по строкам о применении схемы Prisma. Дождитесь, пока контейнер сообщит о готовности слушать порт, и открывайте домен в браузере.
Шаг 4. Первый вход, организация и логика ветвления
При первом заходе на домен Formbricks предложит создать аккаунт администратора и организацию — это рабочее пространство, в котором будут жить ваши проекты и опросы. Заполните почту и пароль, подтвердите — и вы окажетесь в редакторе.
Создайте первый опрос через шаблон или с нуля и откройте вкладку логики у вопроса. Здесь настраивается ветвление: для каждого варианта ответа (или диапазона значений в шкальных вопросах) можно указать переход к конкретному следующему вопросу, пропуск блока целиком или завершение опроса. Это и есть то, ради чего чаще всего выбирают Formbricks вместо простой формы: пользователь, ответивший «нет» на первый вопрос, не видит пять последующих, которые имели смысл только при ответе «да» — опрос становится короче и релевантнее именно для него, а процент дохождения до конца растёт.
Formbricks умеет встраиваться и как классическая веб-форма по ссылке, и как in-app виджет через JS-сниппет — второй вариант удобен для NPS-опросов внутри вашего продукта, которые всплывают по триггеру (например, после N визитов). Ответы можно выгружать через встроенный экспорт или пробрасывать вебхуком во внешние системы — в том числе в собственный n8n на VPS, если нужно автоматически заводить лид в CRM по факту заполнения формы.
Шаг 5. SMTP, резервные копии и обновление
Без SMTP Formbricks не сможет отправлять письма — приглашения участникам команды, уведомления о новых ответах, сброс пароля. Добавьте в блок environment контейнера formbricks реквизиты вашего почтового сервиса:
- SMTP_HOST=smtp.example.com
- SMTP_PORT=587
- SMTP_SECURE_ENABLED=1
- SMTP_USER=notify@example.com
- SMTP_PASSWORD=пароль_приложения
- MAIL_FROM=notify@example.com
После изменения переменных пересоздайте контейнер (docker compose up -d) — Formbricks подхватит новые настройки при старте. Проверить работу SMTP проще всего, пригласив второго участника в организацию: письмо с приглашением должно прийти в течение минуты.
Резервные копии в первую очередь касаются тома postgres_data — там лежат все опросы, ответы респондентов и настройки организации. Простой вариант — снимать дамп по расписанию и уносить его за пределы сервера:
docker compose exec postgres pg_dump -U formbricks formbricks > formbricks_$(date +%F).sql
Обновление сводится к смене тега образа и пересозданию контейнеров:
docker compose pull
docker compose up -d
Перед обновлением на новую мажорную версию стоит на всякий случай снять дамп базы — сам процесс миграций у Formbricks обычно проходит гладко, но чужой инструмент лучше подстраховать своей копией, а не полагаться только на чужие тесты.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Чем self-hosted Formbricks отличается от облачной версии?
Логикой и функционалом — почти ничем, но на своём сервере нет лимитов по числу ответов и участников, а данные респондентов физически хранятся у вас. Часть функций (SSO, whitelabel-домен для писем) остаётся за лицензией Enterprise.
Обязателен ли домен для установки?
Да, особенно для официального скрипта — он получает сертификат Let's Encrypt именно на указанный домен. Без домена HTTPS настроить не получится, а без него отдавать форму в продакшен небезопасно.
Можно ли обойтись без Traefik, который ставит официальный скрипт?
Можно — соберите стек вручную через docker-compose.yml и подключите свой Caddy или Nginx, как описано в шаге 3. Это нужно, если на сервере уже крутятся другие сайты за общим прокси.
Как перенести Formbricks на другой сервер?
Снимите дамп базы pg_dump, перенесите его и файл docker-compose.yml (с теми же секретами ENCRYPTION_KEY — без него старые данные не расшифруются) на новый сервер, разверните стек и восстановите дамп через psql.
Как оплатить сервер под Formbricks из России?
У MAATRIX доступна оплата картой РФ, по СБП, криптой или токеном MAAT, а локацию сервера можно выбрать под аудиторию — например, EU-регион, если основная часть респондентов оттуда.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →