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


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

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

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

Чтобы обновить конфигурацию во время работы сервера, администратор может использовать команду CLI bencher server config update, которая обращается по маршруту PUT /v0/server/config. Все обновленные конфигурации сохраняются в переменной окружения 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": "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"
  },
  "apm": {
    "sentry": {
      "dsn": "https://0123abc1023abc@987efg987efg.ingest.sentry.io/0123456789"
    }
  },
  "plus": {
    "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-адресу и порту, но это пока не поддерживается. Значение по умолчанию “127.0.0.1:0”.
request_body_max_bytes10485761048576ДаУказывает максимальное количество байт, разрешенное в теле запроса. Большие запросы получат ошибку 400. Значение по умолчанию 1024.
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”“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.stats

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

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