Configuração do Servidor API


O Servidor da API Bencher requer uma configuração em JSON na inicialização. A configuração pode ser fornecida de três maneiras:

  • Variável de ambiente BENCHER_CONFIG: O valor deve ser definido para a configuração em JSON
  • Variável de ambiente BENCHER_CONFIG_PATH: O valor deve ser definido para o caminho de um arquivo que contenha a configuração em JSON
  • Um arquivo contendo a configuração em JSON localizado em ./bencher.json, relativo ao executável do servidor

Se nenhuma configuração for encontrada, então uma configuração padrão é carregada.

Para atualizar a configuração enquanto o servidor está em execução, um administrador pode usar o comando CLI bencher server config update que aciona a rota PUT /v0/server/config. Todas as configurações atualizadas são salvas na variável de ambiente BENCHER_CONFIG e no disco em BENCHER_CONFIG_PATH.

Exemplo de configuração em 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": {
"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

NomeExemploPadrãoObrigatórioDescrição
urlhttps://bencher.example.comhttp://localhost:3000SimIndica a URL para o console do host do Bencher UI.

security

NomeExemploPadrãoObrigatórioDescrição
issuerhttps://api.bencher.example.com“bencher.dev”NãoIndica o emissor do JSON Web Token (JWT). ATENÇÃO Alterar este valor fará com que todos os JWTs gerados anteriormente não validem.
secret_key“UJu7Cpxb-zFaJYqXD-3mDDSDyj-ZvfxZFZs-X58xjxPy”UUID v4 aleatórioSimIndica a chave usada para gerar todos os tokens. DEVE SER MUITO SEGURA! O valor padrão é um UUID v4 gerado aleatoriamente. Sempre que exibido, aparecerá ofuscado como ************.

server

Esta seção é baseada na configuração do servidor Dropshot.

NomeExemploPadrãoObrigatórioDescrição
bind_address“0.0.0.0:61016”“0.0.0.0:61016”SimEspecifica que o servidor deve se ligar ao dado IP e porta TCP. Em geral, servidores podem se ligar a mais de um IP e porta, mas isso não é (ainda?) suportado. Padrão em “127.0.0.1:0”.
request_body_max_bytes10485761048576SimEspecifica o número máximo de bytes permitidos em um corpo de requisição. Requisições maiores vão receber um erro 400. Padrão em 1024.
tls.type“as_file”---NãoEspecifica se e como a informação do certificado e chave TLS são fornecidos. Valores válidos incluem “as_file” e “as_bytes”.
tls.cert_file“/path/to/cert.pem”---Se tls.type = as_fileIndica o caminho para um arquivo PEM contendo uma cadeia de certificados para o servidor se identificar. O primeiro certificado é o certificado de entidade final, e os restantes são intermediários até um CA confiável. Se especificado, o servidor só aceitará conexões TLS.
tls.key_file“/path/to/key.pem”---Se tls.type = as_fileIndica o caminho para um arquivo PKCS #8 codificado em PEM contendo a chave privada que o servidor usará. Se especificado, o servidor só aceitará conexões TLS.
tls.certs------Se tls.type = as_bytesIdêntico a tls.cert_file, mas fornecido como um array de bytes dos dados de certificado.
tls.key------Se tls.type = as_bytesIdêntico a tls.key_file, mas fornecido como um array de bytes dos dados da chave.

logging

Esta seção é baseada na configuração de logging do Dropshot.

NomeExemploPadrãoObrigatórioDescrição
name“Bencher API”“Bencher API”SimEspecifica o nome do registrador.
log.mode“stderr_terminal”“stderr_terminal”SimControla para onde vai o registro do servidor. Os modos válidos são “stderr-terminal” e “file”. Se o modo for “stderr-terminal”, uma saída legível para humanos, com cores e outras formatações de terminal se possível, será enviada para stderr. Se o modo for “file”, a saída no formato Bunyan será enviada para o caminho do sistema de arquivos fornecido por log.path. Veja também log.if_exists, que controla o comportamento se o caminho de destino já existir.
log.level“info”“info”SimEspecifica qual a gravidade das mensagens de log que devem ser incluídas no log. Os valores válidos incluem “trace”, “debug”, “info”, “warn”, “error”, e “critical”, que estão em ordem crescente de gravidade. As mensagens de log no nível especificado e níveis mais graves serão incluídas no log.
log.path------Apenas se log.mode = “file”Se log.mode é “file”, esta propriedade determina o caminho para o arquivo de log. Veja também log.if_exists.
log.if_exists------Apenas se log.mode = “file”Se log.mode é “file”, esta propriedade especifica o que fazer se o arquivo de log de destino já existir. Os valores válidos incluem “append” (que anexa ao arquivo existente), “truncate” (que trunca o arquivo existente e então o utiliza como se ele acabasse de ser criado), e “fail” (que faz o servidor sair imediatamente com um erro).

database

NomeExemploPadrãoObrigatórioDescrição
file“path/to/database.db”“/var/lib/bencher/data/bencher.db”SimControla para onde vai a base de dados do servidor.
data_store.service“aws_s3”---NãoEspecifica o serviço de armazenamento de dados remoto. Valores validos são “aws_s3”.
data_store.access_key_id“ABC123DoRemMiABC123”---Apenas se data_store.service = “aws_s3”Se data_store.service = “aws_s3”, esta propriedade especifica o ID da chave de acesso do AWS. Veja também data_store.service.
data_store.secret_access_key“AA3Chr-JSF5sUQqKwayx-FvCfZKsMev-5BqPpcFC3m7”---Apenas se data_store.service = “aws_s3”Se data_store.service = “aws_s3”, esta propriedade especifica a chave de acesso secreta do AWS. Veja também data_store.service. Quando registrada, ela aparecerá obfuscada como ************.
data_store.access_point“arn:aws:s3:some-region-1:123456789:accesspoint/my-bucket/path/to/backup/dir”---Apenas se data_store.service = “aws_s3”Se data_store.service = “aws_s3”, esta propriedade especifica o ponto de acesso do AWS S3. Veja também data_store.service.

smtp

Esta seção especifica uma configuração de serviço SMTP. A seção inteira é opcional. Se não especificada, todas as mensagens serão enviadas para logging em vez disso.

NomeExemploPadrãoObrigatórioDescrição
hostname“mailbonobo.com”---SimEspecifica o hostname do SMTP.
port587587NãoEspecifica a porta do SMTP.
starttlstruetrueNãoControla se a conexão do SMTP usa o protocolo STARTTLS.
username“bencher”---SimEspecifica o nome de usuário no host do SMTP.
secret“WM3F2u9cqSNdBPLfy9sJ5kk9”---SimEspecifica o segredo para o nome de usuário no host do SMTP. Sempre que for registrado, ele aparecerá obfuscado como ************.
from_name“Bencher”---SimEspecifica o nome que aparecerá na seção de remetente de todos os e-mails.
from_emailinfo@bencher.example.com---SimEspecifica o e-mail que aparecerá na seção de remetente de todos os e-mails.

plus

Esta seção é para recursos que são cobertos pela Licença Bencher Plus.

plus.github

Esta seção especifica a configuração para um aplicativo GitHub usado para autenticação OAuth2. Você deve ter uma licença Enterprise válida do Bencher Plus para pelo menos uma organização no servidor. A seção inteira é opcional. Se não especificada, a autenticação com o GitHub não será ativada.

NomeExemploPadrãoObrigatórioDescrição
client_idIv1.12864abcd1232048---SimEspecifica o ID do cliente para o seu aplicativo GitHub. O ID do cliente é diferente do ID do aplicativo. Você pode encontrar o ID do cliente na página de configurações do seu aplicativo. Para mais informações sobre como navegar até a página de configurações do seu aplicativo GitHub, veja Modificando um registro de aplicativo GitHub.
client_secret00000abcd12345wxyz123456789abcdefgh0000---SimO segredo do cliente para o seu aplicativo GitHub. Você pode gerar um segredo do cliente na página de configurações do seu aplicativo.

plus.stats

Esta seção especifica se e quando as estatísticas do servidor são coletadas. A seção inteira é opcional. Se não especificado, os valores padrão listados serão usados. Ou seja, as estatísticas do servidor são opt-out. Defina enabled como false para desabilitar as estatísticas do servidor.

NomeExemploPadrãoObrigatórioDescrição
offset1124211242NãoEspecifica o desvio da meia-noite em segundos para a coleta de estatísticas do servidor. Por padrão, roda às 03:07:22 UTC.
enabledtruetrueNãoControla se as estatísticas do servidor são coletadas. Defina como false para optar por não participar.