VPSРейтинг
РазработкаМарт 2026 · 14 мин чтения

Sentry на VPS: трекинг ошибок для своего приложения

Sentry Cloud — от $26 в месяц. Self-hosted — бесплатно, если у вас есть VPS с 16 ГБ RAM. Устанавливается двумя командами, работает со всеми языками и фреймворками, уведомляет об ошибках в Telegram раньше, чем об этом напишут пользователи.

1. Что такое Sentry и зачем он нужен

Представьте: ваше приложение упало в 3 часа ночи. Первый, кто об этом узнал, — пользователь, который написал в поддержку. Вы увидели письмо утром. Sentry решает эту проблему: каждое необработанное исключение в вашем коде автоматически летит в Sentry, вы получаете уведомление в Telegram или на почту, а в интерфейсе видите полный стектрейс, переменные окружения и даже действия пользователя перед ошибкой.

🐞 Трекинг ошибок

Перехватывает все необработанные исключения с полным стектрейсом, контекстом запроса и переменными.

Реальное время

Ошибки появляются в интерфейсе через секунды после возникновения. Kafka обеспечивает приём без потерь под нагрузкой.

🔔 Уведомления

Email, Telegram, Slack, PagerDuty — настраиваемые алерты при первом появлении ошибки или превышении порога.

📊 Производительность

Performance Monitoring: трассировка запросов, медленные SQL-запросы, N+1 проблемы, время ответа API.

🌍 100+ платформ

Python, JavaScript, Go, PHP, Ruby, Java, .NET, React, Next.js, Django, FastAPI — единый SDK на все.

🎯 Source Maps

Для JS: загружаете source maps — в стектрейсе видите оригинальный TypeScript-код, а не минифицированный.

👤 Контекст пользователя

Привязка ошибок к конкретному пользователю — видно, сколько людей затронуто каждой проблемой.

🆓 Бесплатно self-hosted

Аналог Business-плана ($26+/мес) без лимитов на события и пользователей. Платите только за VPS.

2. Требования к серверу (читайте внимательно)

Sentry — тяжёлое приложение

Self-hosted Sentry запускает ~20 Docker-контейнеров одновременно: PostgreSQL, Redis, Kafka, Zookeeper, ClickHouse, Nginx и несколько воркеров. Минимум — 16 ГБ RAM. На VPS с 2–4 ГБ RAM Sentry не запустится нормально. Это принципиально важно перед началом.

ПараметрМинимумРекомендуется
CPU4 vCPU4–8 vCPU
RAM16 ГБ + 16 ГБ swap32 ГБ
Диск20 ГБ SSD50–100 ГБ NVMe
ОСUbuntu 20.04 / 22.04Ubuntu 22.04 LTS
DockerEngine 19.03.6+Engine 26+
Docker Composev2.32.2+Последняя версия

Настроить swap (если RAM меньше 32 ГБ)

Если у вас 16 ГБ RAM — добавьте 16 ГБ swap. Sentry требует суммарно 32 ГБ памяти. Swap на NVMe-диске работает достаточно быстро для этой задачи.

Создать swap-файл 16 ГБ
fallocate -l 16G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

# Сделать постоянным
echo '/swapfile none swap sw 0 0' >> /etc/fstab

# Проверить
free -h

Альтернатива для маленьких VPS

Если у вас VPS с 4–8 ГБ RAM — рассмотрите GlitchTip (совместим с Sentry SDK, работает на 1 ГБ RAM) или Bugsink. DSN просто меняется в переменных окружения — менять код приложения не нужно.

3. Установка Sentry на Ubuntu

Шаг 1: установить Docker

Официальный способ установки Docker на Ubuntu
# Зависимости
apt update && apt install -y ca-certificates curl gnupg

# GPG-ключ Docker
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg   -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc

# Репозиторий
echo   "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc]   https://download.docker.com/linux/ubuntu   $(. /etc/os-release && echo "$VERSION_CODENAME") stable"   | tee /etc/apt/sources.list.d/docker.list > /dev/null

apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# Проверить
docker --version
docker compose version

Шаг 2: клонировать репозиторий Sentry

Скачать последний стабильный релиз
# Определить последнюю версию
VERSION=$(curl -Ls -o /dev/null -w %{url_effective} \
  https://github.com/getsentry/self-hosted/releases/latest)
VERSION=${VERSION##*/}
echo "Устанавливаем Sentry $VERSION"

# Клонировать
git clone https://github.com/getsentry/self-hosted.git /opt/sentry
cd /opt/sentry
git checkout $VERSION

Шаг 3: запустить установку

Скрипт загрузит Docker-образы, создаст базы данных и создаст суперпользователя. На первый запуск уходит 10–20 минут в зависимости от скорости интернета.

Запустить из /opt/sentry
cd /opt/sentry
./install.sh

Что делает install.sh

1Проверяет версии Docker и Docker Compose
2Генерирует секретный ключ приложения в .env
3Запускает PostgreSQL, Redis, Kafka и Zookeeper
4Применяет миграции базы данных
5Создаёт суперпользователя (запросит email и пароль)
6Собирает статику (JavaScript, CSS)

Шаг 4: запустить Sentry

Запуск всех контейнеров (из /opt/sentry)
cd /opt/sentry
docker compose up --wait -d

После запуска Sentry будет доступен на http://127.0.0.1:9000. Откройте в браузере через SSH-туннель или настройте Nginx (следующий шаг).

Настроить автозапуск через systemd
cat > /etc/systemd/system/sentry.service << 'EOF'
[Unit]
Description=Sentry
After=docker.service
Requires=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/sentry
ExecStart=/usr/bin/docker compose up -d --wait
ExecStop=/usr/bin/docker compose down
TimeoutStartSec=300

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable sentry

4. Nginx и SSL

Sentry слушает на 127.0.0.1:9000. Настроим Nginx как reverse proxy с Let's Encrypt.

Установить Nginx и Certbot

Ubuntu 22.04
apt install -y nginx certbot python3-certbot-nginx

Конфигурация Nginx

/etc/nginx/sites-available/sentry
server {
    listen 80;
    server_name sentry.ваш-домен.ru;

    location / {
        proxy_pass http://127.0.0.1:9000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # Для больших payload (source maps)
        client_max_body_size 100M;

        # Таймауты для долгих запросов
        proxy_read_timeout 300;
        proxy_connect_timeout 300;
    }
}
Включить сайт и получить SSL
ln -s /etc/nginx/sites-available/sentry /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx

# Получить SSL-сертификат
certbot --nginx -d sentry.ваш-домен.ru

Обновить URL в конфигурации Sentry

Sentry должен знать свой внешний адрес — он используется в ссылках в письмах и DSN.

/opt/sentry/sentry/config.yml — добавить/изменить
system.url-prefix: 'https://sentry.ваш-домен.ru'
Применить изменения
cd /opt/sentry && docker compose restart web worker

5. Первый проект и DSN

Откройте https://sentry.ваш-домен.ru и войдите с данными суперпользователя, которые указали при установке.

  1. 1Перейдите в ProjectsCreate Project.
  2. 2Выберите платформу: Python, JavaScript, Next.js, Go, PHP и т.д. (100+ вариантов).
  3. 3Задайте имя проекта (например, my-backend) и назначьте команду.
  4. 4Нажмите Create Project. Sentry покажет страницу с инструкциями по интеграции и вашим DSN.
  5. 5Скопируйте DSN — строку вида https://abc123@sentry.ваш-домен.ru/2. Она нужна для SDK.

Где найти DSN позже

Если закрыли страницу с DSN: откройте проект → Settings SDK SetupClient Keys (DSN). Там же можно создать новые DSN-ключи или отозвать существующие.

6. Интеграция с Python

Sentry Python SDK поддерживает Django, FastAPI, Flask, aiohttp и чистый Python. Одна строка инициализации — и все необработанные исключения автоматически отправляются в Sentry.

Установка SDK

pip
pip install sentry-sdk

Чистый Python

app.py — инициализация как можно раньше
import sentry_sdk

sentry_sdk.init(
    dsn="https://abc123@sentry.ваш-домен.ru/2",
    # Процент запросов для трассировки производительности (1.0 = 100%)
    traces_sample_rate=0.1,
    # Включить профилирование
    profiles_sample_rate=0.1,
    # Окружение (помогает фильтровать события в интерфейсе)
    environment="production",
    # Версия приложения (для отслеживания когда ошибка появилась)
    release="my-app@1.0.0",
)

# Тест: это исключение появится в Sentry
# raise ValueError("Тестовая ошибка")

Django

pip install sentry-sdk[django]
pip install sentry-sdk[django]
settings.py
import sentry_sdk

sentry_sdk.init(
    dsn="https://abc123@sentry.ваш-домен.ru/2",
    integrations=[
        sentry_sdk.integrations.django.DjangoIntegration(),
    ],
    traces_sample_rate=0.1,
    send_default_pii=True,  # Привязывает пользователей к ошибкам
    environment="production",
)

FastAPI

pip install sentry-sdk[fastapi]
pip install sentry-sdk[fastapi]
main.py
import sentry_sdk
from sentry_sdk.integrations.fastapi import FastApiIntegration
from sentry_sdk.integrations.starlette import StarletteIntegration
from fastapi import FastAPI

sentry_sdk.init(
    dsn="https://abc123@sentry.ваш-домен.ru/2",
    integrations=[
        StarletteIntegration(),
        FastApiIntegration(),
    ],
    traces_sample_rate=0.1,
    environment="production",
)

app = FastAPI()

Добавить контекст пользователя

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

Устанавливать после аутентификации
from sentry_sdk import set_user

# Например, в middleware после проверки токена
set_user({"id": user.id, "email": user.email, "username": user.username})

7. Интеграция с Next.js / Node.js

Для Next.js есть официальный wizard, который автоматически настраивает конфигурацию: создаёт файлы для client-side, server-side и edge-runtime.

Установка через wizard

Запустить в корне Next.js-проекта
npx @sentry/wizard@latest -i nextjs

Wizard создаст несколько файлов. Главное — указать ваш DSN вместо дефолтного:

sentry.client.config.ts — ошибки в браузере
import * as Sentry from "@sentry/nextjs";

Sentry.init({
  dsn: "https://abc123@sentry.ваш-домен.ru/2",
  tracesSampleRate: 0.1,
  environment: "production",
  // Опционально: Session Replay для видео воспроизведения ошибки
  replaysSessionSampleRate: 0,
  replaysOnErrorSampleRate: 1.0,
});
sentry.server.config.ts — ошибки на сервере
import * as Sentry from "@sentry/nextjs";

Sentry.init({
  dsn: "https://abc123@sentry.ваш-домен.ru/2",
  tracesSampleRate: 0.1,
  environment: "production",
});
next.config.ts — обернуть конфигурацию
import { withSentryConfig } from "@sentry/nextjs";

const nextConfig = {
  // ваша конфигурация
};

export default withSentryConfig(nextConfig, {
  org: "your-org",
  project: "my-nextjs-app",
  // Загрузка source maps на Sentry (для читаемых стектрейсов)
  sourcemaps: {
    disable: false,
  },
  // Подавить логи при сборке
  silent: !process.env.CI,
  // Не блокировать билд если Sentry недоступен
  errorOnFailedUpload: false,
});

Чистый Node.js

npm install @sentry/node
npm install @sentry/node
index.js — первой строкой до всех импортов
// ВАЖНО: инициализация должна быть до import Express и других модулей
const Sentry = require("@sentry/node");

Sentry.init({
  dsn: "https://abc123@sentry.ваш-домен.ru/2",
  tracesSampleRate: 0.1,
  environment: "production",
});

const express = require("express");
const app = express();

// Sentry middleware — первым после создания app
Sentry.setupExpressErrorHandler(app);

Source Maps для читаемых стектрейсов

Без source maps стектрейс JS-ошибки выглядит как at t.default (main.abc123.js:1:1234). Загрузите source maps в Sentry — и увидите оригинальный TypeScript-код. Для Next.js wizard настраивает это автоматически через withSentryConfig.

8. Уведомления в Telegram

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

Подключить Telegram-бота

  1. 1В интерфейсе Sentry откройте SettingsIntegrations → найдите Telegram Alerts Bot.
  2. 2Нажмите Install. Sentry покажет QR-код или ссылку на Telegram-бота.
  3. 3Откройте бота в Telegram, нажмите Start. Бот попросит авторизоваться через Sentry — нажмите кнопку в чате.
  4. 4После авторизации бот будет отправлять уведомления об ошибках в личные сообщения.
  5. 5Для уведомлений в групповой чат: добавьте бота в группу и используйте команду /link для привязки к проекту.

Настройка правил алертов

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

  1. 1Откройте проект → AlertsCreate Alert.
  2. 2Выберите тип: Issue Alert (для конкретных ошибок) или Metric Alert (по порогам — например, >100 ошибок за 5 минут).
  3. 3В условиях выберите: «A new issue is created» (новая ошибка) или «An issue changes state from resolved to unresolved» (регрессия).
  4. 4В действиях выберите Send a Telegram message и укажите чат.
  5. 5Нажмите Save Rule.

Популярные условия для алертов

Новая ошибка

Самый важный — сразу знаете о новых проблемах

Регрессия

Ошибка вернулась после того, как вы её закрыли

Порог частоты

Массовая ошибка, затрагивающая многих пользователей

Затронутые пользователи

Ошибка влияет на реальных людей — критично

Частые вопросы

Нужен VPS с 16+ ГБ RAM для Sentry? Смотрите подборку

VPS для Docker →

Смотрите также