はじめに
senca-node の設定は、コマンドラインのオプションか、--config FILE で渡す JSON ファイルで行います。両方あればオプションが勝ちます。手元で一覧を見たいときは senca-node --help を使ってください。
本番に置く前に、少なくとも 2 つは必ず決めてください。1 つは --data-dir で、設定と状態、録画、シークレットを暗号化する鍵がここに保存されます。もう 1 つは公開 URL(外から見たときの URL)で、待ち受けるアドレスとは別に指定する必要があります。
基本的な規則
オプションは --name value の形で書きます。--name=value とは書けません。値を取らないのは --capture-synthetic・--verify-recordings・--log-json・--rooms-cascade の 4 つだけです。
知らないオプションがあれば使い方を表示して終了します(終了コード 2)。設定に誤りがあるときも同じで、正しい部分だけで起動することはありません。
--config FILE を指定すると、先にその JSON を読み、そのあとでコマンドラインのオプションで上書きします。--config をオプションの前に書いても後に書いても結果は同じです。
待ち受けるアドレスは 0.0.0.0:1935 や [::]:8080 のように IP:ポート で書き、ホスト名は使えません。--http 以外は off で待ち受けをやめられます。
このほか、--help(-h)は使い方を表示して終了します。--healthcheck URL を最初の引数に置くと、ノードを起動せずにヘルスチェックだけを行います(運用 を参照)。
オプション
待ち受けるアドレス
| オプション | 値 | 既定 | 説明 |
|---|---|---|---|
--http | ADDR | 0.0.0.0:8080 | HTTP の待ち受けです。管理 API(/api/v1)、SSE、署名付きの HLS(/s/...)、WHIP/WHEP、シグナリング(/signaling)、管理画面、/healthz、/readyz はすべてここで受け付けます。無効にはできません |
--https | ADDR|off | 無効 | HTTPS の待ち受けです。受け付ける内容は HTTP と同じです。--tls-cert と --tls-key が必要です |
--rtmp | ADDR|off | 0.0.0.0:1935 | RTMP の待ち受けです。配信(publish)と再生(play)の両方を受け付けます |
--rtmps | ADDR|off | 無効 | RTMPS の待ち受けです。--tls-cert と --tls-key が必要です |
--srt | ADDR|off | 無効 | SRT の待ち受けです(UDP) |
--rtsp | ADDR|off | 無効 | RTSP での再生(play)の待ち受けです(TCP) |
--webrtc-udp | ADDR|off | 無効 | WebRTC で使う UDP のポートです。WHIP・WHEP・ルームで共用します。0.0.0.0:ポート で待ち受けると、ノードのネットワークインターフェースのアドレス(ループバックを除く)を ICE の候補として相手に知らせます。特定のアドレスで待ち受けると、そのアドレスを知らせます |
--webrtc-public-ip | IP[,IP…] | なし | ICE の候補として相手に知らせる IP アドレスです。ポートは --webrtc-udp のものを使います。8 個まで指定でき、オプションを繰り返して書くこともできます。NAT や Docker の内側で動かすときのように、相手から見えるアドレスが待ち受けるアドレスと違う場合に指定します |
--quic | ADDR|off | 無効 | QUIC v1 の UDP ポートです。1 つのポートで、HTTP/3(ALPN h3)、WebTransport、MoQ draft-22(ALPN moqt-22。WebTransport では /moq)を受け付けます。HTTP/3 で使えるパスは、SSE と /signaling を除いて HTTP と同じです。--tls-cert と --tls-key が必要です。有効にすると、HTTP・HTTPS の応答に Alt-Svc: h3=":ポート" が付きます(取り込みと再生 の「MoQ と HTTP/3」を参照) |
--tls-cert | FILE | なし | --https・--rtmps・--quic で使う証明書チェーンです(PEM 形式。先頭にサーバー証明書を置きます) |
--tls-key | FILE | なし | 上の証明書の秘密鍵です(PEM 形式)。サーバー証明書の公開鍵と対にならない鍵を指定すると、起動しません |
公開 URL
API の応答(ingest)や再生 URL に書き込まれる、外から見たときの URL です。待ち受けるアドレスからは自動で決まらないので、別に指定します。
| オプション | 既定 | 使われる場所 |
|---|---|---|
--public-http-url | http://127.0.0.1:8080 | 再生 URL の hls・whep、ingest.whip_url |
--public-rtmp-url | rtmp://127.0.0.1:1935 | ingest.rtmp_url({URL}/live)、再生 URL の rtmp({URL}/play/{id}?...) |
--public-srt-url | なし | ingest.srt_url(指定した値をそのまま使います)。指定しない場合、srt_url は応答に含まれません |
--public-rtsp-url | なし | 再生 URL の rtsp({URL}/live/{id}?...)。指定しない場合は応答に含まれません |
ポート番号を既定から変えたときや、リバースプロキシ・コンテナーの外から使うときは、ここを実際の URL に合わせないと、配信者や視聴者に届かない URL が返ります。
再生・録画
| オプション | 値 | 既定 | 説明 |
|---|---|---|---|
--max-playback-ttl | 秒 | 86400 | 再生 URL の ttl_secs に指定できる上限です。ライブと録画の両方に適用します。0 は指定できません |
--reconnect-grace | ミリ秒 | 30000 | 配信者の接続が切れたあと、再接続を待つ時間です。この時間内に再接続すれば、同じ配信の続きとして扱います |
--record-queue | N | 4096 | 録画の書き込みを待つキューの大きさの基準値です(16〜1048576)。ストリームごとのキューは N/64 件で、16〜4096 の範囲に収めます。既定では 64 セグメント分です。キューからあふれた分は、録画の欠落になります |
--retention-sweep | 秒 | 60 | 保持期限を過ぎた録画を削除する処理を、何秒ごとに行うかを指定します。同じときに、期限が切れた Idempotency-Key の記録も消します。最小は 1 です |
--verify-recordings | — | 無効 | 起動時の復旧処理で、インデックスにあるすべてのセグメントの SHA-256 を照合し、一致しないものをログに出します。データが多いほど起動に時間がかかります |
--zoneinfo | DIR | /usr/share/zoneinfo | 予約録画で使うタイムゾーン(IANA の名前)の情報を読む、TZif ファイルのディレクトリです |
録画の保存先
録画を S3 互換のオブジェクトストレージ(AWS S3・MinIO・Cloudflare R2 など)にも保存するときに使います。クラスターでは全ノードに同じ値を設定してください。仕組みは 録画 の「録画の保存先」で説明しています。
| オプション | 値 | 既定 | 説明 |
|---|---|---|---|
--recording-storage | local|s3://BUCKET[/PREFIX] | local | 録画の保存先です。local では、データディレクトリにだけ保存します |
--s3-endpoint | URL | AWS のリージョンの宛先 | S3 互換サービスの宛先です(http(s)://ホスト[:ポート]。パスは含められません)。MinIO や R2 などを使うときに指定します |
--s3-region | リージョン | us-east-1 | 署名に使うリージョンです。R2 では auto を指定します |
--s3-addressing | path|virtual | --s3-endpoint があれば path、なければ virtual | URL でのバケットの表し方です。path は ホスト/バケット/キー、virtual は バケット.ホスト/キー になります |
--s3-credentials | FILE | 環境変数 | 認証情報を書いた JSON ファイルです(access_key_id・secret_access_key・session_token)。指定しない場合は、環境変数 AWS_ACCESS_KEY_ID などを読みます |
--s3-part-size | バイト | 16777216(16 MiB) | この大きさを超えるファイルは、分けてアップロードします。5 MiB〜5 GiB の範囲で指定します |
--recording-keep-local | 秒 | 86400 | アップロードが終わったあと、ローカルのコピーを残しておく時間です。0 にすると、アップロードが終わりしだい削除します |
認証(JWT)
| オプション | 値 | 既定 | 説明 |
|---|---|---|---|
--jwks | FILE | なし | JWT の検証に使う鍵です(JWKS 形式の JSON を書いたローカルのファイル)。起動時に 1 回だけ読み込みます |
--jwt-issuer | 文字列 | なし | JWT の iss に求める値です。--jwks を使う場合は必須です |
--jwt-audience | 文字列 | なし | JWT の aud に含まれていなければならない値です。--jwks を使う場合は必須です |
--jwt-tenant-claim | 名前 | tenant | JWT の中で、テナントを表すクレームの名前です |
詳しくは セキュリティ を参照してください。
コーデック・キャプチャ
| オプション | 値 | 既定 | 説明 |
|---|---|---|---|
--codec-workers | N | 0(CPU の数と同じ) | 静止画やサムネイルなど、1 回で終わる処理に使う senca-codec-worker のプロセスの数です |
--codec-worker-bin | FILE | senca-node と同じディレクトリの senca-codec-worker | senca-codec-worker の実行ファイルの場所です。見つからない場合、変換は 503 を返します |
--codec-lib-dir | DIR | なし | コーデックの共有ライブラリを最初に探すディレクトリです。senca-codec-worker と senca-capture-worker に、環境変数 SENCA_CODEC_LIB_DIR として渡します。: で区切って複数指定できます。クイックスタート の「コーデックのライブラリ」を参照してください |
--capture-synthetic | — | 無効 | 試験用の仮想のキャプチャデバイスを一覧に出します(senca-capture-worker に --synthetic を渡します) |
管理画面・配信ページ
| オプション | 値 | 既定 | 説明 |
|---|---|---|---|
--console-dir | DIR | なし | 管理画面のファイル(リポジトリの apps/console)の場所です。指定すると /console/ で開けます。指定しない場合、/console/ は 404 を返します |
--sender-dir | DIR | なし | ブラウザーから配信するためのページのファイル(リポジトリの apps/sender-web)の場所です。指定すると /sender/ で開けます。指定しない場合、/sender/ は 404 を返します |
/ にアクセスすると、/console/ へ 302 でリダイレクトします。
ノード・グリッド
| オプション | 値 | 既定 | 説明 |
|---|---|---|---|
--node-name | 名前 | node-1 | ノードの表示名です。グリッドのラベル senca.io/name の値になります。デバイスの API では、ノード ID の代わりにこの名前を使えます |
--label | KEY=VALUE | なし | ワークロードを割り当てるノードの条件(placement.labels)に使うラベルです。複数回指定でき、最大 64 個です。キーは 1〜128 文字、値は 128 文字までで、制御文字は使えません。senca.io/ で始まるキーと raft_id は SENCA が使うため、指定できません |
--net-mbps | Mbit/s | 10000 | このノードの帯域です(上り・下りそれぞれの値)。グリッドがワークロードの割り当てを決めるときに使います |
--capacity-cpu-millis | ミリコア | CPU の数 × 1000 × 90% | ワークロードに使ってよい CPU の量です |
--capacity-memory-mb | MB | MemTotal の 85% | ワークロードに使ってよいメモリの量です |
--cluster-config | FILE | なし | クラスターの設定を書いた JSON ファイルです(下の「クラスターの設定」を参照)。指定しない場合は、単一ノードとして動きます |
--egress-allow | CIDR | なし | 外部への接続(pull 入力、push 出力、字幕、PaaS 連携、HLS の pull)で、宛先として許可するプライベートアドレスの範囲です。複数回指定できます。セキュリティ を参照してください |
ルーム(リアルタイム)
| オプション | 値 | 既定 | 説明 |
|---|---|---|---|
--rooms-cascade | — | 無効 | すべてのルームでカスケード(別のノードにあるルームの参加者を、このノードで受け付けること)を使います。ルームの設定 cascade が false でも有効になります。リアルタイムのルーム を参照してください |
--rooms-auth-webhook | URL | なし | ルームへの参加を認めるかどうかを問い合わせる Webhook です。ルームの設定 auth_webhook_url があれば、そちらを優先します。--rooms-webhook-secret-file が必要です |
--rooms-auth-mode | after_token・only | after_token | after_token では、トークンを検証したあとで Webhook に問い合わせます。only では、トークンを使わずに Webhook だけで参加を認めます |
--rooms-event-webhook | URL | なし | ルームで起きたことを知らせる Webhook の宛先です。送信には署名を付け、届かなければ再送します。--rooms-webhook-secret-file が必要です |
--rooms-webhook-secret-file | FILE | なし | Webhook の署名(HMAC-SHA256)に使う秘密の値を書いたファイルです。前後の空白を除いて 16 バイト以上必要です |
Webhook の宛先も、外部への接続の制限の対象です。プライベートアドレスへ送るには、--egress-allow で許可しておく必要があります。
要求の数の上限
上限を超えた要求には 429(RATE_LIMITED、Retry-After 付き)を返します(セキュリティ を参照)。0 にすれば、その上限はなくなります。
| オプション | 値 | 既定 | 説明 |
|---|---|---|---|
--rate-limit-ip | N | 300 | 管理 API(/api/v1)への、送信元の IP アドレスごとの 1 秒あたりの要求数です。一時的には 2 倍まで受け付けます。認証の前に数えます |
--rate-limit-token | N | 200 | 管理 API への、API トークンごとの 1 秒あたりの要求数です(JWT では subject ごとに数えます)。一時的には 2 倍まで受け付けます |
--rate-limit-auth-failures | N | 30 | 送信元の IP アドレスごとに、1 分あたり認証に失敗してよい回数です。この回数を超えると、正しいトークンを使っても 429 を返します |
--rate-limit-connect | N | 30 | 新しい接続(/signaling・WHIP・WHEP・SSE)の、送信元の IP アドレスごとの 1 秒あたりの数です。一時的には 2 倍まで受け付けます |
その他
| オプション | 値 | 既定 | 説明 |
|---|---|---|---|
--config | FILE | なし | 設定ファイルです(JSON 形式。下の「設定ファイル(JSON)」を参照) |
--data-dir | DIR | out(カレントディレクトリからの相対パス) | データディレクトリです(下の「データディレクトリ」を参照)。必ず指定してください |
--log-json | — | 無効 | ノードのログを、1 行に 1 つの JSON の形で標準出力に出します(運用 を参照) |
--events-retain | N | 4096 | ノードが手元に残しておく、直近のイベントの数です(0〜1000000)。SSE(GET /api/v1/events)で再接続してきたクライアントに、取りこぼした分を再送するために使います。管理 API と SDK を参照してください |
起動時の検査
次の設定は起動前の検査で見つかり、終了コード 2 で終了します。
--jwksを指定したのに、--jwt-issuerか--jwt-audienceがない--https・--rtmps・--quicのどれかを指定したのに、--tls-certか--tls-keyがない--record-queueが 16〜1048576 の範囲にない、または--max-playback-ttlが 0--egress-allowの値が CIDR の形になっていない--recording-storageがlocalでもs3://BUCKET[/PREFIX]でもない--s3-endpoint・--s3-region・--s3-addressingの書き方が誤っている、または--s3-part-sizeが 5 MiB〜5 GiB の範囲にない--webrtc-public-ipの値が IP アドレスでない、0.0.0.0・::・マルチキャストのアドレスである、または 9 個以上ある--events-retainが 1000000 を超える--rooms-auth-webhook・--rooms-event-webhookが http/https の URL でない、または--rooms-webhook-secret-fileがない--rooms-webhook-secret-fileのファイルを読み込めない、または中身が 16 バイトに満たない- クラスターの設定で、
node_idが 0 である、peersに自分が含まれていない、またはpeersが 1〜7 台の範囲にない
起動の途中でつまずいた場合は、fatal: ... と出力して終了コード 1 で終了します。主な原因は次のとおりです。
- 指定したファイルを読み込めない
- 待ち受けを始められない
- クラスターの共有シークレットが 16 文字に満たない
- S3 の認証情報がない
設定ファイル(JSON)
--config FILE に渡す JSON は、次のキーを持つオブジェクトです。どのキーも省略でき、省略すれば既定値になります。逆に、知らないキーがあるとエラーになります。綴りの誤りもここで見つかります。
| JSON のキー | オプション | 型 |
|---|---|---|
data_dir | --data-dir | 文字列 |
node_name | --node-name | 文字列 |
http_listen | --http | 文字列(ADDR) |
https_listen・rtmp_listen・rtmps_listen・srt_listen・rtsp_listen・webrtc_udp・quic_listen | --https など(quic_listen は --quic) | 文字列(ADDR)または null(待ち受けない) |
tls_cert・tls_key | --tls-cert・--tls-key | 文字列 |
public | --public-*-url | {"rtmp": 文字列, "http": 文字列または null, "srt": 文字列または null, "rtsp": 文字列または null} |
max_playback_ttl_secs | --max-playback-ttl | 数値 |
reconnect_grace_ms | --reconnect-grace | 数値 |
record_queue | --record-queue | 数値 |
retention_sweep_secs | --retention-sweep | 数値 |
jwks・jwt_issuer・jwt_audience・jwt_tenant_claim | --jwks など | 文字列 |
codec_workers | --codec-workers | 数値 |
codec_worker_bin・codec_lib_dir | 同名のオプション | 文字列 |
zoneinfo_dir | --zoneinfo | 文字列 |
console_dir・sender_dir | 同名のオプション | 文字列 |
capture_synthetic・verify_recordings・log_json | 同名のオプション | 真偽値 |
cluster | --cluster-config | オブジェクト(下の「クラスターの設定」) |
egress_allow | --egress-allow | 文字列の配列 |
net_mbps | --net-mbps | 数値 |
labels | --label | 文字列 → 文字列のオブジェクト |
capacity_cpu_millis・capacity_memory_mb | 同名のオプション | 数値または null |
rooms_cascade | --rooms-cascade | 真偽値 |
rooms_auth_webhook・rooms_event_webhook | 同名のオプション | 文字列または null |
rooms_auth_mode | --rooms-auth-mode | "after_token" または "only" |
rooms_webhook_secret_file | 同名のオプション | 文字列または null |
recording_storage | --recording-storage・--s3-*・--recording-keep-local | {"uri", "endpoint", "region", "addressing", "credentials_file", "part_size", "keep_local_secs"}(どれも省略できます) |
気をつけたいのは rtmp_listen です。省略すると既定の 0.0.0.0:1935 で待ち受けてしまうので、RTMP を使わないなら明示的に null と書きます。
public の中で省略したキーは、rtmp と http なら上の「公開 URL」の既定値に、srt と rtsp なら設定なしになります。"http": null と書いた場合、再生 URL の hls は /s/... から始まる相対パスになり、ingest.whip_url は応答から消えます。labels は --label と同じ規則で検査し、合わなければ終了コード 2 で終了します。
設定ファイルの例です。
{
"data_dir": "/var/lib/senca",
"node_name": "edge-1",
"http_listen": "0.0.0.0:8080",
"rtmp_listen": "0.0.0.0:1935",
"srt_listen": "0.0.0.0:9000",
"public": {
"rtmp": "rtmp://media.example.com:1935",
"http": "https://media.example.com",
"srt": "srt://media.example.com:9000"
},
"codec_lib_dir": "/usr/lib/x86_64-linux-gnu",
"labels": { "zone": "a" },
"log_json": true
}
クラスターの設定
クラスターの設定は、--cluster-config FILE か、--config の JSON の cluster に書きます。こちらも知らないキーはエラーです。クラスターの組み方は クラスターとグリッド で説明しています。
クラスターの設定のキー
| キー | 必須 | 型 | 説明 |
|---|---|---|---|
node_id | はい | 数値(1 以上) | このノードの Raft での ID です。peers の中に、同じ id を持つ要素が必要です |
listen | はい | ADDR | ノード間の通信(Raft)で待ち受けるアドレスです |
peers | はい | 配列(1〜7 個) | Raft の投票に加わるノードの一覧です(自分も含めます) |
secret_file | はい | パス | クラスターの共有シークレットを書いたファイルです。すべてのノードで同じ内容にします。前後の空白を除いて 16 文字以上必要です |
tls_ca | いいえ | パス | ノード間の mTLS(互いに証明書を確かめ合う TLS)に使う、認証局の証明書です(PEM 形式) |
tls_cert | いいえ | パス | このノードの証明書です(PEM 形式)。SAN に DNS:senca-cluster を含めてください |
tls_key | いいえ | パス | 上の証明書の秘密鍵です(PEM 形式) |
relay_listen | いいえ | ADDR | ノード間の中継で待ち受けるアドレスです。既定は listen のポート番号に 1 を加えた番号です |
tls_ca・tls_cert・tls_key は、全部書くか全部省くかのどちらかにします。省いた場合、ノード間の通信は暗号化されません(セキュリティ を参照)。
peers の各要素のキー
| キー | 必須 | 型 | 説明 |
|---|---|---|---|
id | はい | 数値 | そのノードの Raft での ID です |
addr | はい | ADDR | そのノードが Raft の通信で待ち受けるアドレスです |
api | いいえ | URL | そのノードの HTTP の公開 URL です(例: http://10.0.0.2:8080)。視聴者を 307 でそのノードへリダイレクトするときと、ルームの参加者を別のノードへ案内するときに使います |
relay | いいえ | ADDR | そのノードが中継で待ち受けるアドレスです。既定は addr のポート番号に 1 を加えた番号です |
中継のポートは、既定では「Raft のポート番号 + 1」です。この番号は空けておいてください。
1 台のマシンで複数のノードを試すときは、ここでつまずきがちです。同じホストで Raft を 7000 番と 7001 番にして中継を既定のままにすると、1 台目の中継(7001 番)が 2 台目の Raft とぶつかり、起動時の検査で終了コード 2 になります。エラーのメッセージには重なったアドレスが出ます。こうした構成では、relay_listen と peers[].relay を明示してください。
{
"node_id": 1,
"listen": "10.0.0.1:7000",
"secret_file": "/etc/senca/cluster-secret",
"tls_ca": "/etc/senca/cluster-ca.pem",
"tls_cert": "/etc/senca/n1.pem",
"tls_key": "/etc/senca/n1.key",
"peers": [
{"id": 1, "addr": "10.0.0.1:7000", "api": "http://10.0.0.1:8080"},
{"id": 2, "addr": "10.0.0.2:7000", "api": "http://10.0.0.2:8080"},
{"id": 3, "addr": "10.0.0.3:7000", "api": "http://10.0.0.3:8080"}
]
}
環境変数
senca-node 自身が読む環境変数は、録画の保存先(S3)の認証情報だけです。それも --s3-credentials がないときに限ります。
| 変数 | 説明 |
|---|---|
AWS_ACCESS_KEY_ID・AWS_SECRET_ACCESS_KEY | S3 の認証情報です(上の「録画の保存先」を参照) |
AWS_SESSION_TOKEN | 一時的な認証情報を使う場合の、セッションのトークンです |
ほかの設定はすべてオプションか JSON で指定します。次の環境変数を読むのは、ノードが起動する別プロセス(senca-codec-worker と senca-capture-worker)のほうです。
| 変数 | 読むプロセス | 説明 |
|---|---|---|
SENCA_CODEC_LIB_DIR | senca-codec-worker | コーデックのライブラリを最初に探すディレクトリです(: 区切り)。--codec-lib-dir を指定した場合は、その値で置き換えます |
SENCA_CODEC_DISABLE | senca-codec-worker | 使わないコーデックの提供元です(, 区切り)。hardware・software でまとめて指定するか、nvidia・intel-vpl・amd-amf・vaapi・dav1d・libvpx・svt-av1・opus で個別に指定します |
LD_LIBRARY_PATH | senca-codec-worker | ファイル名だけで dlopen するときに、OS がライブラリを探す場所です |
SENCA_CAPTURE_SYNTHETIC | senca-capture-worker | 1 か true にすると、試験用の仮想のデバイスを一覧に出します |
SENCA_CAPTURE_DISABLE | senca-capture-worker | 検出しないデバイスの種類です(, 区切りで v4l2・alsa・decklink) |
SENCA_CAPTURE_LIB_DIR | senca-capture-worker | DeckLink と ALSA のライブラリを探すディレクトリです(: 区切り) |
senca-codec-worker は環境変数を空にして起動し、親プロセスから引き継ぐのは SENCA_CODEC_LIB_DIR・SENCA_CODEC_DISABLE・LD_LIBRARY_PATH だけです。一方、senca-capture-worker は親の環境変数をすべて引き継ぎます。
compose.yaml に出てくる SENCA_PUBLIC_HTTP・SENCA_PUBLIC_RTMP・SENCA_PUBLIC_IP は compose の変数で、--public-*-url と --webrtc-public-ip の値に展開してから渡しています。ノードがこれらを環境変数として読むことはありません。
データディレクトリ
--data-dir の中身です。中のファイルやディレクトリは、ノードが必要に応じて自分で作ります。
| パス | 内容 |
|---|---|
node-id | このノードの ID(128 ビット、16 進数)です。初めて起動したときに作り、その後は変わりません |
audit.log | 監査ログです(1 行に 1 つの JSON。追記していきます) |
control/log | 単一ノードで、設定と状態の変更を追記していくログです(1 件ごとに fsync します) |
control/snapshot.json | 単一ノードで、ある時点の設定と状態全体を保存したものです。ログが 1000 件を超えると作り直し、ログを空にします |
control/raft/ | クラスターで使う Raft のデータです(hardstate・snap-*.snap・log/*.seg)。クラスターでは control/log は使いません |
control/secret-key | シークレットを暗号化する鍵です(32 バイト、パーミッション 0600)。なければ初めて起動したときに作ります。クラスターでは、どれか 1 台の鍵がクラスター共通の鍵になります。この鍵はクラスターの共有シークレットで暗号化して、すべてのノードへ配布します |
control/bootstrap-admin-token | 最初の管理者トークンの値です(パーミッション 0600)。初めて起動したときにだけ作ります |
recordings/{録画 ID}/index.jsonl | 録画のインデックスです。追記だけを行う JSON Lines 形式で、begin・init・segment・gap・end の行があります |
recordings/{録画 ID}/thumbnail.jpg・thumbnail.json | 録画のサムネイルと、その情報です |
recordings/.trash-{録画 ID} | 削除している途中の録画です(一時的なもの) |
segments/{ストリーム ID}/{run}/{連番}.ts・.m4s(と fMP4 の初期化セグメント) | 録画のセグメントです。作ったあとは変更しません。run は、ストリームの処理を始めるたびに付く ID です |
segments/{ストリーム ID}/orphans/{run}/ | 起動時の復旧処理で、どのインデックスからも参照されていないとわかったセグメントです。削除せずに、ここへ移しておきます |
snapshots/{ストリーム ID}/{ID}.jpg・{ID}.json | 定期的に取得した静止画と、その情報です |
1 台構成の control/log と snapshot.json には、再生 URL の署名に使う鍵が平文で入っています。データディレクトリのアクセス権は必ず絞ってください(セキュリティ を参照)。何をバックアップすればよいかは 運用 にあります。
関連するページ
この文書の原文は、リポジトリの docs/guide/ja/03-configuration.md にあります。内容は現在の版(v0.0.1)に合わせています。