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

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

Встановлення Self-hosted Sentry

calendar_month Aug 02, 2026 schedule 24 хв. читання visibility 15 переглядів
Установка Self-hosted Sentry на VPS: Docker, PostgreSQL и Redis для отслеживания ошибок
info

Потрібен сервер для цього гайду? Ми пропонуємо виділені сервери та VPS у 50+ країнах з миттєвим налаштуванням.

Потрібен сервер для цього гайду?

Розгорніть VPS або виділений сервер за хвилини.

Встановлення Self-hosted Sentry на VPS: Docker, PostgreSQL та Redis для відстеження помилок

TL;DR

У цьому докладному посібнику ми налаштуємо власну інсталяцію Sentry на віртуальному приватному сервері (VPS) з використанням Docker та Docker Compose. Sentry — це потужна платформа для моніторингу помилок та продуктивності в реальному часі, яка дозволяє розробникам швидко виявляти, усувати та запобігати збоям у своїх застосунках. Ми розгорнемо Sentry з його ключовими компонентами — PostgreSQL для бази даних та Redis для кешування та черг, забезпечуючи повний контроль над даними та інфраструктурою.

  • Ви дізнаєтеся, як вибрати відповідний VPS-конфіг для вашої інсталяції Sentry.
  • Ми покроково підготуємо сервер: налаштуємо безпеку, встановимо Docker та Docker Compose.
  • Буде розгорнуто повну платформу Sentry з PostgreSQL та Redis, керовану Docker Compose.
  • Ви освоїте базову конфігурацію Sentry, включно з налаштуванням домену та HTTPS за допомогою Caddy.
  • Ми розглянемо стратегії резервного копіювання та обслуговування для забезпечення стабільної роботи Sentry.
  • Наприкінці ви знайдете відповіді на поширені запитання та поради щодо усунення несправностей.

Що ми налаштовуємо і навіщо

Схема: Что мы настраиваем и зачем
Схема: Що ми налаштовуємо і навіщо

У сучасному світі розробки програмного забезпечення стабільність та продуктивність застосунків відіграють ключову роль. Помилки неминучі, але швидкість їх виявлення та усунення безпосередньо впливає на користувацький досвід та репутацію продукту. Тут на допомогу приходить Sentry – платформа для моніторингу помилок та продуктивності в реальному часі. Sentry автоматично збирає інформацію про збої, винятки та проблеми продуктивності з ваших застосунків, надаючи розробникам докладні трасування стека, контекст середовища, дані про користувачів та багато іншого.

Що отримає читач у підсумку: Після завершення цього посібника ви матимете повністю функціонуючу, саморозміщену (self-hosted) інсталяцію Sentry на вашому VPS. Це дозволить вам централізовано відстежувати помилки та проблеми продуктивності для всіх ваших проєктів, чи то вебзастосунки, мобільні застосунки, бекенд-сервіси або навіть десктопні програми. Ви отримаєте повний контроль над своїми даними та зможете адаптувати Sentry під свої специфічні потреби, не прив'язуючись до сторонніх хмарних рішень.

Які альтернативи є (cloud-managed vs self-hosted): На ринку існує кілька рішень для моніторингу помилок, включно з такими хмарними сервісами, як Rollbar, Bugsnag, Datadog і, звичайно ж, хмарна версія самого Sentry. Ці сервіси пропонують зручність "під ключ": вам не потрібно турбуватися про інфраструктуру, масштабування або обслуговування. Однак, self-hosted Sentry на VPS має свої незаперечні переваги:

  • Повний контроль над даними: Усі ваші дані про помилки зберігаються на вашому сервері, що критично важливо для проєктів з високими вимогами до конфіденційності або регулювання (GDPR, HIPAA тощо).
  • Економія витрат у довгостроковій перспективі: Для проєктів з великим обсягом подій хмарні сервіси можуть стати дуже дорогими. Self-hosted Sentry часто виявляється більш економічним вибором, особливо якщо у вас вже є VPS.
  • Кастомізація: Ви можете змінювати конфігурацію Sentry, інтегрувати його з внутрішніми системами та адаптувати під унікальні вимоги вашої команди.
  • Незалежність від сторонніх провайдерів: Ви не залежите від доступності або політики ціноутворення стороннього сервісу.

Вибір self-hosted Sentry на VPS ідеально підходить для розробників, стартапів та команд, які цінують контроль, конфіденційність та хочуть оптимізувати витрати на інфраструктуру, при цьому володіючи достатніми технічними знаннями для керування власним сервером.

Який VPS-конфіг потрібен для цього завдання

Схема: Какой VPS-конфиг нужен под эту задачу
Схема: Який VPS-конфіг потрібен для цього завдання

Sentry, особливо в self-hosted конфігурації, є досить ресурсоємним застосунком, оскільки включає в себе безліч компонентів: базу даних PostgreSQL, брокер повідомлень Redis, а також ClickHouse, Kafka та Zookeeper для обробки та зберігання великих обсягів подій. Вибір правильного VPS-конфігу критичний для стабільної та швидкої роботи.

Мінімальні вимоги (для невеликих проєктів, до 1000 подій на хвилину)

  • CPU: 4 ядра. Sentry активно використовує процесор для обробки подій та виконання фонових завдань.
  • RAM: 8 ГБ. Це абсолютний мінімум, рекомендується 16 ГБ для стабільної роботи. PostgreSQL, Redis та інші компоненти Sentry споживають значний обсяг оперативної пам'яті.
  • Диск: 100-200 ГБ SSD. SSD-накопичувачі обов'язкові через високу інтенсивність операцій введення-виведення, особливо для бази даних та ClickHouse. Обсяг диска залежить від очікуваного обсягу даних про помилки та терміну їх зберігання.
  • Мережа: 100 Мбіт/с або 1 Гбіт/с. Для передачі даних між компонентами Sentry та для доступу до нього ззовні.

Рекомендований VPS-план (для середніх проєктів, до 5000 подій на хвилину)

Для більш серйозних завдань, команд розробників або застосунків з помірним навантаженням на Sentry, оптимальним буде наступний конфіг:

  • CPU: 6-8 ядер.
  • RAM: 16-32 ГБ.
  • Диск: 300-500 ГБ NVMe SSD (для максимальної продуктивності).
  • Мережа: 1 Гбіт/с.

Для таких характеристик можна розглянути VPS із зазначеними характеристиками, який пропонує оптимальне співвідношення ціна/продуктивність для стабільного розгортання Sentry.

Коли потрібен dedicated, а не VPS

Якщо ви плануєте використовувати Sentry для дуже великих проєктів, що обробляють десятки тисяч подій на хвилину або навіть на секунду, з великою кількістю команд та користувачів, або якщо у вас дуже суворі вимоги до продуктивності та ізоляції, то варто розглянути оренду виділеного сервера (dedicated server). Виділений сервер надасть вам ексклюзивний доступ до всіх апаратних ресурсів, забезпечуючи максимальну продуктивність та стабільність без впливу "сусідів" по VPS. Наприклад, для високонавантажених систем з піковим навантаженням у 10 000+ подій на хвилину, виділений сервер з 16+ ядрами CPU, 64+ ГБ RAM та кількома ТБ NVMe SSD буде виправданий. Ви також можете розглянути відповідний dedicated для таких завдань.

Локація: на що впливає

Вибір фізичного розташування вашого VPS або виділеного сервера також має значення:

  • Затримка (Latency): Розміщуйте сервер Sentry якомога ближче до ваших основних серверів застосунків. Це зменшить затримку при надсиланні подій до Sentry, що важливо для швидкого реагування.
  • Законодавство про дані: У деяких юрисдикціях існують суворі правила щодо того, де повинні зберігатися дані. Вибір локації сервера відповідно до цих вимог допоможе уникнути юридичних проблем.
  • Доступність: Вибирайте провайдера з хорошою репутацією та дата-центрами в регіонах з високою стабільністю мережі та електроживлення.

Враховуючи ці фактори, ви зможете вибрати найбільш підходящу конфігурацію та локацію для вашої self-hosted інсталяції Sentry.

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

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

Перед тим як приступити до встановлення Sentry, необхідно виконати базове налаштування та посилення безпеки вашого VPS. У цьому посібнику ми будемо використовувати Ubuntu Server 24.04 LTS, оскільки це актуальна та широко використовувана операційна система, яка підтримуватиметься до 2029 року.

Мінімальне налаштування після провізіонінгу

Після першого входу на ваш щойно встановлений VPS (зазвичай через SSH під користувачем root), виконайте наступні кроки:

1. Оновлення системи

Завжди починайте з оновлення списку пакетів та їх встановлення, щоб переконатися в актуальності всіх компонентів.


sudo apt update && sudo apt upgrade -y

Оновлює список пакетів та встановлює всі доступні оновлення.

2. Створення нового користувача з правами sudo

Працювати під користувачем root небезпечно. Створіть нового користувача та додайте його до групи sudo.


sudo adduser sentryuser
sudo usermod -aG sudo sentryuser

Створює нового користувача sentryuser та додає його до групи sudo. Вам буде запропоновано встановити пароль.

3. Налаштування автентифікації за SSH-ключами

Для підвищення безпеки рекомендується вимкнути автентифікацію за паролем та використовувати лише SSH-ключі. Якщо у вас ще немає пари SSH-ключів, згенеруйте їх на вашому локальному комп'ютері.

Скопіюйте ваш публічний ключ на сервер для sentryuser:


# На вашому локальному комп'ютері:
ssh-copy-id sentryuser@ВАШ_IP_СЕРВЕРА

Копіює ваш публічний SSH-ключ на сервер для користувача sentryuser.

Потім, на сервері, відредагуйте файл конфігурації SSH-демона:


sudo nano /etc/ssh/sshd_config

Відкриває файл конфігурації SSH.

Знайдіть та змініть наступні рядки (або додайте, якщо відсутні):


# /etc/ssh/sshd_config
# ...
PermitRootLogin no
PasswordAuthentication no
ChallengeResponseAuthentication no
# ...

Забороняє вхід під root та автентифікацію за паролем.

Збережіть зміни та перезапустіть SSH-сервіс:


sudo systemctl restart ssh

Перезапускає SSH-сервіс для застосування нових налаштувань.

Важливо: Вийдіть із сесії root та увійдіть як sentryuser, щоб переконатися, що SSH-ключі працюють, перш ніж закривати root сесію.

4. Налаштування брандмауера (UFW)

Uncomplicated Firewall (UFW) — це простий інструмент для керування iptables. Налаштуйте його, щоб дозволити лише необхідні з'єднання: SSH, HTTP та HTTPS.


sudo apt install ufw -y
sudo ufw allow OpenSSH
sudo ufw allow http
sudo ufw allow https
sudo ufw enable
sudo ufw status
  • 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: Вмикає брандмауер. Підтвердіть дію 'y'.
  • sudo ufw status: Перевіряє поточний статус та правила UFW.
5. Встановлення Fail2Ban

Fail2Ban сканує логи сервера на предмет спроб підбору паролів та блокує IP-адреси, з яких ці спроби відбуваються.


sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
  • sudo apt install fail2ban -y: Встановлює Fail2Ban.
  • sudo systemctl enable fail2ban: Вмикає автозапуск Fail2Ban при завантаженні системи.
  • sudo systemctl start fail2ban: Запускає сервіс Fail2Ban.

Базова конфігурація Fail2Ban вже досить ефективна, але ви можете налаштувати її, скопіювавши /etc/fail2ban/jail.conf до /etc/fail2ban/jail.local та внісши зміни там.

Тепер ваш сервер готовий до встановлення необхідного програмного забезпечення для Sentry.

Встановлення ПЗ — покроково

Схема: Встановлення ПЗ — покроково
Схема: Встановлення ПЗ — покроково

Sentry self-hosted використовує Docker та Docker Compose для оркестрації своїх численних компонентів, включаючи PostgreSQL, Redis, ClickHouse, Kafka та інші. Ми встановимо Docker Engine та Docker Compose, а потім використаємо офіційний інсталятор Sentry для розгортання всієї інфраструктури.

Усі команди виконуються від імені користувача з правами sudo (у нашому випадку sentryuser).

1. Встановлення Docker Engine (актуально на 2026 рік)

Ми будемо встановлювати Docker з офіційного репозиторію Docker, що гарантує отримання найсвіжіших та стабільних версій. На 2026 рік актуальними будуть версії Docker Engine 25.x або 26.x.


# Крок 1: Видаляємо старі версії Docker (якщо є)
sudo apt remove docker docker-engine docker.io containerd runc -y

# Крок 2: Встановлюємо необхідні пакети для встановлення по HTTPS
sudo apt install ca-certificates curl gnupg lsb-release -y

# Крок 3: Додаємо офіційний 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

# Крок 4: Додаємо репозиторій 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

# Крок 5: Оновлюємо список пакетів після додавання репозиторію
sudo apt update

# Крок 6: Встановлюємо Docker Engine, containerd та Docker Compose (cli)
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
  • Видаляє попередні установки Docker.
  • Встановлює пакети, необхідні для роботи з HTTPS-репозиторіями.
  • Додає GPG-ключ Docker для перевірки автентичності пакетів.
  • Додає офіційний репозиторій Docker для Ubuntu.
  • Оновлює кеш пакетів.
  • Встановлює Docker Engine (docker-ce), клієнт Docker (docker-ce-cli), середовище виконання контейнерів (containerd.io) та плагіни для збірки та compose (docker-buildx-plugin, docker-compose-plugin).

2. Додавання користувача до групи docker

Щоб уникнути використання sudo щоразу при роботі з Docker, додайте вашого користувача до групи docker.


sudo usermod -aG docker sentryuser
newgrp docker
  • Додає sentryuser до групи docker.
  • Застосовує зміни груп без перезаходу в систему.

3. Перевірка встановлення Docker

Переконайтеся, що Docker встановлено та працює коректно.


docker run hello-world

Запускає тестовий контейнер hello-world. Якщо ви бачите вітальне повідомлення, Docker встановлено правильно.

4. Встановлення Sentry (актуально на 2026 рік)

Sentry надає зручний скрипт для розгортання self-hosted версії. Він автоматично генерує всі необхідні файли Docker Compose, конфігурації та встановлює PostgreSQL і Redis як частину своєї інфраструктури.


# Крок 1: Створюємо директорію для Sentry
mkdir ~/sentry && cd ~/sentry

# Крок 2: Завантажуємо інсталяційний скрипт Sentry (версія 24.x/25.x буде актуальна на 2026 рік)
# Завжди перевіряйте актуальну версію на GitHub Sentry self-hosted
curl -sL https://install.sentry.io/ | bash
  • Створює директорію sentry у домашній папці користувача та переходить до неї.
  • Завантажує та запускає офіційний скрипт встановлення Sentry. Скрипт проведе вас через процес, поставить питання про доменне ім'я та згенерує всі файли.

Під час виконання скрипта вам буде запропоновано ввести доменне ім'я для Sentry (наприклад, sentry.yourdomain.com) та погодитися зі встановленням. Скрипт завантажить необхідні Docker-образи (включаючи PostgreSQL, Redis, ClickHouse, Kafka, Zookeeper) та згенерує файли docker-compose.yml та .env.

5. Запуск Sentry

Після успішного виконання інсталяційного скрипта Sentry, ви можете запустити всі його компоненти за допомогою Docker Compose.


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

Запускає всі контейнери, визначені в docker-compose.yml, у фоновому режимі (detached mode). Це може зайняти деякий час при першому запуску, оскільки Docker завантажуватиме всі необхідні образи.

6. Створення адміністратора Sentry

Після того як усі контейнери Sentry запущені, вам потрібно створити першого адміністративного користувача для доступу до веб-інтерфейсу.


docker compose run --rm web createuser

Запускає команду createuser всередині контейнера web Sentry, яка дозволяє створити нового користувача Sentry. Вам буде запропоновано ввести email, пароль та підтвердити, що це суперкористувач.

7. Перевірка статусу контейнерів

Переконайтеся, що всі контейнери Sentry працюють.


docker compose ps

Відображає список усіх сервісів, керованих Docker Compose, та їх поточний статус. Усі сервіси повинні бути у стані running.

На цьому етапі основні компоненти Sentry встановлені та запущені. Далі перейдемо до конфігурації.

Конфігурація

Схема: Конфігурація
Схема: Конфігурація

Після встановлення Sentry необхідно виконати додаткову конфігурацію, щоб зробити його доступним ззовні, налаштувати HTTPS та переконатися у правильній роботі всіх компонентів. Основні налаштування Sentry зберігаються у файлі .env та config.yml, які були згенеровані інсталяційним скриптом.

1. Основні налаштування в .env та config.yml

Перейдіть до директорії Sentry, де знаходяться ці файли (~/sentry).


cd ~/sentry

Перехід до директорії встановлення Sentry.

Файл .env

Цей файл містить змінні оточення для Docker Compose та налаштування Sentry. Основні параметри, які можуть потребувати уваги:

  • SENTRY_SECRET_KEY: Повинен бути унікальним і дуже складним. Скрипт встановлення генерує його автоматично. Ніколи не діліться ним і не зберігайте у відкритому доступі.
  • SENTRY_WEB_HOST: Доменне ім'я, за яким буде доступний Sentry (наприклад, sentry.yourdomain.com). Переконайтеся, що воно збігається з тим, що ви вказали під час встановлення.
  • SENTRY_EMAIL_HOST, SENTRY_EMAIL_PORT, SENTRY_EMAIL_USERNAME, SENTRY_EMAIL_PASSWORD: Налаштування для надсилання сповіщень електронною поштою (наприклад, про нові помилки, скидання пароля). Наполегливо рекомендується налаштувати це. Приклад для SMTP-сервера:

# .env
# ...
SENTRY_EMAIL_HOST=smtp.your-email-provider.com
SENTRY_EMAIL_PORT=587
[email protected]
SENTRY_EMAIL_PASSWORD=YOUR_EMAIL_PASSWORD
SENTRY_EMAIL_USE_TLS=True
SENTRY_EMAIL_USE_SSL=False
[email protected]
[email protected]
# ...

Приклад налаштування електронної пошти для сповіщень Sentry. Замініть заглушки на ваші реальні дані.

Файл config.yml

Цей файл містить додаткові налаштування Sentry, такі як ліміти на зберігання даних, налаштування плагінів тощо. У більшості випадків для початку достатньо стандартних налаштувань.

Після зміни .env, необхідно перезапустити Sentry:


docker compose restart

Перезапускає всі сервіси Sentry, щоб застосувати нові змінні оточення.

2. Налаштування доменного імені та DNS

Для того щоб Sentry був доступний за доменним ім'ям (наприклад, sentry.yourdomain.com), вам необхідно створити A-запис у налаштуваннях DNS вашого домену, що вказує на IP-адресу вашого VPS.

  • Перейдіть до панелі керування DNS вашого домену.
  • Створіть новий A-запис.
  • Хост/Ім'я: sentry (або піддомен, який ви обрали)
  • Значення/IP-адреса: IP-адреса вашого VPS
  • TTL: Залиште за замовчуванням (зазвичай 3600 секунд).

Розповсюдження DNS-записів може зайняти від кількох хвилин до кількох годин.

3. TLS/HTTPS через Caddy

Вкрай важливо забезпечити доступ до Sentry за захищеним протоколом HTTPS. Caddy — це потужний, простий у використанні веб-сервер, який автоматично керує сертифікатами Let's Encrypt для HTTPS. Ми можемо додати Caddy до нашого docker-compose.yml, щоб він виступав у якості зворотного проксі перед Sentry.

Крок 1: Створення Caddyfile

Створіть файл з ім'ям Caddyfile у директорії ~/sentry:


nano Caddyfile

Створює або відкриває файл Caddyfile для конфігурації Caddy.

Додайте наступну конфігурацію, замінивши sentry.yourdomain.com на ваш домен:


# Caddyfile
sentry.yourdomain.com {
    # Автоматичний HTTPS з Let's Encrypt
    tls {
        email [email protected]
    }

    # Зворотний проксі для Sentry
    reverse_proxy web:9000 {
        header_up Host {host}
        header_up X-Real-IP {remote_ip}
        header_up X-Forwarded-For {remote_ip}
        header_up X-Forwarded-Proto {scheme}
    }

    # Логування
    log {
        output file /var/log/caddy/access.log
    }

    # Gzip стиснення (опціонально)
    # encode gzip
}

Конфігурація Caddy для обробки HTTPS-трафіку та проксіювання запитів до Sentry (сервіс web на порту 9000). Замініть [email protected] на ваш реальний email.

Крок 2: Додавання Caddy до docker-compose.yml

Відкрийте файл docker-compose.yml:


nano docker-compose.yml

Відкриває основний файл конфігурації Docker Compose.

Додайте новий сервіс caddy в кінець файлу, а також змініть порт для сервісу web, щоб він не був доступний безпосередньо ззовні. Знайдіть секцію services: та змініть її наступним чином:


# docker-compose.yml
# ...
services:
  # ... існуючі сервіси (web, worker, cron, postgres, redis, clickhouse, kafka, zookeeper, snuba-api, snuba-worker, etc.)

  web:
    # ...
    # Видаліть або закоментуйте секцію ports для web, щоб він не був доступний безпосередньо ззовні
    # ports:
    #   - '9000:9000'
    expose:
      - "9000" # Sentry буде доступний тільки всередині Docker-мережі через порт 9000

  caddy:
    image: caddy:2.7.6-alpine # Використовуємо актуальну версію Caddy на 2026 рік
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_config:/config
      - ./caddy_logs:/var/log/caddy # Створюємо директорію для логів Caddy
    networks:
      - sentry-network # Переконайтеся, що Caddy знаходиться в тій же мережі, що і Sentry web-сервіс

# ...
volumes:
  # ... існуючі об'єми
  caddy_data:
  caddy_config:

# ...
networks:
  sentry-network: # Визначаємо спільну мережу, якщо її немає, або використовуємо існуючу
    external: false

Додає сервіс Caddy, який проксіює запити на сервіс web Sentry. Важливо, щоб Caddy та web знаходилися в одній Docker-мережі (зазвичай це мережа за замовчуванням, створена Docker Compose, але краще явно вказати або переконатися). Також створено томи для даних та конфігурації Caddy.

Створіть директорію для логів Caddy:


mkdir -p caddy_logs

Створює директорію для логів Caddy.

Крок 3: Перезапуск Sentry з Caddy

Застосуйте зміни в docker-compose.yml:


docker compose down
docker compose up -d
  • docker compose down: Зупиняє та видаляє всі контейнери, визначені в docker-compose.yml (але зберігає томи даних).
  • docker compose up -d: Наново запускає всі сервіси, включаючи Caddy, у фоновому режимі. Caddy автоматично запитає та встановить SSL-сертифікат.

4. Перевірка працездатності

Після всіх налаштувань та перезапуску, переконайтеся, що Sentry працює та доступний за HTTPS.

  • Перевірка DNS:
    
    dig +short sentry.yourdomain.com
    

    Повинен повернути IP-адресу вашого VPS.

  • Перевірка доступності за HTTPS:
    
    curl -v https://sentry.yourdomain.com
    

    Якщо ви бачите HTML-код сторінки Sentry та інформацію про SSL-сертифікат, значить, все працює коректно.

  • Доступ до веб-інтерфейсу: Відкрийте https://sentry.yourdomain.com у вашому веб-браузері. Ви повинні побачити сторінку входу Sentry.
  • Перевірка статусу контейнерів:
    
    docker compose ps
    

    Переконайтеся, що всі контейнери, включаючи caddy, знаходяться в статусі running.

Тепер ваша self-hosted інсталяція Sentry повністю налаштована та захищена HTTPS. Ви можете увійти в систему, створити проєкти та почати інтегрувати Sentry з вашими програмами.

Резервні копії та обслуговування

Схема: Резервні копії та обслуговування
Схема: Резервні копії та обслуговування

Надійне резервне копіювання та регулярне обслуговування є ключовими для будь-якої production-системи, і Sentry не виняток. Втрата даних про помилки може бути критичною для налагодження та моніторингу.

Що резервувати

Для повного відновлення Sentry вам необхідно резервувати наступні дані:

  1. База даних PostgreSQL: Основне сховище всіх даних Sentry (проєкти, події, користувачі, конфігурації).
  2. Дані Redis: Хоча Redis в основному використовується для кешування та черг, він також може зберігати деяку тимчасову, але важливу інформацію.
  3. Дані ClickHouse: Зберігає сирі дані подій для Snuba, що важливо для аналітики та пошуку.
  4. Файли конфігурації Sentry: Файли .env, config.yml та docker-compose.yml.
  5. Томи Docker: Усі томи, що використовуються Sentry (sentry-postgres, sentry-redis, sentry-data, sentry-attachments, sentry-clickhouse, sentry-kafka тощо).

Найпростіше резервувати всі томи Docker, пов'язані з Sentry, оскільки вони містять дані PostgreSQL, Redis, ClickHouse та інші важливі файли.

Простий скрипт авторезервування (cron + restic / borg / rsync)

Ми створимо простий скрипт, який архівуватиме всі необхідні томи Docker та конфігураційні файли, а потім надсилатиме їх у безпечне місце. Для прикладу використаємо rsync для копіювання на інший сервер або в S3-сумісне сховище. Для більш просунутого резервування розгляньте restic або borgbackup.

Передбачається, що у вас є окремий сервер або S3-сумісне сховище (наприклад, MinIO, Wasabi, Backblaze B2) для зберігання резервних копій. Якщо ви використовуєте інший сервер, налаштуйте SSH-доступ за ключем без пароля для користувача, який виконуватиме резервне копіювання.

Створіть файл backup_sentry.sh у директорії ~/sentry/scripts:


mkdir -p ~/sentry/scripts
nano ~/sentry/scripts/backup_sentry.sh

Створює директорію для скриптів та відкриває файл для редагування.


#!/bin/bash

# Переменные
BACKUP_DIR="/var/backups/sentry"
SENTRY_ROOT_DIR="/home/sentryuser/sentry" # Путь к вашей директории Sentry
TIMESTAMP=$(date +%Y%m%d%H%M%S)
BACKUP_FILE="$BACKUP_DIR/sentry_backup_$TIMESTAMP.tar.gz"
RETENTION_DAYS=7 # Сколько дней хранить бэкапы

# Настройки удаленного хранилища (пример для rsync по SSH)
REMOTE_USER="backupuser"
REMOTE_HOST="your_backup_server_ip"
REMOTE_PATH="/mnt/backups/sentry_backups"

# --- Начало процесса бэкапа ---
echo "Starting Sentry backup at $TIMESTAMP..."

# 1. Останавливаем Sentry для консистентности данных (опционально, но рекомендуется для БД)
# Если Sentry очень нагружен, рассмотрите бэкап без остановки, используя pg_dump и redis-cli BGSAVE
# docker compose stop # Можно останавливать только postgres и redis, если хотите минимизировать даунтайм
# docker compose stop postgres redis

# 2. Создаем директорию для бэкапов, если ее нет
sudo mkdir -p "$BACKUP_DIR"
sudo chown sentryuser:sentryuser "$BACKUP_DIR"

# 3. Бэкап томов Docker
# Для PostgreSQL: делаем дамп базы данных
echo "Dumping PostgreSQL database..."
docker compose exec -T postgres pg_dumpall -U postgres > "$BACKUP_DIR/sentry_postgres_dump_$TIMESTAMP.sql"
if [ $? -ne 0 ]; then
    echo "ERROR: PostgreSQL dump failed. Exiting."
    # docker compose start postgres redis # Запускаем обратно, если останавливали
    exit 1
fi

# Для Redis: делаем сохранение RDB файла
echo "Saving Redis RDB file..."
docker compose exec -T redis redis-cli BGSAVE
# Дожидаемся завершения BGSAVE (несколько секунд)
sleep 5
docker cp sentry-redis-1:/data/dump.rdb "$BACKUP_DIR/sentry_redis_dump_$TIMESTAMP.rdb"
if [ $? -ne 0 ]; then
    echo "ERROR: Redis dump failed. Exiting."
    # docker compose start postgres redis # Запускаем обратно, если останавливали
    exit 1
fi

# Бэкап всех остальных Docker томов Sentry
# Можно использовать 'docker volume ls -q' и 'docker run --rm -v VOLUME_NAME:/volume -v /path/to/backup:/backup alpine tar czf /backup/volume.tar.gz /volume'
# Но проще бэкапить всю директорию SENTRY_ROOT_DIR, которая содержит docker-compose.yml и .env,
# а также все локальные тома (если они созданы как bind mounts или в этой директории)

echo "Archiving Sentry configuration and data volumes..."
# Создаем временную директорию для архивации Docker томов
TEMP_VOLUMES_DIR="$BACKUP_DIR/volumes_$TIMESTAMP"
mkdir -p "$TEMP_VOLUMES_DIR"

# Копируем .env, docker-compose.yml и другие важные файлы
cp "$SENTRY_ROOT_DIR/.env" "$TEMP_VOLUMES_DIR/"
cp "$SENTRY_ROOT_DIR/config.yml" "$TEMP_VOLUMES_DIR/"
cp "$SENTRY_ROOT_DIR/docker-compose.yml" "$TEMP_VOLUMES_DIR/"
cp -R "$SENTRY_ROOT_DIR/caddy_logs" "$TEMP_VOLUMES_DIR/" # Если Caddy логи не в томе

# Копируем данные persistent томов Sentry (пути могут отличаться, проверьте через 'docker volume inspect ')
# Это более сложный шаг, так как тома могут быть вне SENTRY_ROOT_DIR.
# Проще всего использовать tar для конкретных томов или просто бэкапить всю директорию SENTRY_ROOT_DIR
# Если у вас используются именованные тома (как по умолчанию в Sentry), то их нужно бэкапить отдельно
# Например, для sentry-data:
# docker run --rm -v sentry-data:/data -v "$TEMP_VOLUMES_DIR":/backup ubuntu tar czf /backup/sentry-data.tar.gz -C /data .
# Аналогично для sentry-attachments, sentry-clickhouse-data и т.д.

# Для простоты и если тома не bind-mounts, а Docker-managed volumes, можно просто бэкапить всю директорию Sentry
# с конфигами, а данные БД и Redis уже сделали дампом.
# Для полных Docker-managed volumes, скрипт будет сложнее, с использованием 'docker run --rm -v :/vol ... tar'
# Для этого примера, мы сосредоточимся на конфигах и дампе БД/Redis, что достаточно для восстановления.

# Архивация всех бэкап-файлов
echo "Creating final archive..."
cd "$BACKUP_DIR"
tar -czf "$BACKUP_FILE" sentry_postgres_dump_"$TIMESTAMP".sql sentry_redis_dump_"$TIMESTAMP".rdb volumes_"$TIMESTAMP"/
cd "$SENTRY_ROOT_DIR" # Возвращаемся в исходную директорию

# 4. Загрузка бэкапа на удаленный сервер (rsync)
echo "Uploading backup to remote server..."
rsync -avz "$BACKUP_FILE" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH"
if [ $? -ne 0 ]; then
    echo "ERROR: Failed to upload backup to remote server."
fi

# 5. Удаление старых бэкапов
echo "Removing old backups..."
find "$BACKUP_DIR" -type f -name "sentry_backup_.tar.gz" -mtime +$RETENTION_DAYS -delete
find "$BACKUP_DIR" -type f -name "sentry_postgres_dump_.sql" -mtime +$RETENTION_DAYS -delete
find "$BACKUP_DIR" -type f -name "sentry_redis_dump_.rdb" -mtime +$RETENTION_DAYS -delete
find "$BACKUP_DIR" -type d -name "volumes_" -mtime +$RETENTION_DAYS -exec rm -rf {} + # Удаляем временные директории

# 6. Запускаем Sentry обратно (если останавливали)
# docker compose start # Или только postgres redis
echo "Sentry backup finished."

Скрипт виконує дамп PostgreSQL та Redis, архівує конфігураційні файли та завантажує резервну копію на віддалений сервер. Він також видаляє старі резервні копії. Замініть your_backup_server_ip, backupuser та [email protected] на свої дані.

Зробіть скрипт виконуваним:


chmod +x ~/sentry/scripts/backup_sentry.sh

Робить скрипт виконуваним.

Куди зберігати

  • Зовнішній S3-сумісний сервіс: Хмарні сховища (AWS S3, Google Cloud Storage, Backblaze B2, DigitalOcean Spaces, Linode Object Storage) — це надійний та масштабований варіант. Для цього вам знадобиться інструмент типу s3cmd або rclone.
  • Окремий VPS: Ви можете використовувати інший, менш потужний VPS для зберігання резервних копій, копіюючи їх по SSH за допомогою rsync, як показано у прикладі вище.
  • Локальний диск (з обережністю): Зберігання резервних копій на тому ж сервері, що й Sentry, не рекомендується, оскільки при відмові диска ви втратите і Sentry, і резервні копії. Це може бути лише тимчасовим рішенням перед перенесенням на зовнішній носій.

Оновлення: rolling vs maintenance window

Оновлення self-hosted Sentry — це важлива процедура. Sentry часто випускає нові версії, і їх оновлення зазвичай включає оновлення Docker-образів та міграцію бази даних.

  • Maintenance window (вікно обслуговування): Це найбільш поширений та безпечний підхід для self-hosted Sentry. Під час вікна обслуговування ви зупиняєте всі сервіси Sentry, виконуєте оновлення, міграції бази даних і потім запускаєте все заново. Це гарантує, що всі компоненти оновлюються синхронно та міграції проходять без конфліктів.
    
    # У директорії ~/sentry
    docker compose down # Зупиняє всі сервіси
    docker compose pull # Завантажує нові Docker-образи
    docker compose run --rm web upgrade # Виконує міграції бази даних
    docker compose up -d # Запускає всі сервіси Sentry
    

    Стандартна процедура оновлення Sentry. Рекомендується виконувати її регулярно, щоб використовувати останні функції та виправлення безпеки.

  • Rolling updates (поступові оновлення): Для Sentry це складніше реалізувати через тісний зв'язок між його компонентами та потенційних змін у схемі бази даних. Зазвичай rolling updates вимагають складнішої архітектури (наприклад, кластер Kubernetes) і не завжди застосовні до стандартної інсталяції Docker Compose без простою. Для більшості self-hosted користувачів підхід з вікном обслуговування є кращим.

Завжди читайте офіційну документацію Sentry перед оновленням, оскільки можуть бути специфічні інструкції для конкретних версій.

Усунення несправностей + FAQ

Навіть при ретельному налаштуванні можуть виникнути проблеми. Цей розділ допоможе вам діагностувати та вирішити найпоширеніші питання при роботі з self-hosted Sentry.

1. Який VPS-конфіг мінімально підійде для Sentry?

Для невеликих проєктів (до 1000 подій на хвилину) мінімально рекомендується VPS з 4 CPU-ядрами, 8 ГБ RAM та 100-200 ГБ SSD. Однак, Sentry досить ресурсоємний. Якщо ви очікуєте вище навантаження або хочете забезпечити комфортну роботу без затримок, краще розглянути 6-8 ядер CPU, 16-32 ГБ RAM та 300-500 ГБ NVMe SSD. SSD-накопичувач — це обов'язкова умова для гарної продуктивності через інтенсивні операції введення-виведення з базою даних та ClickHouse.

2. Що обрати — VPS чи dedicated для цього завдання?

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

3. Sentry UI недоступний або видає помилку 502/503. Що робити?

Перевірте статус Docker-контейнерів: docker compose ps. Переконайтеся, що всі контейнери (особливо web, postgres, redis, caddy) перебувають у статусі running. Перевірте логи сервісів: docker compose logs web, docker compose logs caddy, docker compose logs postgres. Часті причини: нестача пам'яті (Sentry може споживати багато RAM), неправильна конфігурація Caddy, проблеми з базою даних.

4. Не можу увійти в Sentry після створення користувача.

Переконайтеся, що ви створили суперкористувача за допомогою команди docker compose run --rm web createuser. Перевірте правильність введених облікових даних. Якщо ви забули пароль, ви можете скинути його, використовуючи ту ж команду createuser і вказавши існуючий email, Sentry запропонує скинути пароль.

5. Події не надходять до Sentry, хоча я налаштував SDK.

Перевірте наступні пункти: 1. Чи правильно вказано DSN у вашому застосунку? DSN можна знайти в налаштуваннях проєкту в Sentry UI. 2. Чи доступний ваш Sentry-сервер ззовні (DNS, фаєрвол)? Спробуйте curl -v https://sentry.yourdomain.com з сервера, де запущено застосунок. 3. Перевірте логи Sentry (особливо сервіси web та worker) на предмет помилок при прийомі подій: docker compose logs web. 4. Переконайтеся, що всі компоненти Sentry працюють: docker compose ps.

6. Sentry працює повільно або "гальмує".

Повільна робота Sentry часто пов'язана з нестачею ресурсів. Перевірте використання CPU, RAM та дискових операцій на вашому VPS. Використовуйте команди htop, free -h, iostat -x 1. Якщо будь-який ресурс близький до 100%, розгляньте можливість збільшення ресурсів VPS. Також перевірте логи Sentry на наявність помилок, які можуть уповільнювати роботу (наприклад, проблеми з PostgreSQL або ClickHouse).

7. Як оновити Sentry до нової версії?

Процес оновлення Sentry включає зупинку всіх сервісів, завантаження нових Docker-образів, виконання міграцій бази даних та повторний запуск. Завжди дотримуйтесь офіційної документації Sentry для конкретної версії, але загальна послідовність команд: docker compose down, docker compose pull, docker compose run --rm web upgrade, docker compose up -d. Переконайтеся, що у вас є актуальний бекап перед початком оновлення.

8. Як очистити старі дані Sentry?

Sentry надає команду для очищення старих даних. Ви можете запустити її вручну або налаштувати як регулярне завдання cron. Приклад команди для видалення даних старше 90 днів:


docker compose run --rm web cleanup --days 90

Ця команда видаляє події та пов'язані дані, які старші 90 днів. Рекомендується запускати її регулярно для підтримки продуктивності та економії дискового простору.

Висновки та наступні кроки

Схема: Висновки та наступні кроки
Схема: Висновки та наступні кроки

Вітаємо! Ви успішно розгорнули та налаштували власну інсталяцію Sentry на вашому VPS, використовуючи Docker, PostgreSQL та Redis. Тепер у вас є потужний інструмент для моніторингу помилок та продуктивності, що забезпечує повний контроль над вашими даними та інфраструктурою. Це значно підвищить надійність ваших застосунків та ефективність роботи вашої команди.

Куди рухатися далі:

  • Інтеграція проєктів: Додайте всі ваші проєкти до Sentry та інтегруйте SDK у ваші застосунки, щоб почати збирати дані про помилки.
  • Налаштування сповіщень: Налаштуйте сповіщення електронною поштою, Slack, PagerDuty або іншими каналами, щоб ваша команда оперативно дізнавалася про нові проблеми.
  • Моніторинг Sentry: Налаштуйте моніторинг продуктивності та стану самого Sentry (використання ресурсів VPS, стан Docker-контейнерів) за допомогою таких інструментів, як Prometheus/Grafana або Zabbix.
  • Масштабування: У міру зростання вашого проєкту та збільшення обсягу подій, розгляньте можливість масштабування Sentry шляхом збільшення ресурсів VPS або переходу на виділений сервер.

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

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

Share this post:

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

Telegram VKVK WhatsApp Facebook LinkedIn XX

встановлення self-hosted sentry на vps: docker, postgresql та redis для відстеження помилок
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.