Расширенная конфигурация

Databasus из коробки работает с разумными настройками по умолчанию — стандартной установке в один контейнер конфигурация не нужна вовсе. Каждая переменная на этой странице необязательна и не требуется в 99% продакшен-установок

OAuth

По умолчанию в Databasus вход по email и паролю. Дополнительно можно разрешить вход через аккаунт Google или GitHub. Кнопка провайдера появляется, как только задан его client ID, но вход срабатывает, только когда заданы оба значения: и client ID, и client secret.

При регистрации OAuth-приложения укажите redirect-адрес (callback) https://<your-domain>/auth/callback. Из-за этого редиректа для входа через OAuth ваш инстанс должен быть доступен по HTTPS на публичном домене — см. заметку ниже.

Для входа и почты нужен HTTPS. И OAuth-вход, и почта требуют, чтобы инстанс был доступен по HTTPS на публичном домене: OAuth-провайдеры возвращают браузер на https://<your-domain>/auth/callback, а ссылки в письмах должны открываться у получателей. Инстанс только на localhost или на голом HTTP этими функциями пользоваться не сможет. Проще всего получить HTTPS через reverse proxy Caddy.

Google

Создайте OAuth-клиент в Google Cloud Console (APIs & Services → Credentials → Create credentials → OAuth client ID, тип приложения Web application) и добавьте https://<your-domain>/auth/callback как разрешенный redirect URI.

ПеременнаяОписание
GOOGLE_CLIENT_IDClient ID вашего OAuth-клиента Google. Если задан, появляется кнопка "Sign in with Google".
GOOGLE_CLIENT_SECRETClient secret вашего OAuth-клиента Google. Чтобы вход работал, нужен вместе с ID.

GitHub

Создайте OAuth-приложение в настройках разработчика GitHub (Settings → Developer settings → OAuth Apps → New OAuth App) и укажите authorization callback URL https://<your-domain>/auth/callback.

ПеременнаяОписание
GITHUB_CLIENT_IDClient ID вашего OAuth-приложения GitHub. Если задан, появляется кнопка "Sign in with GitHub".
GITHUB_CLIENT_SECRETClient secret вашего OAuth-приложения GitHub. Чтобы вход работал, нужен вместе с ID.

Почта (SMTP)

Подключите почтовый сервер, чтобы Databasus мог отправлять приглашения в рабочие пространства, коды сброса пароля и коды входа. Почтовый сервер считается настроенным, как только задан SMTP_HOST. Без него экран настроек показывает, что почтовый сервер не настроен, а на экране входа нет ссылки для сброса пароля.

Это почтовый сервер инстанса. У каналов уведомлений по email, которые сообщают о бекапах, свои настройки SMTP в форме каждого канала. Поэтому если письма от канала уведомлений доходят, это ничего не говорит о почтовом сервере инстанса. Чтобы проверить его, откройте Databasus settings → Mail server и нажмите Send test email. Письмо придет на ваш адрес, а если доставка не удалась, вы увидите ответ почтового сервера.

Если ваш релей не поддерживает STARTTLS, задайте SMTP_SECURITY=none до обновления. На любом порту, кроме 465, по умолчанию действует режим starttls, а он не продолжает работу без шифрования, так что такой релей не получит ни одного письма, пока переменная не задана. Если инстанс требует код входа по почте, то пока письма не доходят, по паролю не войдет никто. Чтобы вернуть доступ, выключите второй фактор командой docker exec -it databasus ./main --disable-2fa (подробнее — в разделе Перестать запрашивать код при входе).

ПеременнаяОписание
SMTP_HOSTХост почтового сервера (например, smtp.gmail.com). Если переменная задана, почта инстанса включена.
SMTP_PORTПорт почтового сервера (например, 587). Должен быть положительным целым числом, если задан SMTP_HOST.
SMTP_SECURITYЗащита соединения: tls, starttls или none, подробнее — ниже. По умолчанию tls на порту 465 и starttls на всех остальных. С любым другим значением инстанс не запустится.
SMTP_USERИмя пользователя для аутентификации на SMTP.
SMTP_PASSWORDПароль для аутентификации на SMTP. Для Gmail используйте App Password, а не пароль аккаунта.
SMTP_FROMАдрес отправителя: просто адрес (noreply@example.com) или адрес с именем (Acme Backups <noreply@example.com>). Если имени нет, получатели видят Databasus. Если переменная не задана, используется SMTP_USER, когда это адрес почты, а иначе noreply@ и SMTP_HOST, так что логин вроде apikey никогда не станет отправителем. Если значение нельзя разобрать как адрес, инстанс не запустится.
SMTP_HELO_NAMEИмя, которым инстанс представляется почтовому серверу. По умолчанию берется хост из DATABASUS_URL, а если его нет — имя машины. Должно быть именем хоста или адресным литералом вроде [192.0.2.1] или [IPv6:2001:db8::1], иначе инстанс не запустится.
SMTP_INSECURE_SKIP_VERIFYУстановите true, чтобы пропускать проверку TLS-сертификата в режимах tls и starttls. По умолчанию false. Используйте только для серверов с самоподписанным сертификатом в доверенной сети: эта настройка отключает защиту от атак «человек посередине».
DATABASUS_URLПубличный базовый URL инстанса (например, https://backup.example.com). Необязателен: добавляет ссылку в письма-приглашения и задает имя в приветствии по умолчанию. Почта работает и без него.

SMTP_SECURITY выбирает один из трех режимов. У каналов уведомлений по email такой же выбор есть в разделе Advanced settings.

РежимЧто происходит
tlsСоединение зашифровано с первого байта. Обычно порт 465.
starttlsСоединение начинается без шифрования и переводится в зашифрованное до отправки пароля и писем. Если сервер этого не поддерживает, доставка завершается ошибкой, а не продолжается без шифрования. Обычно порт 587.
noneСоединение никогда не шифруется. Подходит для релея без STARTTLS, например локального Postfix на порту 25.

В режиме none пароль SMTP и все письма передаются без шифрования, и их может прочитать любой, кто находится между Databasus и релеем. Выбирайте его только для релея на том же хосте или в доверенной частной сети.

Капча при регистрации (Cloudflare Turnstile)

Если ваш инстанс доступен из публичного интернета, на формы регистрации и входа можно поставить проверку Cloudflare Turnstile, чтобы отсечь ботов. Оба ключа берутся в панели Turnstile, а проверка включается, только когда заданы оба.

Если нужно вообще закрыть регистрацию, а не просто прикрыть ее капчей, капча не понадобится — откройте в интерфейсе Databasus settings → Allow sign up и выключите эту опцию. Форма регистрации исчезнет совсем.

ПеременнаяОписание
CLOUDFLARE_TURNSTILE_SITE_KEYПубличный site key Turnstile — им рендерится виджет в браузере.
CLOUDFLARE_TURNSTILE_SECRET_KEYСекретный ключ Turnstile — им бэкенд проверяет ответы на капчу.

Права Docker-хранилища

Обычно Databasus берет числовые ID пользователя и группы у существующего каталога pgdata, затем проверяет mount с бекапами и корневой каталог данных. Если подходящего владельца нет, используется 999. Задавайте PUID или PGID, только когда автоматический выбор не подходит для вашего bind mount, CIFS или NFS. Допустимы десятичные значения от 1 до 4294967294.

ПеременнаяАвтоматическое значениеУчетная запись
PUIDВладелец mount или 999Пользователь databasus
PGIDГруппа mount или 999Основная группа databasus

Databasus и PostgreSQL работают под одной учетной записью ОС без прав root с именем databasus.

Entrypoint запускается с правами root внутри контейнера, выбирает ID и пробует выполнить chown и chmod. После этого он проверяет полный цикл работы с файлами от имени databasus. Mount может работать, даже если файловая система запрещает менять владельца или режим. Произвольное значение Docker user: не поддерживается.

ERROR: Databasus cannot write to local storage paths /databasus-data/temp and /databasus-data/backups as UID 999 and GID 999.
Required operation: save a file through local storage.
Set PUID and PGID or fix the mounted directory permissions: https://databasus.com/advanced-config/#docker-storage-permissions
Details: permission denied

Четыре прежние переменные для отдельных сервисов удалены сознательно. При обновлении уберите их из конфигурации. Если автоматически выбранным ID не хватает прав, контейнер остановится и укажет неудавшуюся операцию вместе со ссылкой на эту инструкцию.

Телеметрия

По умолчанию Databasus отправляет анонимную телеметрию использования. Она не содержит персональных данных и помогает нам понять, как используется проект. Что именно собирается, написано в политике конфиденциальности, и телеметрию можно полностью выключить.

ПеременнаяПо умолчаниюОписание
IS_DISABLE_ANONYMOUS_TELEMETRYfalseУстановите true, чтобы отключить анонимную телеметрию использования.

Логирование

Databasus пишет логи в stdout и дублирует их в формате JSON в файл databasus.log на томе с данными. Если задать OPEN_TELEMETRY_URL, он также экспортирует их по OpenTelemetry в бэкенд вроде VictoriaLogs, Graylog, SigNoz, Grafana Loki, Datadog или Honeycomb, либо в OpenTelemetry Collector, который сам является OTLP-приемником.

  • Транспорт определяется схемой. http:// и https:// отправляют OTLP/HTTP и используют URL как есть, включая путь; grpc:// и grpcs:// отправляют OTLP/gRPC и используют только хост и порт.
  • Аутентификация задается в OPEN_TELEMETRY_HEADERS или прямо в URL в виде user:password@host.
  • Секреты (пароли, токены, учетные данные) в URL вычищаются до того, как запись покидает процесс.
  • Записи аудита уходят вместе с логами приложения с меткой log_type=audit и игнорируют LOG_LEVEL, поэтому повышение уровня никогда не обрежет аудиторский след.
ПеременнаяПо умолчаниюОписание
OPEN_TELEMETRY_URL—Полный URL OTLP-эндпоинта, включая путь. Не задавайте, чтобы логи оставались в контейнере. Query-строка, отсутствующий хост или неизвестная схема останавливают контейнер при старте, вместо того чтобы экспортировать в никуда.
OPEN_TELEMETRY_HEADERS—Пары key=value через запятую, отправляемые с каждым экспортом, обычно API-ключ. Значения percent-декодируются, как в стандартном формате OTEL_EXPORTER_OTLP_HEADERS.
LOG_LEVELinfoОдно из debug, info, warn или error. Нераспознанное значение откатывается к info.
LOG_FILE_IS_ENABLEDtrueПишет databasus.log рядом с остальными данными, с ротацией на 5 МБ и хранением 3 старых файлов. Установите false, если ваша платформа уже собирает stdout.

Значения для популярных бэкендов, каждое с заголовком аутентификации. Замените хосты, регионы и ключи на свои:

БэкендOPEN_TELEMETRY_URLOPEN_TELEMETRY_HEADERS
VictoriaLogshttp://victoria-logs:9428/insert/opentelemetry/v1/logsAuthorization=Basic%20dXNlcjpwYXNzd29yZA== — учетные данные, которые ждет ваш vmauth или reverse proxy: у самого VictoriaLogs на пути приема аутентификации нет.
OpenTelemetry Collectorgrpc://otel-collector:4317Authorization=Bearer%20your-token — соответствует расширению bearertokenauth или basicauth на приемнике. Collector, доступный только внутри вашей сети, обычно не требует ничего.
Graylog 6.2+grpc://graylog:4317Authorization=Bearer%20your-token — токен, заданный на входе OpenTelemetry (gRPC). Вход также принимает mTLS вместо токена.
SigNoz Cloudgrpcs://ingest.eu.signoz.cloud:443signoz-ingestion-key=your-ingestion-key
Grafana Cloudhttps://otlp-gateway-prod-eu-west-0.grafana.net/otlp/v1/logsAuthorization=Basic%20<base64> — base64 от instance-id:api-token
Honeycombhttps://api.honeycomb.io/v1/logsx-honeycomb-team=your-api-key
Datadog Agentgrpc://datadog-agent:4317Не нужны — API-ключ хранит сам Agent и пересылает все от вашего имени.

Значения заголовков percent-декодируются, поэтому пробел после Basic или Bearer записывается как %20, а запятая внутри значения — как %2C. Basic-аутентификацию можно указать и прямо в URL в виде https://user:password@host/path — Databasus превратит ее в тот же заголовок и не пустит в логи. Через http:// и grpc:// ключи и пароли идут открытым текстом, так что вне доверенной сети используйте https:// или grpcs://.

Скрипт аналитики

Databasus может встроить в приложение ваш собственный скрипт аналитики или трекинга — Google Analytics, Plausible, Umami и похожие. Когда задан ANALYTICS_SCRIPT, его значение вставляется в <head> страницы при старте.

Предупреждение о безопасности: значение вставляется как есть, как сырой HTML и JavaScript, и получает полный доступ к интерфейсу Databasus в браузере каждого посетителя. Задавайте только тот сниппет, который вы полностью контролируете и которому доверяете.

ПеременнаяОписание
ANALYTICS_SCRIPTСвой <script>, вставляемый перед закрывающим тегом </head>. Не задавайте, чтобы аналитики не было.