bolt Valebyte VPS от $4/мес — NVMe, запуск за 60 секунд.

Получить VPS arrow_forward
eco Начальный Туториал

Установка Formbricks на VPS: Свой конструктор форм и опросов

calendar_month Aug 13, 2026 schedule 23 мин. чтения visibility 22 просмотров
Установка Formbricks на VPS: Свой конструктор форм и опросов
info

Нужен сервер для этого гайда? Мы предлагаем выделенные серверы и VPS в 50+ странах с мгновенной настройкой.

Нужен сервер для этого гайда?

Разверните VPS или выделенный сервер за минуты.

Установка Formbricks на VPS: Свой конструктор форм и опросов

TL;DR

В этом подробном техническом руководстве мы пошагово настроим Formbricks — мощный open-source конструктор форм и опросов — на вашем собственном виртуальном или выделенном сервере (VPS/dedicated). Вы узнаете, как подготовить сервер, установить все необходимые компоненты через Docker Compose, настроить домен и HTTPS с помощью Caddy, а также обеспечить регулярное резервное копирование и обслуживание. В результате вы получите полностью контролируемую, приватную и масштабируемую платформу для сбора данных, независимую от сторонних облачных сервисов.

  • Formbricks будет установлен на вашем VPS/dedicated сервере с использованием Docker Compose для максимальной изоляции и простоты управления.
  • Мы настроим безопасный доступ через HTTPS с автоматической выдачей и обновлением сертификатов Let's Encrypt благодаря Caddy.
  • Будут рассмотрены базовые шаги по укреплению безопасности сервера, включая настройку фаервола и SSH-ключей.
  • Вы получите рекомендации по выбору подходящей конфигурации VPS и узнаете, когда стоит рассмотреть выделенный сервер.
  • Мы разработаем стратегию резервного копирования и восстановления данных, а также дадим советы по обслуживанию системы.

Что мы настраиваем и зачем

Схема: Что мы настраиваем и зачем
Схема: Что мы настраиваем и зачем

Мы будем устанавливать Formbricks — это современный open-source инструмент для создания форм, опросов и сбора обратной связи. Он позволяет создавать интерактивные опросы, встраивать их на сайты, отправлять по электронной почте и анализировать ответы. Главная особенность Formbricks, которую мы будем использовать, — это возможность самостоятельного хостинга (self-hosted) на вашем собственном сервере.

В итоге вы получите полностью функциональную платформу для создания и управления опросами, которая будет работать на вашем VPS. Это даст вам полный контроль над данными, их безопасностью и конфиденциальностью, что особенно важно в условиях растущих требований к приватности и защите информации.

Зачем это нужно? Представьте, что вы разработчик, стартапер или владелец малого бизнеса. Вам регулярно требуется собирать обратную связь от пользователей, проводить маркетинговые исследования или просто создавать контактные формы. Многие облачные сервисы (Google Forms, Typeform, SurveyMonkey) удобны, но они размещают ваши данные на своих серверах, часто в юрисдикциях, которые вам не подходят, и с ограничениями по функционалу или количеству ответов на бесплатных тарифах. Кроме того, их стоимость может быстро расти с увеличением использования.

Self-hosted Formbricks на VPS предоставляет следующие преимущества:

  • Полный контроль над данными: Все данные хранятся на вашем сервере, и только вы решаете, как ими управлять. Это критично для соответствия GDPR, HIPAA и другим регуляциям.
  • Экономия средств: После первоначальной настройки вы платите только за VPS, что часто значительно дешевле, чем подписки на коммерческие сервисы, особенно при больших объемах использования.
  • Гибкость и кастомизация: Вы можете изменять исходный код Formbricks, интегрировать его с другими своими системами, настраивать брендинг без ограничений.
  • Производительность: Вы можете оптимизировать сервер под свои нужды, обеспечивая высокую скорость работы и доступность сервиса.
  • Независимость: Вы не зависите от изменений политики, цен или доступности сторонних сервисов.

Конечно, self-hosted решение требует определенных технических знаний и времени на настройку и обслуживание. Но это руководство призвано максимально упростить этот процесс, предоставив вам все необходимые шаги и команды.

Какой VPS-конфиг нужен под эту задачу

Схема: Какой VPS-конфиг нужен под эту задачу
Схема: Какой VPS-конфиг нужен под эту задачу

Formbricks, будучи современным веб-приложением, использует Docker Compose для оркестрации нескольких сервисов: Node.js бэкенд, Next.js фронтенд, PostgreSQL для базы данных и Redis для кеширования. Это означает, что для его стабильной работы требуется не самая минимальная конфигурация VPS.

Минимальные требования (для небольшого проекта, до 1000 ответов в месяц):

  • Процессор (CPU): 2 ядра (vCPU). Formbricks может быть довольно ресурсоемким во время сборки и при обработке большого количества запросов.
  • Оперативная память (RAM): 4 GB. Это критично. PostgreSQL, Redis, Node.js-процессы и сам Docker потребляют значительную часть памяти. Меньше 4 GB может привести к замедлениям или сбоям.
  • Дисковое пространство: 50 GB NVMe SSD. SSD значительно ускоряет работу базы данных и Docker-образов. NVMe предпочтительнее для лучшей производительности. 50 GB — это хороший старт для ОС, Docker-образов и данных Formbricks.
  • Сеть: 100 Mbps или 1 Gbps порт. Для большинства целей 100 Mbps будет достаточно, но 1 Gbps всегда лучше для быстрой загрузки.

Рекомендуемый VPS-план (для средних проектов, до 10 000 ответов в месяц и нескольких активных пользователей):

  • Процессор (CPU): 4 ядра (vCPU).
  • Оперативная память (RAM): 8 GB.
  • Дисковое пространство: 100-150 GB NVMe SSD.
  • Сеть: 1 Gbps порт.

Для таких характеристик можно рассмотреть VPS с указанными характеристиками. Важно выбирать провайдера, предлагающего надежные SSD-накопители и стабильную сеть.

Когда нужен dedicated сервер, а не VPS:

Выделенный сервер становится целесообразным, если:

  • Очень высокая нагрузка: Вы ожидаете десятки или сотни тысяч ответов в месяц, тысячи активных пользователей одновременно.
  • Строгие требования к производительности: Вам нужна гарантированная производительность без "соседского шума" (когда другие VPS на том же физическом сервере влияют на вашу работу).
  • Специфические требования к железу: Вам нужны специальные CPU, GPU, очень большие объемы RAM (32 GB+) или дискового пространства (несколько ТБ), которые сложно получить на VPS.
  • Полный контроль над оборудованием: Для особых требований безопасности или аудита, когда нужен доступ к физическому оборудованию.

В большинстве случаев для Formbricks, особенно на старте, VPS с 4-8 GB RAM и 2-4 vCPU будет более чем достаточно. Если же вы столкнетесь с необходимостью выделенного сервера, рассмотрите подходящий dedicated.

Локация: на что влияет

Выбор локации VPS имеет несколько ключевых аспектов:

  • Задержка (Latency): Чем ближе сервер к вашей целевой аудитории (пользователям, которые будут заполнять формы), тем ниже будет задержка и быстрее загрузка форм.
  • Законодательство: Если вы собираете персональные данные, убедитесь, что локация сервера соответствует требованиям законодательства вашей страны или стран, где находятся ваши пользователи (например, GDPR в Европе).
  • Стоимость: Цены на VPS могут варьироваться в зависимости от локации.

Рекомендуется выбирать локацию, которая находится географически близко к большинству ваших пользователей, чтобы обеспечить наилучший пользовательский опыт.

Подготовка сервера

Схема: Подготовка сервера
Схема: Подготовка сервера

Перед установкой Formbricks необходимо выполнить базовую настройку и укрепление безопасности вашего VPS. Мы будем использовать дистрибутив Ubuntu 24.04 LTS (Noble Numbat), который будет актуален и поддерживаться в 2026 году. Если у вас другой дистрибутив, команды могут немного отличаться.

1. Подключение по SSH

Подключитесь к вашему новому VPS как пользователь root, используя IP-адрес, предоставленный вашим хостинг-провайдером:


ssh root@ВАШ_IP_АДРЕС

При первом подключении система может спросить, доверяете ли вы хосту. Введите yes.

2. Обновление системы

Всегда начинайте с обновления пакетного менеджера и установленных пакетов до последних версий. Это обеспечит наличие всех актуальных исправлений безопасности и стабильности.


sudo apt update && sudo apt upgrade -y

Эта команда обновляет список доступных пакетов и затем устанавливает все обновления без запроса подтверждения.

3. Создание нового пользователя с правами sudo

Работать под пользователем root небезопасно. Создадим нового пользователя и предоставим ему права на выполнение команд с sudo.


adduser formbricksuser # Создаем нового пользователя с именем formbricksuser
usermod -aG sudo formbricksuser # Добавляем пользователя в группу sudo, чтобы он мог выполнять команды от имени root

В процессе создания пользователя вам будет предложено задать пароль и ввести дополнительную информацию (которую можно пропустить, нажимая Enter).

4. Настройка SSH-ключей для нового пользователя

Для повышения безопасности рекомендуется использовать SSH-ключи вместо паролей для входа. Сначала сгенерируйте SSH-ключ на вашей локальной машине, если у вас его еще нет:


ssh-keygen -t ed25519 -C "[email protected]" # На вашей локальной машине

Затем скопируйте публичный ключ на сервер для нового пользователя. Замените formbricksuser и ВАШ_IP_АДРЕС на свои значения.


ssh-copy-id formbricksuser@ВАШ_IP_АДРЕС # На вашей локальной машине

Если ssh-copy-id недоступен или не работает, вы можете скопировать ключ вручную. Сначала войдите на сервер как formbricksuser (пока еще по паролю):


ssh formbricksuser@ВАШ_IP_АДРЕС # Подключаемся как новый пользователь
mkdir -p ~/.ssh # Создаем директорию .ssh, если ее нет
chmod 700 ~/.ssh # Устанавливаем правильные права для директории
nano ~/.ssh/authorized_keys # Открываем файл для редактирования

Вставьте содержимое вашего публичного ключа (обычно из файла ~/.ssh/id_ed25519.pub на вашей локальной машине) в открывшийся файл authorized_keys и сохраните (Ctrl+X, Y, Enter). Затем установите правильные права для файла:


chmod 600 ~/.ssh/authorized_keys
exit # Выходим с сервера

5. Отключение входа по паролю для root и по паролю вообще (опционально, но рекомендуется)

После того как вы убедились, что можете войти под новым пользователем по SSH-ключу, отключите вход по паролю для root и, желательно, полностью отключите вход по паролю для всех пользователей, разрешив только SSH-ключи. Это значительно повышает безопасность.


sudo nano /etc/ssh/sshd_config # Открываем конфигурационный файл SSH-сервера

Найдите и измените следующие строки (или добавьте, если их нет):


# Запретить вход для root по паролю
PermitRootLogin prohibit-password

# Отключить вход по паролю для всех пользователей
PasswordAuthentication no

# Включить использование SSH-ключей
PubkeyAuthentication yes

Сохраните изменения и перезапустите SSH-сервер:


sudo systemctl restart sshd

ВАЖНО: Перед тем как выходить из текущей SSH-сессии, откройте новое окно терминала и попробуйте подключиться к серверу как formbricksuser, используя ваш SSH-ключ. Если вход успешен, значит, все настроено правильно, и вы можете безопасно закрыть сессию root.

6. Настройка фаервола (UFW)

Uncomplicated Firewall (UFW) — это простой в использовании фаервол для Linux. Настроим его для разрешения только необходимых портов.


sudo apt install ufw -y # Устанавливаем UFW, если он еще не установлен
sudo ufw allow OpenSSH # Разрешаем SSH (порт 22)
sudo ufw allow http # Разрешаем HTTP (порт 80)
sudo ufw allow https # Разрешаем HTTPS (порт 443)
sudo ufw enable # Включаем фаервол
sudo ufw status # Проверяем статус фаервола

Фаервол теперь будет разрешать входящие соединения только на порты 22 (SSH), 80 (HTTP) и 443 (HTTPS), блокируя все остальные по умолчанию.

7. Установка Fail2Ban

Fail2Ban помогает защититься от атак перебора паролей (brute-force) путем временной блокировки IP-адресов, с которых поступают многочисленные неудачные попытки входа.


sudo apt install fail2ban -y # Устанавливаем Fail2Ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local # Создаем локальную копию конфига для изменений
sudo nano /etc/fail2ban/jail.local # Открываем файл для редактирования

В файле jail.local убедитесь, что секция [sshd] активна (enabled = true) и, возможно, настройте bantime (время блокировки) и findtime (период, за который считаются неудачные попытки) по вашему усмотрению. По умолчанию настройки достаточно хороши для большинства случаев.


# Пример настройки в jail.local
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
maxretry = 3 # Максимальное количество неудачных попыток до блокировки
bantime = 1h # Время блокировки IP-адреса (1 час)

Сохраните изменения и перезапустите Fail2Ban:


sudo systemctl restart fail2ban
sudo systemctl enable fail2ban # Включаем автозапуск Fail2Ban при старте системы

Теперь ваш сервер готов к установке Formbricks с базовыми настройками безопасности.

Установка ПО — пошагово

Схема: Установка ПО — пошагово
Схема: Установка ПО — пошагово

Установка Formbricks будет производиться с использованием Docker и Docker Compose. Это позволяет легко развернуть все необходимые компоненты (базу данных, кэш, само приложение) в изолированных контейнерах, что упрощает управление и обновление.

1. Установка Docker Engine

Docker Engine — это основа для запуска контейнеров. Мы установим его из официального репозитория Docker.


# Обновляем пакетный менеджер и устанавливаем необходимые утилиты
sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release -y

# Добавляем официальный GPG ключ Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# Добавляем репозиторий Docker в APT источники
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Обновляем список пакетов с учетом нового репозитория
sudo apt update

# Устанавливаем Docker Engine, Docker CLI и containerd (актуальные версии на 2026 год)
sudo apt install docker-ce docker-ce-cli containerd.io -y

# Добавляем текущего пользователя в группу docker для выполнения команд без sudo
sudo usermod -aG docker $USER

# Перезагружаем группу для применения изменений (или просто переподключитесь по SSH)
newgrp docker

Проверяем, что Docker установлен корректно, запустив тестовый контейнер:


docker run hello-world

Если вы видите сообщение "Hello from Docker!", значит, установка прошла успешно.

2. Установка Docker Compose

Docker Compose позволяет определять и запускать многоконтейнерные Docker-приложения. Мы установим актуальную версию Docker Compose V2.


# Docker Compose V2 обычно устанавливается вместе с Docker Engine как плагин.
# Проверим его наличие:
docker compose version

# Если Docker Compose V2 не установлен, его можно установить отдельно:
sudo apt install docker-compose-plugin -y # Устанавливаем плагин Docker Compose

Убедитесь, что команда docker compose (с пробелом) работает, а не docker-compose (с дефисом), так как это указывает на V2.

3. Клонирование репозитория Formbricks

Formbricks предоставляет готовый Docker Compose файл для развертывания. Клонируем официальный репозиторий Formbricks, который содержит все необходимые файлы.


# Создаем директорию для Formbricks
mkdir ~/formbricks
cd ~/formbricks

# Клонируем репозиторий Formbricks (используем стабильную ветку или релиз, если указан)
# На 2026 год будем считать, что основной репозиторий содержит актуальный docker-compose
git clone https://github.com/formbricks/formbricks.git .

# Проверяем, что необходимые файлы, такие как docker-compose.yml, находятся в директории
ls -la docker-compose.yml

Эта команда клонирует содержимое репозитория Formbricks в текущую директорию ~/formbricks.

4. Настройка файла переменных окружения (.env)

Formbricks использует файл .env для хранения конфигурационных переменных, таких как настройки базы данных, секретные ключи, домен и SMTP-данные. Скопируйте шаблон и отредактируйте его.


cp .env.example .env
nano .env

В файле .env вам нужно будет настроить следующие переменные:

  • DATABASE_URL: Строка подключения к PostgreSQL. По умолчанию Docker Compose уже настроит PostgreSQL, и эта переменная будет выглядеть примерно так: postgresql://formbricks:formbricks@formbricks-database:5432/formbricks?schema=public. Измените пароль formbricks на что-то более безопасное.
  • REDIS_URL: Строка подключения к Redis. По умолчанию: redis://formbricks-redis:6379.
  • NEXTAUTH_SECRET: Очень важный секретный ключ. Сгенерируйте длинную случайную строку (например, с помощью openssl rand -base64 32).
  • WEBAPP_URL: URL, по которому будет доступен ваш Formbricks. Например, https://forms.yourdomain.com. Убедитесь, что у вас есть доменное имя и оно указывает на ваш VPS.
  • SENDER_EMAIL_ID: Адрес электронной почты, от которого будут отправляться системные письма (например, подтверждения).
  • SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD: Настройки для вашего SMTP-сервера, через который Formbricks будет отправлять письма. Если вы не планируете отправлять письма, можно оставить пустыми, но для полноценной работы (например, приглашения пользователей) они необходимы.
  • PRIMARY_APP_NAME: Название вашего инстанса Formbricks (например, "Мои Опросы").
  • NEXT_PUBLIC_FORMBRICKS_API_HOST: Должен совпадать с WEBAPP_URL.
  • SERVER_URL: Тоже должен совпадать с WEBAPP_URL.
  • TELEMETRY_DISABLED=1: Рекомендуется добавить эту строку, если вы не хотите отправлять анонимные данные об использовании разработчикам Formbricks.

Пример измененных строк в .env (сгенерируйте свои уникальные секреты!):


# ... другие переменные ...

DATABASE_URL="postgresql://formbricks_user_secure:YOUR_SECURE_DB_PASSWORD@formbricks-database:5432/formbricks_db?schema=public"
REDIS_URL="redis://formbricks-redis:6379"

# Сгенерируйте свой уникальный секрет: openssl rand -base64 32
NEXTAUTH_SECRET="your_very_long_and_secure_random_string_here_for_nextauth"

WEBAPP_URL="https://forms.example.com"
NEXT_PUBLIC_FORMBRICKS_API_HOST="https://forms.example.com"
SERVER_URL="https://forms.example.com"

SENDER_EMAIL_ID="[email protected]"
SMTP_HOST="smtp.mailgun.org" # Пример: ваш SMTP-провайдер
SMTP_PORT="587"
SMTP_USER="[email protected]"
SMTP_PASSWORD="YOUR_SMTP_PASSWORD"
SMTP_SECURE_ENABLED="true" # Если ваш SMTP поддерживает TLS

PRIMARY_APP_NAME="Мои Опросы"

TELEMETRY_DISABLED=1
# ... остальные переменные ...

Сохраните изменения в файле .env.

5. Запуск Formbricks с Docker Compose

После настройки .env можно запускать все сервисы Formbricks.


# Убедитесь, что вы находитесь в директории ~/formbricks
cd ~/formbricks

# Запускаем Formbricks в фоновом режиме
docker compose up -d

# Проверяем статус запущенных контейнеров
docker compose ps

Команда docker compose up -d загрузит необходимые Docker-образы, создаст контейнеры и запустит их в фоновом режиме. Это может занять некоторое время при первом запуске, так как Docker будет скачивать образы.

docker compose ps покажет список запущенных контейнеров и их статус. Убедитесь, что все контейнеры имеют статус Up.

6. Инициализация базы данных

После первого запуска контейнеров необходимо инициализировать базу данных Formbricks. Это делается через миграции.


# Выполняем миграции базы данных внутри контейнера app
docker compose exec app npx prisma migrate deploy

# Генерируем клиент Prisma
docker compose exec app npx prisma generate

Эти команды гарантируют, что структура базы данных Formbricks будет создана и обновлена до последней версии. После этого Formbricks готов к работе, но пока доступен только по IP-адресу без HTTPS.

Конфигурация Formbricks и домена

Схема: Конфигурация Formbricks и домена
Схема: Конфигурация Formbricks и домена

Теперь, когда Formbricks запущен, необходимо настроить доступ к нему через доменное имя и обеспечить безопасное HTTPS-соединение. Мы будем использовать Caddy как обратный прокси-сервер, который автоматически управляет SSL-сертификатами Let's Encrypt.

1. Настройка доменного имени

Прежде чем продолжить, убедитесь, что у вас есть доменное имя (например, forms.example.com) и что его A-запись в DNS указывает на IP-адрес вашего VPS. Это критически важно для работы Caddy и HTTPS.

Пример записи в DNS:

ТипИмя/ХостЗначение
AformsВАШ_IP_АДРЕС_VPS

Дайте DNS-записям некоторое время для распространения (обычно несколько минут, но может занять до нескольких часов).

2. Установка Caddy

Caddy — это мощный, но простой в настройке веб-сервер, который отлично подходит для обратного прокси и автоматической выдачи HTTPS-сертификатов.


# Устанавливаем необходимые пакеты
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https

# Добавляем ключ GPG Caddy
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg

# Добавляем репозиторий Caddy
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list

# Обновляем список пакетов и устанавливаем Caddy
sudo apt update
sudo apt install caddy -y

3. Настройка Caddyfile

Caddy использует файл конфигурации под названием Caddyfile. Мы настроим его для работы в качестве обратного прокси для Formbricks.


sudo nano /etc/caddy/Caddyfile

Удалите все содержимое файла и вставьте следующую конфигурацию, заменив forms.example.com на ваше доменное имя:


forms.example.com {
    # Сжимаем ответы для более быстрой загрузки
    encode gzip zstd

    # Настройки для автоматического HTTPS
    tls {
        dns cloudflare {env.CLOUDFLARE_API_TOKEN} # Если используете Cloudflare DNS
        # Или просто оставьте пустым для HTTP-01 challenge, если порт 80 открыт
    }

    # Обратный прокси к Formbricks (Docker Compose сервис 'app' слушает на порту 3000)
    reverse_proxy formbricks-app:3000 {
        # Добавляем заголовки для корректной работы WebSocket и прокси
        header_up Host {host}
        header_up X-Real-IP {remote_ip}
        header_up X-Forwarded-For {remote_ip}
        header_up X-Forwarded-Proto {scheme}
        header_up X-Forwarded-Ssl on
        header_up Upgrade {header.Upgrade}
        header_up Connection {header.Connection}
    }

    # Включить логирование (опционально, полезно для отладки)
    log {
        output file /var/log/caddy/formbricks_access.log
        format json
    }
}

Пояснения к Caddyfile:

  • forms.example.com: Указывает домен, для которого будет работать эта конфигурация. Caddy автоматически получит SSL-сертификат для него.
  • tls { dns cloudflare {env.CLOUDFLARE_API_TOKEN} }: Это опционально. Если ваш домен управляется через Cloudflare DNS, и вы хотите использовать DNS-01 challenge для выдачи сертификатов (полезно, если порт 80 заблокирован или вы хотите wildcard-сертификат), вам нужно создать API-токен Cloudflare и установить его как переменную окружения. Если вы просто открыли порты 80 и 443 на фаерволе, Caddy будет использовать HTTP-01 challenge, и эту строку можно удалить.
  • reverse_proxy formbricks-app:3000: Перенаправляет все входящие запросы на сервис app Formbricks внутри Docker Compose сети, который слушает на порту 3000. Важно использовать имя сервиса из docker-compose.yml (обычно app) для разрешения внутри Docker-сети.

Если вы решили использовать DNS challenge (например, с Cloudflare), вам нужно будет создать файл с переменными окружения для Caddy.


sudo mkdir -p /etc/caddy/conf.d # Создаем директорию для переменных
sudo nano /etc/caddy/conf.d/caddy.env

Добавьте ваш API-токен Cloudflare:


CLOUDFLARE_API_TOKEN="ВАШ_API_ТОКЕН_CLOUDFLARE"

Затем отредактируйте файл /etc/systemd/system/caddy.service (или создайте его, если нет) и добавьте строку EnvironmentFile=/etc/caddy/conf.d/caddy.env в секцию [Service].


# ...
[Service]
EnvironmentFile=/etc/caddy/conf.d/caddy.env
# ...

Сохраните Caddyfile. Затем проверьте синтаксис и перезагрузите Caddy:


sudo caddy validate # Проверяем синтаксис Caddyfile
sudo systemctl reload caddy # Перезагружаем Caddy для применения изменений

Caddy автоматически запросит и установит SSL-сертификат для вашего домена.

4. Проверка работоспособности

Откройте ваш домен (например, https://forms.example.com) в браузере. Вы должны увидеть страницу регистрации/входа Formbricks. Проверьте, что соединение защищено (значок замка в браузере).

Можно также проверить доступность с помощью curl с вашего VPS:


curl -I https://forms.example.com

Вы должны увидеть HTTP-заголовки, включая HTTP/2 200 OK, что указывает на успешное соединение.

Если возникли проблемы, проверьте логи Caddy:


sudo journalctl -u caddy --no-pager

И логи контейнеров Formbricks:


cd ~/formbricks
docker compose logs app
docker compose logs database

5. Регистрация первого пользователя

После успешной настройки домена и HTTPS, зайдите на ваш URL Formbricks. Вы увидите страницу приветствия, где сможете зарегистрировать первого пользователя и создать вашу организацию. Это будет администраторский аккаунт для вашего инстанса Formbricks.

Бэкапы и обслуживание

Схема: Бэкапы и обслуживание
Схема: Бэкапы и обслуживание

Резервное копирование — это критически важная часть эксплуатации любого сервиса. Formbricks хранит все свои данные в базе данных PostgreSQL, а также использует Redis для кеширования (данные Redis обычно не требуют бэкапа, так как могут быть пересозданы).

1. Что бэкапить

Вам необходимо регулярно бэкапить:

  • База данных PostgreSQL: Содержит все опросы, ответы, пользователей, настройки и метаданные Formbricks. Это самый важный компонент.
  • Конфигурационные файлы: Файл .env Formbricks, а также Caddyfile и любые кастомные настройки сервера.
  • Docker Compose файлы: docker-compose.yml и другие связанные файлы, чтобы можно было легко восстановить окружение.

2. Простой скрипт автобэкапа PostgreSQL

Создадим простой скрипт, который будет делать дамп базы данных и сохранять его. Для хранения мы будем использовать локальное хранилище, но настоятельно рекомендуется отправлять бэкапы во внешнее хранилище (S3-совместимое облачное хранилище, другой VPS, Google Drive и т.д.).


# Создаем директорию для бэкапов
sudo mkdir -p /var/backups/formbricks
sudo chown $USER:$USER /var/backups/formbricks # Даем права текущему пользователю

# Создаем скрипт бэкапа
nano ~/formbricks_backup.sh

Вставьте следующее содержимое в файл formbricks_backup.sh, заменив переменные на свои актуальные значения из .env:


#!/bin/bash

# --- Конфигурация ---
BACKUP_DIR="/var/backups/formbricks"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="formbricks_db" # Название вашей БД из .env
DB_USER="formbricks_user_secure" # Пользователь БД из .env
DB_PASSWORD="YOUR_SECURE_DB_PASSWORD" # Пароль БД из .env
DB_HOST="formbricks-database" # Имя хоста БД внутри Docker-сети
DB_PORT="5432"

# --- Выполнение бэкапа БД ---
echo "[$DATE] Starting Formbricks PostgreSQL database backup..."
docker compose exec -T database pg_dump -U "$DB_USER" -d "$DB_NAME" -h "$DB_HOST" -p "$DB_PORT" > "$BACKUP_DIR/formbricks_db_backup_$DATE.sql"

if [ $? -eq 0 ]; then
    echo "[$DATE] PostgreSQL database backup completed successfully: $BACKUP_DIR/formbricks_db_backup_$DATE.sql"
else
    echo "[$DATE] ERROR: PostgreSQL database backup failed!"
    exit 1
fi

# --- Копирование конфигурационных файлов ---
echo "[$DATE] Copying configuration files..."
cp ~/formbricks/.env "$BACKUP_DIR/formbricks_env_$DATE.bak"
cp /etc/caddy/Caddyfile "$BACKUP_DIR/caddyfile_$DATE.bak"
cp ~/formbricks/docker-compose.yml "$BACKUP_DIR/docker_compose_$DATE.bak"

echo "[$DATE] Configuration files copied."

# --- Очистка старых бэкапов (оставляем последние 7 дней) ---
echo "[$DATE] Cleaning up old backups..."
find "$BACKUP_DIR" -type f -name "formbricks_db_backup_.sql" -mtime +7 -delete
find "$BACKUP_DIR" -type f -name "formbricks_env_.bak" -mtime +7 -delete
find "$BACKUP_DIR" -type f -name "caddyfile_.bak" -mtime +7 -delete
find "$BACKUP_DIR" -type f -name "docker_compose_.bak" -mtime +7 -delete

echo "[$DATE] Old backups cleaned up."
echo "[$DATE] Backup script finished."

Сделайте скрипт исполняемым:


chmod +x ~/formbricks_backup.sh

Проверьте работу скрипта, запустив его вручную:


~/formbricks_backup.sh
ls -la /var/backups/formbricks/

3. Автоматизация бэкапов с Cron

Добавим скрипт в планировщик Cron для ежедневного выполнения (например, в 3:00 ночи).


crontab -e

Добавьте следующую строку в конец файла (если это первый раз, выберите редактор, например nano):


0 3   * /home/formbricksuser/formbricks_backup.sh >> /var/log/formbricks_backup.log 2>&1

Эта строка будет запускать скрипт каждый день в 3 часа ночи и перенаправлять вывод в лог-файл /var/log/formbricks_backup.log.

4. Куда складывать бэкапы (внешнее хранилище)

Хранить бэкапы на том же сервере, что и основной сервис, крайне рискованно. Если сервер выйдет из строя или будет скомпрометирован, вы потеряете и сервис, и бэкапы. Настоятельно рекомендуется настроить автоматическую отправку бэкапов во внешнее хранилище:

  • S3-совместимое облачное хранилище: AWS S3, Backblaze B2, DigitalOcean Spaces и т.п. Используйте утилиты типа rclone или s3cmd для синхронизации.
  • Отдельный VPS: Настройте rsync или scp для копирования бэкапов на другой VPS.
  • Шифрованные бэкапы: Рассмотрите использование restic или borgbackup для создания шифрованных, дедуплицированных бэкапов, которые можно хранить где угодно.

Например, для rclone, после его установки и настройки, вы можете добавить в скрипт бэкапа команду для синхронизации:


# Добавить в скрипт formbricks_backup.sh после очистки старых бэкапов
echo "[$DATE] Syncing backups to remote storage..."
rclone sync "$BACKUP_DIR" "your_rclone_remote_name:formbricks-backups" --progress
if [ $? -eq 0 ]; then
    echo "[$DATE] Backups synced to remote storage successfully."
else
    echo "[$DATE] ERROR: Failed to sync backups to remote storage!"
fi

5. Обновления: rolling vs maintenance window

Formbricks и его компоненты регулярно обновляются. Стратегия обновления зависит от вашей терпимости к простоям:

  • Rolling updates (непрерывные обновления): Применяются к отдельным компонентам без полного останова сервиса. В контексте Docker Compose это может означать обновление отдельных контейнеров без перестройки всего стека. Formbricks обычно требует останова всего стека для применения миграций и обновления кода.
  • Maintenance window (окно обслуживания): Предпочтительный подход для Formbricks. Запланируйте время, когда трафик наименьший, и выполните обновление.

Процесс обновления Formbricks:


cd ~/formbricks

# 1. Останавливаем сервис Formbricks
docker compose down

# 2. Обновляем исходный код Formbricks
git pull origin main # Или используйте конкретную ветку/тег релиза

# 3. Пересобираем Docker-образы и запускаем сервисы
docker compose build
docker compose up -d

# 4. Выполняем миграции базы данных (если были изменения)
docker compose exec app npx prisma migrate deploy
docker compose exec app npx prisma generate

# 5. Очищаем кэш Formbricks (если применимо, обычно не требуется явно)
# docker compose exec app npx formbricks-cli cache clear # Пример, если есть такая команда

echo "Formbricks updated successfully!"

Всегда проверяйте официальную документацию Formbricks перед обновлением, так как процесс может меняться между мажорными версиями.

Troubleshooting + FAQ

Какой VPS-конфиг минимально подойдёт?

Минимально рекомендуемый конфиг для Formbricks — это 2 ядра CPU, 4 GB RAM и 50 GB NVMe SSD. Однако для стабильной работы и обработки умеренного количества опросов, особенно если вы планируете активно использовать Formbricks, 4 ядра CPU, 8 GB RAM и 100 GB NVMe SSD будут гораздо более надежным выбором. Меньший объем RAM (например, 2 GB) почти гарантированно приведет к проблемам с производительностью и стабильностью из-за требований PostgreSQL, Redis и Node.js.

Что выбрать — VPS или dedicated для этой задачи?

Для большинства пользователей, начинающих с Formbricks, VPS является оптимальным выбором. Он предлагает достаточную производительность, гибкость и экономичность. Выделенный сервер нужен только при очень высокой нагрузке (десятки тысяч ответов в час, сотни тысяч в месяц), когда требуется максимальная и гарантированная производительность, или если у вас есть специфические требования к оборудованию, которые не могут быть удовлетворены на VPS. Начните с VPS и рассмотрите переход на dedicated только при явной необходимости масштабирования.

docker compose up -d не работает или контейнеры не запускаются. Что делать?

Сначала проверьте логи контейнеров, чтобы понять причину сбоя. Перейдите в директорию Formbricks (cd ~/formbricks) и выполните:


docker compose ps -a # Показать все контейнеры, включая остановленные
docker compose logs # Показать логи всех сервисов
docker compose logs app # Показать логи конкретного сервиса (например, 'app')

Типичные проблемы: нехватка памяти (проверьте docker stats), неправильные переменные в .env (особенно DATABASE_URL, NEXTAUTH_SECRET, WEBAPP_URL), конфликты портов, поврежденные образы (попробуйте docker compose pull и docker compose build --no-cache).

HTTPS не работает или Caddy не получает сертификат.

Убедитесь, что ваш домен (например, forms.example.com) правильно настроен в DNS и указывает на IP-адрес вашего VPS. Проверьте фаервол (UFW): порты 80 (HTTP) и 443 (HTTPS) должны быть открыты (sudo ufw status). Проверьте синтаксис Caddyfile (sudo caddy validate) и логи Caddy (sudo journalctl -u caddy --no-pager) на наличие ошибок, связанных с ACME (Let's Encrypt).

Formbricks не отправляет электронные письма.

Проверьте настройки SMTP в вашем файле .env. Убедитесь, что SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD и SENDER_EMAIL_ID указаны корректно и соответствуют вашему SMTP-провайдеру. Также проверьте, открыт ли порт SMTP на фаерволе вашего VPS (обычно 587 или 465). Проверьте логи контейнера Formbricks app на наличие ошибок, связанных с отправкой почты.

Ошибка подключения к базе данных.

Убедитесь, что контейнер formbricks-database запущен и работает (docker compose ps). Проверьте DATABASE_URL в файле .env на опечатки в имени пользователя, пароле, имени базы данных или хосте. Убедитесь, что имя хоста formbricks-database правильно разрешается внутри Docker-сети. Иногда помогает перезапуск всего стека docker compose restart.

Formbricks работает медленно.

Проверьте использование ресурсов сервера: top, htop, free -h. Если RAM или CPU постоянно загружены на 90%+, вам, вероятно, потребуется обновить VPS до более мощного плана. Убедитесь, что вы используете SSD-диски, а не HDD. Проверьте логи Formbricks на наличие повторяющихся ошибок, которые могут вызывать избыточную нагрузку. Также рассмотрите оптимизацию запросов к Formbricks, если у вас очень большое количество данных или активных пользователей.

Выводы и следующие шаги

Схема: Выводы и следующие шаги
Схема: Выводы и следующие шаги

Поздравляем! Вы успешно развернули и настроили свой собственный инстанс Formbricks на VPS, получив полный контроль над данными и функциональностью. Вы освоили ключевые аспекты работы с Docker Compose, настройки веб-сервера Caddy для HTTPS и организации базового резервного копирования. Эта установка обеспечивает надежную и приватную платформу для сбора обратной связи, опросов и форм, полностью соответствующую вашим требованиям.

Куда двигаться дальше?

  • Настройте уведомления: Интегрируйте Formbricks с вашими системами уведомлений (Slack, Email, Webhooks), чтобы оперативно получать информацию о новых ответах.
  • Мониторинг ресурсов: Установите систему мониторинга (например, Prometheus + Grafana или Netdata) для отслеживания загрузки CPU, RAM, диска и сети вашего VPS, а также состояния контейнеров Formbricks.
  • Дальнейшая оптимизация: В зависимости от нагрузки, вы можете рассмотреть оптимизацию конфигурации PostgreSQL или Redis, а также тонкую настройку Caddy для повышения производительности и безопасности.
  • Масштабирование: Если ваш проект значительно вырастет, изучите возможности масштабирования Formbricks, возможно, с использованием более продвинутых оркестраторов, таких как Kubernetes, или переходом на выделенный сервер.

Был ли этот гайд полезен?

Ваш отзыв помогает нам улучшать гайды.

Поделиться записью:

Отправьте гайд тому, кому он может пригодиться.

Telegram VKVK WhatsApp Facebook LinkedIn XX

установка formbricks на vps: свой конструктор форм и опросов
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.