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

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

Установка Self-hosted Sentry на VPS: Docker, PostgreSQL и Redis для отслеживания ошибок

calendar_month Aug 02, 2026 schedule 24 мин. чтения visibility 17 просмотров
Установка 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 перед обновлением, так как могут быть специфические инструкции для конкретных версий.

Troubleshooting + 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 или перехода на выделенный сервер.

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

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

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

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

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.