API 서버 설정


Bencher API 서버는 시작할 때 JSON 구성이 필요합니다. 구성은 세 가지 방법으로 제공할 수 있습니다:

  • BENCHER_CONFIG 환경 변수: 값은 JSON 구성으로 설정되어야 합니다.
  • BENCHER_CONFIG_PATH 환경 변수: 값은 JSON 구성이 포함된 파일의 경로로 설정되어야 합니다.
  • 서버 실행 파일에 상대적인 ./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": {
"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:3000Bencher UI 콘솔 호스트의 URL을 지정합니다.

security

이름기본값필수설명
issuerhttps://api.bencher.example.com“bencher.dev”아니오JWT(Jason Web Token) 발행자를 지정합니다. 경고 이 값을 변경하면 이전에 생성된 모든 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 인코딩 PKCS #8 파일 경로를 지정합니다. 설정될 경우, 서버는 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”“/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 secret access key를 지정합니다. 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 accesspoint를 지정합니다. 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 라이센스에서 다루는 기능에 대한 것입니다.

plus.github

이 섹션은 OAuth2 인증을 위해 사용되는 GitHub 앱의 설정을 지정합니다. 서버에 최소 한 개의 조직이 Bencher Plus Enterprise 라이센스를 유효하게 가져야 합니다. 전체 섹션은 선택 사항입니다. 지정되지 않으면 GitHub을 사용한 인증이 활성화되지 않습니다.

이름예시기본값필수설명
client_idIv1.12864abcd1232048---GitHub 앱에 대한 클라이언트 ID를 지정합니다. 클라이언트 ID는 앱 ID와 다릅니다. 클라이언트 ID는 앱의 설정 페이지에서 찾을 수 있습니다. GitHub 앱 설정 페이지로 이동하는 방법에 대한 자세한 정보는 GitHub 앱 등록 수정를 참조하십시오.
client_secret00000abcd12345wxyz123456789abcdefgh0000---GitHub 앱에 대한 클라이언트 시크릿입니다. 앱의 설정 페이지에서 클라이언트 시크릿을 생성할 수 있습니다.

plus.stats

이 섹션은 서버 통계가 수집되는 조건과 시간을 지정합니다. 전체 섹션은 선택 사항입니다. 지정되지 않으면 나열된 기본값이 사용됩니다. 즉, 서버 통계는 opt-out 형태입니다. 서버 통계를 비활성화하려면 enabledfalse로 설정합니다.

이름예시기본값필수설명
offset1124211242아니오서버 통계 수집을 위한 자정으로부터의 오프셋(초)를 지정합니다. 기본적으로 UTC 기준으로 03:07:22에 실행됩니다.
enabledtruetrue아니오서버 통계가 수집되는지를 컨트롤합니다. false로 설정하면 opt-out합니다.