API 服务器配置


Bencher API 服务器在启动时需要一个 JSON 配置。 这个配置可以通过以下三种方式提供:

  • BENCHER_CONFIG 环境变量:该值应设置为 JSON 配置
  • BENCHER_CONFIG_PATH 环境变量:该值应设置为包含 JSON 配置文件的路径
  • /etc/bencher/bencher.json 文件:此位置的文件包含 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": "/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指定Bencher UI控制台主机的URL。

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编码的PKCS #8文件的路径,该文件包含服务器将使用的私钥。如果指定,服务器只会为TLS连接监听。
tls.certs------只有当 tls.type = as_bytes 时和 tls.cert_file 相同,但以证书数据的字节数组形式提供。
tls.key------只有当 tls.type = as_bytes 时和 tls.key_file 相同,但以键数据的字节数组形式提供。

logging

本节基于 Dropshot logging 配置

名称例子默认值必选项说明
name“Bencher API”“Bencher API”指定日志记录器的名称。
log.mode“stderr_terminal”“stderr_terminal”控制服务器日志记录的去向。有效模式为 “stderr_terminal” 和 “file”。如果模式是"stderr-terminal",则以彩色及可能的其他终端格式化的方式将可读输出发送至标准错误。如果模式是 “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 访问密钥 ID。参见 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控制 SMTP 连接是否使用 STARTTLS 协议。
username“bencher”---指定 SMTP 主机的用户名。
secret“WM3F2u9cqSNdBPLfy9sJ5kk9”---指定 SMTP 主机的用户密钥。当进行记录时,它将显示为 ************
from_name“Bencher”---指定将出现在所有邮件发件人部分的名称。
from_emailinfo@bencher.example.com---指定将出现在所有邮件发件人部分的电子邮件。

plus

此部分用于介绍由Bencher Plus License覆盖的特性。

plus.github

此部分指定了用于 OAuth2 认证的 GitHub 应用的配置。 服务器上至少有一个组织必须拥有有效的 Bencher Plus 企业 许可证。 整个部分是可选的。 如果未指定,则不会启用与 GitHub 的认证。

名称示例默认值是否必要描述
client_idIv1.12864abcd1232048---为您的 GitHub App 指定 client ID。client ID 与 app ID 不同。您可以在应用的设置页面上找到 client ID。有关导航到 GitHub 应用设置页面的更多信息,请参见 修改 GitHub App 注册.
client_secret00000abcd12345wxyz123456789abcdefgh0000---您的 GitHub 应用的client secret。您可以在应用的设置页面上生成 client secret。

plus.disaster_recovery

此部分指定了灾难恢复配置。 Bencher支持连续复制所有数据库更改。 欲了解按需运行或计划备份,请参阅配置中的database.data_store部分。

有四种复制scheme

  • file: 复制到本地文件路径
    • path: 复制路径
  • sftp: 通过SFTP复制
    • host: 目标系统主机名
    • port: 目标系统端口号
    • user: 目标系统的用户名
    • password: (可选)目标系统的密码
    • path: (可选)目标系统中的路径
    • key_path: (可选)SSH密钥路径
  • s3: 复制到任何S3兼容的Blob存储
    • bucket: 存储桶名称
    • path: (可选)存储桶中的路径
    • endpoint: (AWS:可选 | 非AWS:必需)复制端点
    • region: (可选)存储桶区域
    • access_key_id: S3访问密钥
    • secret_access_key: S3密钥
  • abs: 复制到Azure Blob存储
    • account_name: 账户名称
    • bucket: 存储桶名称
    • path: (可选)存储桶中的路径
    • account_key: Azure账户密钥
  • gcs: 复制到Google云存储
    • bucket: 存储桶名称
    • path: (可选)存储桶中的路径
    • GOOGLE_APPLICATION_CREDENTIALS: 环境变量设置为指向服务账户凭据文件的路径

以上四种复制scheme均有以下附加选项:

  • retention: (可选)快照和WAL文件保留的时间。保留期过后,会创建新的快照并删除旧的。在最旧快照之前存在的WAL文件也将被删除。默认值为24h
  • retention_check_interval: (可选)指定Bencher检查是否需要执行保留的频率。默认值为1h
  • snapshot_interval: (可选)指定创建新快照的频率。这用于减少恢复时间,因为较新的快照将有较少的WAL帧需要应用。保留仍然适用于这些快照。如果未设置快照间隔,则每次执行保留时都会创建新快照。 默认情况下,每24小时进行一次保留。
  • validation_interval: (可选)如果指定,Bencher将自动恢复并验证副本上的数据与本地副本是否匹配。默认情况下禁用。启用此选项可能会显著增加运行Bencher的成本,因为大多数云服务会为下载收费。
  • sync_interval: (可选)将帧推送到副本的频率。默认值为1s。增加频率可能显著增加云存储成本。
名称示例默认值是否必需描述
busy_timeout50005000指定数据库的忙碌超时时间,以毫秒为单位。
replicas[ … ]---指定副本数组。
replicas[replica]{ … }---指定副本对象。
replicas[replica].scheme“s3”---指定复制方案。有关所有其他replica键,请参阅上述列表。

plus.stats

该部分指定是否以及何时收集服务器统计信息。 整个部分是可选的。 如果未指定,将使用列出的默认值。 也就是说,服务器统计信息是默认启用的。 设置enabledfalse以禁用服务器统计。

名称示例默认是否必需描述
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