Configuração do Servidor API


O Bencher API Server requer uma configuração JSON no momento da 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 JSON
  • Variável de ambiente BENCHER_CONFIG_PATH: O valor deve ser definido para o caminho de um arquivo que contenha a configuração JSON
  • Arquivo /etc/bencher/bencher.json: Um arquivo neste local contendo a configuração JSON

Se nenhuma configuração for encontrada, uma configuração padrão será carregada.

Para atualizar a configuração enquanto o servidor está em execução, um administrador pode usar o comando do CLI bencher server config update que acessa o endpoint 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 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

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.
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.
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.disaster_recovery

Esta seção especifica a configuração de recuperação de desastres. O Bencher suporta a replicação contínua de todas as alterações no banco de dados. Para backups sob demanda ou agendados, consulte a seção database.data_store da configuração.

Existem quatro schemes de replicação:

  • file: Replicar para um caminho de arquivo local
    • path: Caminho para replicar
  • sftp: Replicar via SFTP
    • host: Nome do host do sistema de destino
    • port: Número da porta do sistema de destino
    • user: Nome de usuário no sistema de destino
    • password: (Opcional) Senha no sistema de destino
    • path: (Opcional) Caminho no sistema de destino
    • key_path: (Opcional) Caminho para a chave SSH
  • s3: Replicar para qualquer armazenamento de blob compatível com S3
    • bucket: Nome do bucket
    • path: (Opcional) Caminho no bucket
    • endpoint: (AWS: Opcional | Não-AWS: Obrigatório) Endpoint de replicação
    • region: (Opcional) Região do bucket
    • access_key_id: Chave de acesso do S3
    • secret_access_key: Chave de acesso secreta do S3
  • abs: Replicar para o Azure Blob Storage
    • account_name: Nome da conta
    • bucket: Nome do bucket
    • path: (Opcional) Caminho no bucket
    • account_key: Chave da conta Azure
  • gcs: Replicar para o Google Cloud Storage
    • bucket: Nome do bucket
    • path: (Opcional) Caminho no bucket
    • GOOGLE_APPLICATION_CREDENTIALS: Variável de ambiente configurada para o caminho do arquivo que aponta para as credenciais da conta de serviço

Todos os quatro schemes de replicação têm as seguintes opções adicionais:

  • retention: (Opcional) A quantidade de tempo que os arquivos de snapshot e WAL serão mantidos. Após o período de retenção, um novo snapshot será criado e o antigo será removido. Arquivos WAL que existirem antes do snapshot mais antigo também serão removidos. O padrão é 24h.
  • retention_check_interval: (Opcional) Especifica com que frequência o Bencher verificará se a retenção precisa ser aplicada. O padrão é 1h.
  • snapshot_interval: (Opcional) Especifica com que frequência novos snapshots serão criados. Isso é usado para reduzir o tempo de restauração, já que snapshots mais novos terão menos frames WAL para aplicar. A retenção ainda se aplica a esses snapshots. Se você não definir um intervalo de snapshot, um novo snapshot será criado sempre que a retenção for realizada. A retenção ocorre a cada 24 horas por padrão.
  • validation_interval: (Opcional) Quando especificado, o Bencher restaurará automaticamente e validará que os dados na réplica correspondem à cópia local. Desativado por padrão. Habilitar isso pode aumentar significativamente o custo de execução do Bencher, já que a maioria dos serviços em nuvem cobra pelos downloads.
  • sync_interval: (Opcional) Frequência com que os frames são enviados para a réplica. O padrão é 1s. Aumentar a frequência pode aumentar significativamente os custos de armazenamento em nuvem.
NomeExemploPadrãoObrigatórioDescrição
busy_timeout50005000NãoEspecifica o tempo limite de ocupação para o banco de dados em milissegundos.
replicas[ … ]---SimEspecifica um array de réplicas.
replicas[replica]{ … }---SimEspecifica um objeto de réplica.
replicas[replica].scheme“s3”---SimEspecifica o esquema de replicação. Para todas as outras chaves de replica, consulte a lista acima.

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.


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