Конфигурация API сервера


Сервер API Bencher требует JSON-конфигурацию при запуске. Конфигурация может быть предоставлена тремя способами:

  • Переменная окружения BENCHER_CONFIG: Значение должно быть установлено как JSON-конфигурация
  • Переменная окружения BENCHER_CONFIG_PATH: Значение должно быть установлено как путь к файлу, содержащему JSON-конфигурацию
  • Файл /etc/bencher/bencher.json: Файл в этом расположении, содержащий JSON-конфигурацию

Если конфигурация не найдена, загружается конфигурация по умолчанию.

Для обновления конфигурации во время работы сервера администратор может использовать команду CLI bencher server config update, которая обращается к PUT /v0/server/config endpoint. Все обновленные конфигурации сохраняются в переменной окружения BENCHER_CONFIG и на диске по пути BENCHER_CONFIG_PATH.

Пример JSON-конфигурации:

{
"console": {
"url": "https://bencher.example.com"
},
"security": {
"issuer": "https://api.bencher.example.com",
"secret_key": "UJu7Cpxb-zFaJYqXD-3mDDSDyj-ZvfxZFZs-X58xjxPy"
},
"server": {
"bind_address": "0.0.0.0:61016",
"request_body_max_bytes": 1048576,
"tls": {
"type": "as_file",
"cert_file": "/path/to/cert.pem",
"key_file": "/path/to/key.pem"
}
},
"logging": {
"name": "Bencher API",
"log": {
"stderr_terminal": {
"level": "info"
}
},
},
"database": {
"file": "/var/lib/bencher/data/bencher.db",
"data_store": {
"service": "aws_s3"
"access_key_id": "ABC123DoRemMiABC123",
"secret_access_key": "AA3Chr-JSF5sUQqKwayx-FvCfZKsMev-5BqPpcFC3m7",
"access_point": "arn:aws:s3:some-region-1:123456789:accesspoint/my-bucket/path/to/backup/dir"
}
},
"smtp": {
"hostname": "mailbonobo.com",
"port": 587,
"starttls": true,
"username": "bencher",
"secret": "WM3F2u9cqSNdBPLfy9sJ5kk9",
"from_name": "Bencher",
"from_email": "info@bencher.example.com"
},
"plus": {
"disaster_recovery": {
"busy_timeout": 5000,
"replicas": [
{
"scheme": "s3",
"bucket": "my-bucket",
"path": "path/to/replicate",
"access_key_id": "ABC123DoRemMiABC123",
"secret_access_key": "AA3Chr-JSF5sUQqKwayx-FvCfZKsMev-5BqPpcFC3m7"
}
]
},
"stats": {
"offset": 11242,
"enabled": true
}
}
}

console

ИмяПримерПо умолчаниюОбяз.Описание
urlhttps://bencher.example.comhttp://localhost:3000ДаУказывает URL для хоста консоли Bencher UI.

security

ИмяПримерПо умолчаниюОбяз.Описание
issuerhttps://api.bencher.example.com“bencher.dev”НетУказывает выпускающий орган JSON Web Token (JWT). ВНИМАНИЕ Изменение этого значения приведет к тому, что все ранее созданные JWT больше не проходят проверку.
secret_key“UJu7Cpxb-zFaJYqXD-3mDDSDyj-ZvfxZFZs-X58xjxPy”Случайный UUID v4ДаУказывает ключ, используемый для генерации всех токенов. ОН ДОЛЖЕН БЫТЬ ОЧЕНЬ БЕЗОПАСНЫМ! Значение по умолчанию - это случайно сгенерированный UUID v4. При записи он будет выглядеть как ************.

server

Этот раздел основан на конфигурации сервера Dropshot.

ИмяПримерПо умолчаниюОбяз.Описание
bind_address“0.0.0.0:61016”“0.0.0.0:61016”ДаУказывает, что сервер должен привязываться к данному IP-адресу и TCP-порту. В общем случае серверы могут привязываться к более чем одному IP-адресу и порту, но это пока не поддерживается.
request_body_max_bytes10485761048576ДаУказывает максимальное количество байт, разрешенное в теле запроса. Большие запросы получат ошибку 400.
tls.type“as_file”---НетУказывает, используется ли и как информация о сертификате и ключе TLS. Действительные значения включают “as_file” и “as_bytes”.
tls.cert_file“/path/to/cert.pem”---Только если tls.type = as_fileУказывает путь к файлу PEM, содержащему сертификат для идентификации сервера. Первый сертификат - это конечный сертификат субъекта, а оставшиеся - промежуточные сертификаты на пути к доверенному CA. Если указано, сервер будет прослушивать только TLS-соединения.
tls.key_file“/path/to/key.pem”---Только если tls.type = as_fileУказывает путь к файлу PEM, содержащему закрытый ключ, который будет использовать сервер. Если указано, сервер будет прослушивать только TLS-соединения.
tls.certs------Только если tls.type = as_bytesТо же, что и tls.cert_file, но предоставляемое в виде массива байт данных сертификата.
tls.key------Только если tls.type = as_bytesТо же, что и tls.key_file, но предоставляемое в виде массива байт данных ключа.

logging

Этот раздел основан на конфигурации журнала Dropshot.

ИмяПримерПо умолчаниюОбязательноОписание
name“Bencher API”“Bencher API”ДаЗадает название логгера.
log.mode“stderr_terminal”“stderr_terminal”ДаУправляет расположением журнала сервера. Допустимые режимы - “stderr_terminal” и “file”. Если режим - `“stderr_terminal”, человеко-читаемый вывод, возможно, с цветами и другим форматированием терминала, будет отправлен в stderr. Если режим - “file”, вывод в формате Bunyan будет отправлен на путь в файловой системе, заданный log.path. Смотрите также log.if_exists, который контролирует поведение, если путь назначения уже существует.
log.level“info”“info”ДаЗадает уровень тяжести сообщений в логе. Допустимые значения включают “trace”, “debug”, “info”, “warn”, “error” и “critical”, которые отражают растущую тяжесть. Сообщения лога указанного уровня и более высоких уровней будут включены в лог.
log.path------Только если log.mode = “file”Если log.mode равно “file”, это свойство определяет путь к файлу журнала. Смотри также log.if_exists.
log.if_exists------Только если log.mode = “file”Если log.mode равно “file”, это свойство задает что делать, если файл журнала уже существует. Допустимые значения включают “append” (что добавляет к существующему файлу), “truncate” (приведение существующего файла к изначальному), и “fail” (сервер немедленно остановит работу с выводом ошибки).

database

ИмяПримерПо умолчаниюОбязательноОписание
file“path/to/database.db”“/var/lib/bencher/data/bencher.db”ДаУправляет расположением базы данных сервера.
data_store.service“aws_s3”---НетЗадает внешний сервис для хранения данных. Допустимые значения - “aws_s3”.
data_store.access_key_id“ABC123DoRemMiABC123”---Только если data_store.service = “aws_s3”Если data_store.service = “aws_s3”, это свойство указывает идентификатор ключа доступа AWS. Смотрите также data_store.service.
data_store.secret_access_key“AA3Chr-JSF5sUQqKwayx-FvCfZKsMev-5BqPpcFC3m7”---Только если data_store.service = “aws_s3”Если data_store.service = “aws_s3”, это свойство указывает секретный ключ доступа AWS. Смотрите также data_store.service. При логировании он будет обфусцирован как ************.
data_store.access_point“arn:aws:s3:some-region-1:123456789:accesspoint/my-bucket/path/to/backup/dir”---Только если data_store.service = “aws_s3”Если data_store.service = “aws_s3”, это свойство указывает точку доступа AWS S3. Смотрите также data_store.service.

smtp

В этом разделе указывается конфигурация сервиса SMTP. Весь раздел является необязательным. Если он не указан, все сообщения будут отправляться в logging.

ИмяПримерПо умолчаниюОбязательноОписание
hostname“mailbonobo.com”---ДаЗадает адрес SMTP.
port587587НетЗадает порт SMTP.
starttlstruetrueНетУправляет применением протокола STARTTLS для соединения SMTP.
username“bencher”---ДаЗадает имя пользователя на хосте SMTP.
secret“WM3F2u9cqSNdBPLfy9sJ5kk9”---ДаУказывает пароль для имени пользователя на хосте SMTP. При логировании он будет обфусцирован как ************.
from_name“Bencher”---ДаЗадает имя, которое будет отображаться в секции “от кого” во всех электронных письмах.
from_emailinfo@bencher.example.com---ДаУстанавливает адрес электронной почты, который будет отображаться в секции “от кого” во всех электронных письмах.

plus

Этот раздел посвящен функциям, которые покрываются лицензией Bencher Plus.

plus.github

В этом разделе указывается конфигурация приложения GitHub, используемого для аутентификации OAuth2. У вас должна быть действующая лицензия Bencher Plus Enterprise для хотя бы одной организации на сервере. Весь раздел является необязательным. Если он не указан, то аутентификация с помощью GitHub не будет включена.

НазваниеПримерПо умолчаниюОбязательноОписание
client_idIv1.12864abcd1232048---ДаУказывает идентификатор клиента для вашего приложения GitHub. Идентификатор клиента отличается от идентификатора приложения. Вы можете найти идентификатор клиента на странице настроек вашего приложения. Для получения дополнительной информации о переходе на страницу настроек вашего приложения GitHub, см. Изменение регистрации приложения GitHub.
client_secret00000abcd12345wxyz123456789abcdefgh0000---ДаСекретный ключ клиента для вашего приложения GitHub. Вы можете сгенерировать секретный ключ на странице настроек вашего приложения.

plus.disaster_recovery

Этот раздел описывает конфигурацию восстановления после аварий. Bencher поддерживает непрерывное реплицирование всех изменений базы данных. Для выполнения резервных копий по запросу или по расписанию, см. раздел конфигурации database.data_store.

Существует четыре схемы репликации:

  • file: Реплицирование в локальную файловую систему
    • path: Путь для репликации
  • sftp: Реплицирование по SFTP
    • host: Имя хоста целевой системы
    • port: Номер порта целевой системы
    • user: Имя пользователя на целевой системе
    • password: (Опционально) Пароль на целевой системе
    • path: (Опционально) Путь на целевой системе
    • key_path: (Опционально) Путь к SSH ключу
  • s3: Реплицирование в любое совместимое S3 хранилище
    • bucket: Имя bucket
    • path: (Опционально) Путь в bucket
    • endpoint: (AWS: Опционально | Не AWS: Обязательно) Конечная точка репликации
    • region: (Опционально) Регион bucket
    • access_key_id: Ключ доступа S3
    • secret_access_key: Секретный ключ доступа S3
  • abs: Реплицирование в Azure Blob Storage
    • account_name: Имя учетной записи
    • bucket: Имя bucket
    • path: (Опционально) Путь в bucket
    • account_key: Ключ учетной записи Azure
  • gcs: Реплицирование в Google Cloud Storage
    • bucket: Имя bucket
    • path: (Опционально) Путь в bucket
    • GOOGLE_APPLICATION_CREDENTIALS: Переменная окружения, указывающая на путь к файлу с учетными данными сервисного аккаунта

Все четыре схемы репликации имеют следующие дополнительные опции:

  • retention: (Опционально) Время, в течение которого будут сохраняться файлы snapshot и WAL. По истечении этого времени будет создан новый snapshot, а старый будет удален. Файлы WAL, которые существуют до самого старого snapshot, также будут удалены. Значение по умолчанию: 24h.
  • retention_check_interval: (Опционально) Указывает, как часто Bencher будет проверять необходимость применения политики retention. Значение по умолчанию: 1h.
  • snapshot_interval: (Опционально) Указывает, как часто будут создаваться новые snapshots. Это используется для уменьшения времени восстановления, так как новые snapshots будут содержать меньшее количество WAL кадров для применения. Политика retention также применяется к этим snapshots. Если вы не указываете интервал создания snapshot, то новый snapshot будет создан при каждом выполнении retention. По умолчанию retention выполняется каждые 24 часа.
  • validation_interval: (Опционально) Если указано, Bencher автоматически восстановит и проверит, что данные на реплике соответствуют локальной копии. По умолчанию отключено. Включение этой функции может значительно увеличить стоимость запуска Bencher, так как большинство облачных сервисов взимают плату за загрузки.
  • sync_interval: (Опционально) Частота, с которой кадры передаются на реплику. Значение по умолчанию: 1s. Увеличение частоты может значительно повысить затраты на облачное хранилище.
ИмяПримерПо умолчаниюОбязательноОписание
busy_timeout50005000НетУказывает тайм-аут занятости для базы данных в миллисекундах.
replicas[ … ]---ДаУказывает массив реплик.
replicas[replica]{ … }---ДаУказывает объект реплики.
replicas[replica].scheme“s3”---ДаУказывает схему репликации. Для всех остальных ключей replica см. список выше.

plus.stats

В этом разделе указывается, собираются ли и когда статистические данные сервера. Весь раздел является необязательным. Если он не указан, будут использованы перечисленные значения по умолчанию. То есть, статистика сервера собирается, если вы на это не отказываетесь. Установите значение enabled в false, чтобы отключить сбор статистики сервера.

НазваниеПримерПо умолчаниюОбязательноОписание
offset1124211242НетОпределяет смещение от полуночи в секундах для сбора статистики сервера. По умолчанию это происходит в 03:07:22 UTC.
enabledtruetrueНетКонтролирует, собирается ли статистика сервера. Установите значение false, чтобы отказаться.


Published: Fri, October 27, 2023 at 8:40:00 AM UTC | Last Updated: Fri, June 21, 2024 at 6:14:00 PM UTC