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
Nome | Exemplo | Padrão | Obrigatório | Descrição |
---|---|---|---|---|
url | ”https://bencher.example.com” | ”http://localhost:3000” | Sim | Indica a URL para o console do host do Bencher UI. |
security
Nome | Exemplo | Padrão | Obrigatório | Descrição |
---|---|---|---|---|
issuer | ”https://api.bencher.example.com” | “bencher.dev” | Não | Indica 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ório | Sim | Indica 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.
Nome | Exemplo | Padrão | Obrigatório | Descrição |
---|---|---|---|---|
bind_address | “0.0.0.0:61016” | “0.0.0.0:61016” | Sim | Especifica 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_bytes | 1048576 | 1048576 | Sim | Especifica 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ão | Especifica 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_file | Indica 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_file | Indica 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_bytes | Idêntico a tls.cert_file, mas fornecido como um array de bytes dos dados de certificado. |
tls.key | --- | --- | Se tls.type = as_bytes | Idê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.
Nome | Exemplo | Padrão | Obrigatório | Descrição |
---|---|---|---|---|
name | “Bencher API” | “Bencher API” | Sim | Especifica o nome do registrador. |
log.mode | “stderr_terminal” | “stderr_terminal” | Sim | Controla 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” | Sim | Especifica 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
Nome | Exemplo | Padrão | Obrigatório | Descrição |
---|---|---|---|---|
file | “path/to/database.db” | “/var/lib/bencher/data/bencher.db” | Sim | Controla para onde vai a base de dados do servidor. |
data_store.service | “aws_s3” | --- | Não | Especifica 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.
Nome | Exemplo | Padrão | Obrigatório | Descrição |
---|---|---|---|---|
hostname | “mailbonobo.com” | --- | Sim | Especifica o hostname do SMTP. |
port | 587 | 587 | Não | Especifica a porta do SMTP. |
starttls | true | true | Não | Controla se a conexão do SMTP usa o protocolo STARTTLS. |
username | “bencher” | --- | Sim | Especifica o nome de usuário no host do SMTP. |
secret | “WM3F2u9cqSNdBPLfy9sJ5kk9” | --- | Sim | Especifica o segredo para o nome de usuário no host do SMTP. Sempre que for registrado, ele aparecerá obfuscado como ************ . |
from_name | “Bencher” | --- | Sim | Especifica o nome que aparecerá na seção de remetente de todos os e-mails. |
from_email | ”info@bencher.example.com” | --- | Sim | Especifica 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.
Nome | Exemplo | Padrão | Obrigatório | Descrição |
---|---|---|---|---|
client_id | Iv1.12864abcd1232048 | --- | Sim | Especifica 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_secret | 00000abcd12345wxyz123456789abcdefgh0000 | --- | Sim | O 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 scheme
s de replicação:
file
: Replicar para um caminho de arquivo localpath
: Caminho para replicar
sftp
: Replicar via SFTPhost
: Nome do host do sistema de destinoport
: Número da porta do sistema de destinouser
: Nome de usuário no sistema de destinopassword
: (Opcional) Senha no sistema de destinopath
: (Opcional) Caminho no sistema de destinokey_path
: (Opcional) Caminho para a chave SSH
s3
: Replicar para qualquer armazenamento de blob compatível com S3bucket
: Nome do bucketpath
: (Opcional) Caminho no bucketendpoint
: (AWS: Opcional | Não-AWS: Obrigatório) Endpoint de replicaçãoregion
: (Opcional) Região do bucketaccess_key_id
: Chave de acesso do S3secret_access_key
: Chave de acesso secreta do S3
abs
: Replicar para o Azure Blob Storageaccount_name
: Nome da contabucket
: Nome do bucketpath
: (Opcional) Caminho no bucketaccount_key
: Chave da conta Azure
gcs
: Replicar para o Google Cloud Storagebucket
: Nome do bucketpath
: (Opcional) Caminho no bucketGOOGLE_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 scheme
s 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.
Nome | Exemplo | Padrão | Obrigatório | Descrição |
---|---|---|---|---|
busy_timeout | 5000 | 5000 | Não | Especifica o tempo limite de ocupação para o banco de dados em milissegundos. |
replicas | [ … ] | --- | Sim | Especifica um array de réplicas. |
replicas[replica] | { … } | --- | Sim | Especifica um objeto de réplica. |
replicas[replica].scheme | “s3” | --- | Sim | Especifica 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.
Nome | Exemplo | Padrão | Obrigatório | Descrição |
---|---|---|---|---|
offset | 11242 | 11242 | Não | Especifica o desvio da meia-noite em segundos para a coleta de estatísticas do servidor. Por padrão, roda às 03:07:22 UTC. |
enabled | true | true | Não | Controla se as estatísticas do servidor são coletadas. Defina como false para optar por não participar. |