Formbricks
Self-hosted платформа опросов и форм: конструктор с блоками и условной логикой, 40+ шаблонов (NPS, CSAT, CES, PMF, churn), публичные ссылки и аналитика ответов. Замена Typeform, Google Forms и Qualtrics, где данные респондентов остаются на вашем сервере. Развернули версию 5.2.1 в Docker и замерили реальное потребление.
Вердикт
- командам, которым нужны NPS/CSAT/CES-опросы с аналитикой на своей инфраструктуре
- продуктам с in-app и website-опросами и условной логикой
- тем, кто держит ПДн респондентов у себя, а не в чужом облаке
- если нужна одна разовая форма - стек из 5 контейнеров избыточен
- при жестком бюджете по железу: тариф CPU4-RAM8-DISK100 v5 не тянет
- если SSO, 2FA и роли обязательны без затрат - это платный Enterprise
Что это и какую задачу решает
Formbricks - открытая платформа для опросов и форм, которую можно поставить на свой сервер. Это не просто конструктор форм: помимо публичных link-опросов есть website-опросы (баннер на сайте) и in-app-опросы (триггеры прямо в продукте), плюс готовый набор из 40+ шаблонов - NPS, CSAT, CES, PMF, churn, eNPS и другие. Конструктор собирается из блоков с условной логикой и ветвлением, есть живое превью прямо в редакторе.
Собранные ответы уходят в аналитику: сводки по опросам считаются через семантический слой Cube, есть API и SDK, вебхуки и интеграции с Notion, Google Sheets, Slack и Airtable. По классу задач это ближе к experience management, чем к легкому форм-билдеру. Ключевая причина ставить у себя - опросы обрабатывают персональные данные третьих лиц (респондентов), и держать их на своем сервере под 152-ФЗ проще, чем в чужом облаке.
Чем отличается от платных аналогов
Сравнение по тому, что влияет на выбор, без снисходительности к конкурентам.
| Параметр | Formbricks | Typeform / Google Forms / Qualtrics |
|---|---|---|
| Модель цены | ядро бесплатно (AGPLv3), self-host | подписка, оплата за ответы или места |
| Где данные респондентов | на вашем сервере | в облаке вендора |
| In-app и website-опросы | есть из коробки | частично или только у enterprise |
| Vendor lock-in | нет, свой Postgres и API | данные и логика у вендора |
| Ресурсы | тяжелый стек, свое железо | ничего не держите |
| SSO, 2FA, роли | платный Enterprise-ключ | в тарифах |
Тех-стек и архитектура
Актуальная ветка v5 - это уже не «пара контейнеров», а полноценный стек. В работе крутятся 5 контейнеров: веб-приложение и API на Next.js (образ ghcr.io/formbricks/formbricks:5.2.1), Postgres 18 с расширением pgvector как основная БД, Cube для семантического слоя аналитики (сводки ответов, дашборды), Hub API как служебный слой taxonomy и Valkey (форк Redis) под кеш, rate limiting и audit log.
Плюс на старте отрабатывают два одноразовых контейнера миграций: formbricks-migrate применяет Prisma-миграции основной БД, а hub-migrate - миграции Hub (goose + river). Опциональные профили taxonomy/qwen (нужен GPU) и vLLM мы не включаем. Снаружи перед приложением стоит Caddy на хосте с авто-TLS по Let's Encrypt.
Минимальная конфигурация
Реальные требования против скромного официального минимума.
| Официальный минимум | Docker Engine + Compose V2, точной RAM не фиксируют |
| Контейнеры в простое | ~963 MiB (5 сервисов) |
| Весь хост занят | ~1,6 GiB |
| Образы на диске | ~5,21 GB (5 образов) |
| Диск под стеком | ~7,4 GiB |
| Рекомендуем тариф | CPU4-RAM8-DISK100 |
Важно: старые данные про «512 MB - 1 GB RAM» - это про легаси-схему из двух контейнеров. Для v5 они нереалистичны: только веб-контейнер на Next.js съедает ~766 MiB в простое, а вместе с Cube и Postgres стек упирается почти в гигабайт. тариф CPU4-RAM8-DISK100 стек не потянет - нужен старший.
В маркетплейсе Fatmetal
Не хотите ставить руками?
Этот стек есть в маркетплейсе Fatmetal - можно не повторять установку из этого разбора вручную. Заказываете сервер, за пару минут получаете рабочий домен, валидный TLS и файл с доступами.
Рекомендуемая конфигурация: CPU4-RAM8-DISK100
Развертывание на Fatmetal
Базовый путь - Cloud Server + Ubuntu 24.04 + Docker, за Caddy с авто-TLS.
Создать VM
Старший тариф (стек тяжелый), Ubuntu 24.04, приложение Docker. Дождаться, пока Docker доустановится - после статуса Running это еще пара минут.
Сгенерировать секреты
Без корректных ключей деплой падает: нужны ENCRYPTION_KEY, NEXTAUTH_SECRET, CRON_SECRET, HUB_API_KEY, CUBEJS_API_SECRET.
openssl rand -hex 32 # для каждого секрета отдельноПодготовить compose и .env
mkdir ~/formbricks && cd ~/formbricks curl -o docker-compose.yml ССЫЛКА curl -o .env ССЫЛКА # вписать секреты, WEBAPP_URL, NEXTAUTH_URLПоднять стек
docker compose pull docker compose up -dСначала отработают контейнеры миграций, затем поднимется web. Проверка отклика:
curl localhost:3000.Создать администратора
Первый вход - мастер создания администратора. Регистрация по умолчанию закрыта (только по инвайту).
Что измерили после запуска
Цифры со свежей установки в простое. Только реальные замеры с живого стенда.
| web (Next.js) в простое | ~766 MiB |
| postgres (pgvector) | ~101 MiB |
| cube (аналитика) | ~84 MiB |
| hub | ~7 MiB |
| redis / valkey | ~4 MiB |
| Итого 5 контейнеров | ~963 MiB |
| Весь хост занят | ~1,6 GiB |
| Образы на диске | ~5,21 GB |
| Отклик web (127.0.0.1:3000) | ~14 мс |
| Отклик снаружи через Caddy + TLS | ~0,32 с |
Главное: самый прожорливый - веб-контейнер (~766 MiB), на него приходится большая часть RAM. Cube и Postgres добавляют еще ~185 MiB, а hub и valkey почти не заметны. Стек рабочий, но именно из-за web тариф CPU4-RAM8-DISK100 не подходит.
Проверено на версии 5.2.1, июль 2026. На новых версиях результаты могут отличаться.
Где может сломаться
Реальные грабли актуальной ветки v5.
Тяжесть стека. Если опираться на старый официальный блог с web + postgres, читатель недосчитается половины сервисов. В v5 реально работают 5 контейнеров плюс миграции - под них нужно ~1 GiB RAM и ~5 GB под образы.
Почта требует SMTP. Инвайты, сброс пароля и верификация email не работают без корректных SMTP-настроек. Без них ставят EMAIL_VERIFICATION_DISABLED=1 и PASSWORD_RESET_DISABLED=1, иначе пользователь застрянет на подтверждении.
Автомиграции при апгрейде. Миграции БД применяются автоматически на старте контейнера. Официальный гайд прямо требует бэкап тома postgres перед обновлением - иначе откатиться будет нечем.
Причина. Файловые загрузки в v5 не хранятся локально - им нужно S3-совместимое хранилище. Даже с настроенным CORS запрос отдает 204, файл появляется в бакете, но приложение показывает эту ошибку и не отображает картинку (issue #7086).
Решение. Для прода подключить внешний S3, а не локальные volume-моунты. Локальное хранилище ненадежно и официально не рекомендовано.
Причина. Rate limiting на странице логина/регистрации срабатывает сразу после квик-старта при активных попытках входа (issue #1533).
Решение. Выдержать паузу; лимиты живут в Valkey. Для отладки можно ослабить rate limit через env, но на проде это оставлять не стоит.
Безопасность и обновления
Регистрация по умолчанию закрыта, новые пользователи заводятся по инвайту - это правильный дефолт для платформы с ПДн респондентов. Апдейты берутся из GitHub-репозитория и релизов; перед обновлением всегда снимайте бэкап тома postgres, так как миграции применяются автоматически.
Обновление стека:
docker compose pull && docker compose up -d
Бэкап основной БД (опросы, ответы, контакты):
docker exec formbricks-postgres pg_dump -U postgres formbricks > backup.sql
Что закрыть перед продом: TLS (у нас Caddy с Let's Encrypt), корректные секреты (ENCRYPTION_KEY, NEXTAUTH_SECRET, CRON_SECRET, HUB_API_KEY, CUBEJS_API_SECRET), внешний S3 под файлы, рабочий SMTP, бэкап тома postgres и закрытые наружу внутренние порты (Postgres, Cube, Hub слушают только внутри). Часть корпоративных фич безопасности - SSO OIDC/SAML, 2FA, audit log, reCAPTCHA - живет в Enterprise-лицензии.
Связь с другими стеками
- Обратный прокси - Caddy (у нас) или Nginx Proxy Manager для TLS и одного домена наружу.
- S3-хранилище - обязательно для файловых загрузок: MinIO у себя или внешний S3-совместимый бакет.
- SMTP - любой почтовый шлюз или сервис рассылок для инвайтов, сброса пароля и email-followups.
- Интеграции данных - Notion, Google Sheets, Slack, Airtable через встроенные коннекторы и вебхуки.
- Бэкапы - pg_dump тома postgres + выгрузка в S3 по расписанию.
Когда это НЕ ваш выбор
Нужна одна форма на лендинг
Ради разовой формы обратной связи поднимать 5 контейнеров, S3 и SMTP - перебор. Легкий форм-конструктор или встраиваемая библиотека решат задачу дешевле.
Жесткий бюджет по железу
v5 стабильно занимает ~1 GiB RAM под контейнеры и ~5 GB под образы. тариф CPU4-RAM8-DISK100 это не потянет - если нет старшего сервера, стек будет упираться в память.
SSO, 2FA и роли обязательны и бесплатно
OIDC/SAML SSO, двухфакторная аутентификация, роли и команды, audit log - это платный Enterprise-ключ. Если корпоративная авторизация нужна без затрат, community-редакции не хватит.
Академические опросы с квотами и экспортом в SPSS/R
Для тяжелой исследовательской логики, квот и научного экспорта зрелее LimeSurvey. Formbricks сильнее в product-опросах (NPS/CSAT/in-app), а не в академической методологии.
Частые вопросы
Хватит ли тарифа CPU4-RAM8-DISK100?
Нет. В простое 5 контейнеров занимают ~963 MiB, а весь хост - около 1,6 GiB. Только веб-контейнер съедает ~766 MiB. Берите старший тариф CPU4-RAM8-DISK100.
Сколько места на диске нужно?
Образы занимают ~5,21 GB (5 штук), под весь стек уходит ~7,4 GiB. Диск на 100 GB закрывает это с запасом под данные.
Работают ли загрузки файлов из коробки?
Нет, для файловых загрузок нужен внешний S3-совместимый бакет. Локальные volume-моунты официально не рекомендованы и дают ошибку «some files were not uploaded».
Нужен ли SMTP?
Для инвайтов, сброса пароля и верификации email - да. Без SMTP их отключают через EMAIL_VERIFICATION_DISABLED и PASSWORD_RESET_DISABLED, иначе пользователи застрянут на подтверждении.
Как обновлять и не потерять данные?
docker compose pull и up -d. Миграции БД применяются автоматически на старте, поэтому перед обновлением обязательно снимайте бэкап тома postgres.
Что бесплатно, а что платно?
Ядро под AGPLv3 - опросы, шаблоны, логика, API/SDK, вебхуки, интеграции. Платный Enterprise-ключ разблокирует SSO OIDC/SAML, 2FA, роли и команды, audit log, снятие плашки Powered by и reCAPTCHA.
Можно ли ставить без Docker?
Официальный путь развертывания - Docker Compose с полным набором сервисов. Собирать стек из 5 компонентов вручную без Docker не рекомендуется.
Итог
Formbricks 5.2.1 - зрелая self-hosted платформа опросов уровня experience management: 40+ шаблонов, NPS/CSAT/CES, условная логика, публичные ссылки и аналитика ответов через Cube, с данными респондентов на своем сервере. Плата за это - тяжесть: v5 это 5 рабочих контейнеров ~963 MiB RAM и ~5,21 GB образов, файловые загрузки требуют S3, а почта - SMTP. тариф не тянет, берите старший CPU4-RAM8-DISK100. Для команд, которым нужны продуктовые опросы под контролем, это разумный выбор; для одной разовой формы - избыточно.
Этот стек у нас запущен на тарифе CPU4-RAM8-DISK100. Нашли баг в гайде - напишите, поправим в течение дня.