Конфигурация
Gotcha полностью настраивается переменными окружения с префиксом GOTCHA_. Ни одного конфиг-файла, ни одной настройки через веб-интерфейс для системных параметров — только переменные окружения. Их авторитетный источник — файл cmd/gotcha/config.go в исходном коде; этот документ — читаемое описание того же самого, сгруппированное по смыслу. Шаблон со всеми переменными и комментариями лежит в .env.example в корне репозитория.
Как задать переменные окружения в Docker Compose
Два равнозначных способа:
Способ 1 — файл .env рядом с docker-compose.yml (рекомендуется, самый простой). Docker Compose читает его автоматически:
# в папке gotcha/
nano .env
GOTCHA_SECRET_KEY=случайная-строка-из-openssl-rand
GOTCHA_BASE_URL=https://gotcha.example.com
GOTCHA_SMTP_HOST=smtp.yandex.ru
GOTCHA_SMTP_PORT=465
GOTCHA_SMTP_USER=noreply@example.com
GOTCHA_SMTP_PASSWORD=пароль-приложения
GOTCHA_SMTP_FROM=noreply@example.com
Применить изменения:
docker compose up -d
(команда пересоздаёт контейнер gotcha с новыми переменными; postgres/clickhouse не трогает, если их переменные не менялись).
Способ 2 — блок environment: прямо в docker-compose.yml. Если вы не хотите заводить .env, можно прописать переменные прямо в compose-файле, в секции сервиса gotcha:
services:
gotcha:
# ...
environment:
GOTCHA_PG_DSN: postgres://gotcha:gotcha@postgres:5432/gotcha?sslmode=disable
GOTCHA_CH_DSN: clickhouse://gotcha:gotcha@clickhouse:9000/gotcha
GOTCHA_BASE_URL: ${GOTCHA_BASE_URL:-http://localhost:59080}
GOTCHA_SECRET_KEY: ${GOTCHA_SECRET_KEY:-insecure-dev-secret}
GOTCHA_SMTP_HOST: smtp.yandex.ru
${VAR:-default} — это подстановка Docker Compose: «взять значение VAR из окружения/.env, а если не задано — использовать значение после :-». В штатном docker-compose.yml репозитория уже используется этот приём для GOTCHA_BASE_URL и GOTCHA_SECRET_KEY, так что для этих двух переменных обычно достаточно способа 1 (просто создать .env), ничего не редактируя в самом compose-файле.
После любого изменения переменных выполните docker compose up -d, чтобы применить их — Docker Compose сам обнаружит, что конфигурация контейнера изменилась, и пересоздаст его.
Core (основные)
| Переменная | По умолчанию | Описание |
|---|---|---|
GOTCHA_ADDR | :8080 | Адрес и порт, который слушает HTTP-сервер внутри контейнера. Как правило, менять не нужно — наружу порт пробрасывается через docker-compose.yml/GOTCHA_PORT (см. Установку), а не через эту переменную. |
GOTCHA_BASE_URL | http://localhost:8080 | Публичный адрес вашего инстанса — то, как до него реально добираются пользователи и SDK. Используется для построения DSN проектов, ссылок в письмах-приглашениях и ссылок на инциденты в алертах (Telegram/webhook/email). Должен точно совпадать со схемой+хостом+портом, по которым инстанс реально доступен. Если значение не localhost/127.0.0.1, приложение в режимах web/all требует непустой GOTCHA_SECRET_KEY — см. ниже. Если значение не начинается с https:// и не локальное — в лог пишется предупреждение (сессионные cookie идут открытым текстом). |
Database (база данных)
| Переменная | По умолчанию | Описание |
|---|---|---|
GOTCHA_PG_DSN | postgres://gotcha:gotcha@localhost:5432/gotcha?sslmode=disable | Строка подключения к PostgreSQL — хранит организации, проекты, пользователей, правила алертов, инциденты. В штатном docker-compose.yml уже выставлено postgres://gotcha:gotcha@postgres:5432/gotcha?sslmode=disable (имя хоста postgres — это имя сервиса в docker-сети). Менять нужно, только если вы используете внешнюю/собственную БД вместо контейнера из compose. |
GOTCHA_CH_DSN | clickhouse://localhost:9000/gotcha | Строка подключения к ClickHouse — хранит события, спаны трейсов, метрики, профили, результаты аптайм-проверок. В штатном compose — clickhouse://gotcha:gotcha@clickhouse:9000/gotcha. Менять по тем же причинам, что и GOTCHA_PG_DSN. |
Email / SMTP
Используется для писем-приглашений и email-канала алертов. Пока GOTCHA_SMTP_HOST пуст — отправка почты выключена целиком (в логах будет предупреждение GOTCHA_SMTP_HOST is not set, email alert channels are disabled), при этом остальная функциональность работает нормально.
| Переменная | По умолчанию | Описание |
|---|---|---|
GOTCHA_SMTP_HOST | (пусто) | Адрес SMTP-сервера, например smtp.yandex.ru. Пока пусто — почта выключена. |
GOTCHA_SMTP_PORT | 587 | Порт SMTP. 587 (STARTTLS) — обычный выбор; некоторые провайдеры используют 465 (SMTPS). |
GOTCHA_SMTP_USER | (пусто) | Логин для авторизации на SMTP-сервере. |
GOTCHA_SMTP_PASSWORD | (пусто) | Пароль. Для сервисов вроде Яндекс/Gmail обычно нужен не пароль от аккаунта, а отдельный «пароль приложения». |
GOTCHA_SMTP_FROM | (пусто) | Адрес отправителя в заголовке From: писем. |
Retention (хранение данных ClickHouse)
Сколько дней ClickHouse хранит данные каждого типа, прежде чем удалить старые записи. Меньше — меньше места на диске, больше — глубже история для расследований.
| Переменная | По умолчанию | Описание |
|---|---|---|
GOTCHA_RETENTION_DAYS | 90 | Хранение событий (ошибок), транзакций и Web Vitals. |
GOTCHA_SPAN_RETENTION_DAYS | 30 | Хранение спанов трейсов (детали внутри транзакций). |
GOTCHA_METRIC_RETENTION_DAYS | 30 | Хранение точек метрик (принятых по OTLP). |
GOTCHA_PROFILE_RETENTION_DAYS | 7 | Хранение сэмплов профилирования (самые тяжёлые по объёму данные, поэтому дефолт короче остальных). |
GOTCHA_OUTBOX_RETENTION_DAYS | 7 | Хранение записей об уже доставленных/провалившихся уведомлениях (email/webhook/Telegram) в PostgreSQL. Значение специально небольшое: в этих записях остаются секреты каналов доставки (например, токен вебхука). |
Изменение retention применяется на следующем старте приложения (значение используется, чтобы выставить TTL на таблицах ClickHouse) — задним числом уже удалённые данные не восстановятся.
Quotas & edition (квоты и редакция)
| Переменная | По умолчанию | Описание |
|---|---|---|
GOTCHA_EDITION | oss | oss или saas. Определяет дефолт для квот ниже: в oss все дефолты = 0 (безлимит), в saas = 1 000 000 в месяц. Явно заданный GOTCHA_DEFAULT_*_QUOTA всегда перекрывает дефолт редакции. |
GOTCHA_DEFAULT_EVENT_QUOTA | 0 в oss | Дефолтная месячная квота на приём событий (ошибок) для новых организаций. 0 = безлимит. |
GOTCHA_DEFAULT_TRANSACTION_QUOTA | 0 в oss | То же для транзакций (performance-трейсов). |
GOTCHA_DEFAULT_METRIC_QUOTA | 0 в oss | То же для точек метрик. |
GOTCHA_DEFAULT_PROFILE_QUOTA | 0 в oss | То же для профилей. |
GOTCHA_MAX_EVENT_BYTES | 1048576 (1 МиБ) | Максимальный размер одного принимаемого события в байтах. Событие крупнее — отклоняется. |
GOTCHA_METRIC_EVAL_INTERVAL | 60 | Как часто (в секундах) проверяются пороговые правила алертов по метрикам. |
GOTCHA_PROFILE_EVAL_INTERVAL | 300 | Как часто (в секундах) запускается детектор регрессий профилирования. |
Когда обязательно менять квоты: значения 0 (безлимит) в oss-редакции — это сознательный выбор для приватного self-hosted инстанса, где DSN не утекает наружу. Если DSN проекта попадает в публично доступный код (например, во фронтенд-JS вашего сайта), кто угодно может слать на него события неограниченно — это и вектор злоупотребления, и риск исчерпать диск ClickHouse. В таком случае задайте реальные числа, например:
GOTCHA_DEFAULT_EVENT_QUOTA=100000
GOTCHA_DEFAULT_TRANSACTION_QUOTA=50000
(Это дефолт для новых организаций; квоту существующей организации можно изменить в её настройках в веб-интерфейсе.)
Privacy / scrubbing (приватность)
Серверная очистка персональных данных перед сохранением — включена по умолчанию.
| Переменная | По умолчанию | Описание |
|---|---|---|
GOTCHA_SCRUB_IP | true | Зануляет IP-адрес пользователя, о котором сообщило событие, перед сохранением. |
GOTCHA_SCRUB_EMAIL | true | Зануляет email пользователя, о котором сообщило событие, перед сохранением. |
GOTCHA_SCRUB_KEYS | встроенный список (password,passwd,token,secret,authorization,auth,cookie,api_key,apikey,access_token,refresh_token,session,credit_card,card_number,cvv) | Список ключей (через запятую, без учёта регистра), значения которых маскируются в тегах/контекстах/стек-трейсах/данных спанов. Если задать эту переменную явно — она полностью заменяет встроенный список, а не дополняет его. Задавайте свой список целиком, если хотите добавить ключ (например, internal_user_id), включив в него и нужные вам стандартные ключи. |
GOTCHA_SCRUB_FREETEXT | false | Дополнительно маскирует email-адреса, встреченные в свободном тексте (сообщение об ошибке, значение исключения, описание спана). Выключено по умолчанию сознательно: наивная маскировка может испортить SQL-запросы или URL в тексте ошибки. Маскируются только email, не телефоны и не другие виды ПДн. |
Security (безопасность)
| Переменная | По умолчанию | Описание |
|---|---|---|
GOTCHA_SECRET_KEY | insecure-dev-secret | Ключ подписи сессионных и OAuth state-cookie. Дефолт публичен (он в исходном коде) — оставлять его на реальном сервере значит разрешить угон аккаунта через OAuth. На не-localhost GOTCHA_BASE_URL приложение отказывается стартовать в режимах web/all, пока не задан свой ключ. Сгенерировать: openssl rand -base64 32. Подробности — в Установке, шаг 6. |
GOTCHA_ALLOW_INSECURE_SECRET | false | Аварийный обход проверки выше — позволяет стартовать с дефолтным ключом даже на не-localhost адресе. Только для нестандартных dev-стендов, никогда не используйте в реальной эксплуатации. |
GOTCHA_REGISTRATION | invite | Режим самостоятельной регистрации: open — открыта всем; invite — самостоятельная регистрация закрыта, новые пользователи попадают в организацию только по ссылке-приглашению; closed — самостоятельная регистрация выключена полностью. Первый пользователь на чистом инстансе регистрируется всегда, независимо от этой настройки (bootstrap инстанс-админа). |
GOTCHA_SSRF_ALLOW_PRIVATE | false | Разрешить аптайм-проверкам и исходящим webhook-алертам обращаться к приватным/loopback/link-local адресам (например, 192.168.x.x, 127.0.0.1, 169.254.x.x). Держите false на любом инстансе, доступном нескольким пользователям/организациям — иначе один пользователь может завести «аптайм-проверку» или вебхук, который на самом деле сканирует вашу внутреннюю сеть (SSRF). |
GOTCHA_AUTO_MIGRATE | true | Применять миграции схемы БД автоматически при старте. false — миграции нужно применить отдельным шагом заранее, иначе приложение откажется стартовать на устаревшей схеме. Подробности и когда это нужно — в Обновлении. |
GOTCHA_EXTERNAL_CHANNEL_DETAILS | true | Отправлять ли текст ошибки (заголовок/culprit/тело) во внешние каналы алертов (Telegram/webhook). false — отправляется только обезличенная ссылка обратно на инстанс, без текста ошибки (текст ошибки может содержать персональные данные, которые вы не хотите, чтобы покидали периметр). |
Uptime & probe (аптайм и выносные пробы)
| Переменная | По умолчанию | Описание |
|---|---|---|
GOTCHA_UPTIME_CONCURRENCY | 50 | Сколько аптайм-проверок выполняется одновременно (в режимах uptime/all, а также выносной пробой в режиме probe). |
GOTCHA_LOCAL_REGION | local | Имя встроенного локального региона аптайм-проверок — то, что видно в интерфейсе при выборе региона монитора. |
GOTCHA_PROBE_TOKEN | (пусто) | Только для --mode=probe: bearer-токен, которым выносная проба аутентифицируется к центральному инстансу. Обязателен в этом режиме. |
GOTCHA_SERVER_URL | (пусто) | Только для --mode=probe: базовый URL центрального инстанса Gotcha, к которому подключается проба. Обязателен в этом режиме, должен быть абсолютным http(s)-адресом. |
Режим --mode=probe — это отдельный процесс, разворачиваемый в другом регионе/дата-центре: он не открывает ни PostgreSQL, ни ClickHouse, только ходит наружу к центральному инстансу по HTTP.
OAuth / SSO
Каждый провайдер входа включается независимо. Если включить провайдер, не задав его обязательные секреты — приложение откажется стартовать.
| Переменная | По умолчанию | Описание |
|---|---|---|
GOTCHA_OIDC_ENABLED | false | Включает вход через произвольный OIDC-провайдер (Keycloak, Authentik, Google Workspace и т.п.). Требует GOTCHA_OIDC_ISSUER, _CLIENT_ID, _CLIENT_SECRET. |
GOTCHA_OIDC_ISSUER | (пусто) | URL издателя (issuer) OIDC-провайдера. |
GOTCHA_OIDC_CLIENT_ID / _CLIENT_SECRET | (пусто) | Учётные данные приложения, зарегистрированного у провайдера. |
GOTCHA_OIDC_SCOPES | (пусто) | Дополнительные OAuth-scope сверх стандартных, через пробел/запятую (по конвенции провайдера). |
GOTCHA_OIDC_NAME | (пусто) | Отображаемое имя кнопки входа («Войти через …») в интерфейсе. |
GOTCHA_YANDEX_ENABLED | false | Включает вход через Yandex ID. Требует GOTCHA_YANDEX_CLIENT_ID/_CLIENT_SECRET. |
GOTCHA_VK_ENABLED | false | Включает вход через VK ID. Требует GOTCHA_VK_CLIENT_ID/_CLIENT_SECRET. |
Пошаговая настройка каждого провайдера — в SSO.
Что дальше
- Установка — с чего начать на чистом сервере.
- Резервное копирование и восстановление.
- Обновление.
- SSO.