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

Отримати VPS arrow_forward
eco Початковий Туторіал

Встановлення Formbricks на VPS:

calendar_month Aug 13, 2026 schedule 23 хв. читання visibility 25 переглядів
Установка 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 перед оновленням, оскільки процес може змінюватися між мажорними версіями.

Вирішення проблем + 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, або переходом на виділений сервер.

Чи був цей гайд корисним?

Ваш відгук допомагає нам покращувати гайди.

Share this post:

Надішліть гайд тому, кому він може стати в пригоді.

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.