Bedrud ドキュメント

管理ダッシュボードは、Bedrudインスタンスを管理するためのWebインターフェースを提供します。superadminはシステム統計の表示、ユーザーとルームの管理、インスタンス全体の設定、招待トークンの生成が行えます。

前提条件

  • superadminアクセス: ユーザーの accesses 配列に superadmin が含まれている必要があります。
  • 初回管理者セットアップ: Bedrudのインストール後、CLI経由でユーザーを作成し昇格させます:
bedrud user create --email "admin@example.com" --password "securepassword" --name "Admin"
bedrud user promote --email "admin@example.com"

最初のsuperadminを作成するWeb UIやAPIはありません。これはセキュリティ上の意図的な設計です。

管理パネルへのアクセス

superadminアクセスを取得すると、Bedrud Webアプリケーションの /dashboard/admin から管理パネルにアクセスできます。

ナビゲーション:

  • サイドバーには「管理者」セクションが表示され、概要、ユーザー、ルーム、設定へのリンクがあります。このセクションはsuperadminにのみ表示されます。
  • 右上のユーザードロップダウンには盾アイコン付きの「管理パネル」リンクが含まれています。
  • 非管理者ユーザーが /dashboard/admin/* のURLにアクセスしようとすると、自動的に /dashboard にリダイレクトされます。

概要ページ

/dashboard/admin の概要ページでは、主要なシステムメトリクスを含むダッシュボードが表示されます。

システム統計

以下のカードが表示されます:

  • オンラインユーザー: 全ルームのユニークなアクティブ参加者の総数
  • 総ルーム数: インスタンス上のルーム総数
  • 総ユーザー数: 登録済みユーザーの総数

TLS証明書ステータス

サーバーのTLS証明書の状態を色分けインジケーターで表示します:

ステータス意味
有効証明書は有効です
期限切れ間近30日以内に期限切れ
期限切れ証明書の有効期限が切れています
未設定TLSが無効です

証明書ステータスは5分ごとに更新されます。

グラフ

  • ルーム作成数: 過去8週間のルーム作成数の棒グラフ
  • 最近の登録: 最新のユーザー登録一覧

ユーザー管理

ユーザー一覧

/dashboard/admin/users のユーザー一覧では、登録済みの全ユーザーを検索・ソート可能なテーブルで表示します。

カラム:

  • 名前: ユーザーの表示名
  • メール: ユーザーのメールアドレス
  • プロバイダー: 認証方式(local、google、github、guest、passkey)
  • ロール: アクセスレベルバッジ。superadmin アクセスを持つユーザーは「Superadmin」と表示されます。
  • 作成日: 登録日
  • ステータス: アクティブ/BAN切り替え

操作:

  • 検索: 検索バーに入力してユーザーを名前またはメールでフィルタリング(クライアントサイド)。
  • ソート: 任意のカラムヘッダーをクリックしてソート。再度クリックで昇順/降順を切り替え。
  • ページネーション: 大規模なユーザー一覧を閲覧するためのナビゲーションコントロール。

ユーザー操作

各ユーザー行にはクイック操作ボタンがあります:

  • 昇格/降格: ["user"]["user", "superadmin"] のアクセスレベルを切り替え。アクセスレベル列に表示されます。
  • アクティブ/BAN: ユーザーのアカウントステータスを切り替え。BANされたユーザーはログインやトークンの更新ができません。
  • 詳細表示: ユーザー行をクリックして詳細ビューを開きます。

ユーザー詳細

/dashboard/admin/users/:userId の詳細ページでは、完全なユーザープロフィールが表示されます。

表示情報:

  • ユーザー名、メール、プロバイダー、登録日
  • アクセスレベルバッジ(superadmin/user)
  • ルーム作成アクティビティグラフ(8週間の履歴)
  • ユーザーが作成したルームの一覧

操作:

  • 昇格/降格: 詳細ヘッダー内の専用ボタン
  • ユーザー削除: ユーザーとその全データを完全に削除。メール確認が必要です。削除ボタンは自分のアカウントでは非表示になります(自分自身を削除することはできません)。

削除は永続的かつ非同期です。 ユーザーを削除すると、そのユーザーの全ルーム、パスキー、設定も削除されます。リクエストは即座に返りますが、クリーンアップはバックグラウンドで実行されます。


ルーム管理

ルーム一覧

/dashboard/admin/rooms のルーム一覧では、インスタンス上の全ルームが表示されます。

カラム:

  • ルーム名: ルーム識別子
  • 公開範囲: 公開、非公開、または限定公開
  • 最大参加者数: インライン編集可能 — 値をクリックして変更
  • ステータス: アクティブまたは非アクティブ
  • 作成日: ルーム作成日

操作:

  • 検索: ルームを名前でフィルタリング(クライアントサイド)
  • ソート: カラムヘッダーをクリックしてソート
  • 一時停止: ルームを削除せずにアクティブな通話を終了
  • 削除: カスケード削除でルームを完全に閉鎖

ルーム詳細

/dashboard/admin/rooms/:roomId の詳細ページでは、ルームの詳細な情報を確認できます。

ルーム設定:

  • ルーム名、公開範囲モード、最大参加者数
  • 永続モード切り替え: 有効にするとアイドル状態のルームの自動クリーンアップを防止します。これはsuperadminのみ利用可能で、ルーム作成者は変更できません。

ライブ参加者:

  • 3秒ごとにポーリングするリアルタイム参加者リスト
  • 参加者ごと: 名前、参加時刻、トラック情報(音声/ビデオ/画面共有)
  • ビットレートグラフ: 音声・ビデオトラックのリアルタイムビットレートグラフ
  • キック: 任意の参加者をルームから削除
  • ミュート: 任意の参加者の音声トラックをミュート

システム設定

/dashboard/admin/settings の設定ページは9つのタブで構成されています。いずれかのタブを変更した後は「変更を保存」をクリックしてください(一般タブは登録モード変更時に自動保存されます)。

一般タブ

  • 登録モード:
    • オープン: 誰でもアカウントを登録可能
    • 招待のみ: 新規ユーザーは有効な招待トークンが必要
    • 閉鎖: 新規登録不可 — 既存ユーザーは引き続きログイン可能
    • モード切り替え時に自動保存されます

招待トークン管理(一般タブ内):

トークンは招待のみモード時に誰が登録できるかを制御します。

  • トークン生成: 特定のメールアドレスにトークンを固定する場合は任意のメールを入力し、有効期限(24時間、72時間、7日間、30日間)を選択します。
  • トークン一覧: 全トークンをステータス付きで表示。未使用トークンは緑の「有効」バッジ、使用済みトークンは灰色の「使用済み」と表示されます。
  • トークンコピー: コピーボタンをクリックして32文字のトークン値をクリップボードにコピーします。
  • 失効: トークンを削除して使用を防止します。

認証タブ

  • パスキー: FIDO2/WebAuthnパスワードレス認証の切り替え
  • OAuthプロバイダー: Google、GitHub、Twitter OAuthの設定:
    • クライアントID
    • クライアントシークレット
    • リダイレクトURL

各プロバイダーには独自の設定カードがあります。3つのフィールドすべてに入力するとプロバイダーが有効になります。

LiveKitタブ

  • 外部LiveKit: 組み込みLiveKitの代わりに外部LiveKitサーバーを使用する切り替え
  • ホスト: LiveKitサーバーのホストとポート(例: 127.0.0.1:7880
  • APIキー: LiveKitサーバーAPIキー
  • APIシークレット: LiveKitサーバーAPIシークレット

サーバータブ

  • ポート: HTTPサーバーポート(デフォルト: 80
  • ホスト: サーバーホスト名
  • ドメイン: サーバードメイン
  • メール: 管理者メール(ACME証明書登録に使用)
  • TLS: 証明書ファイルでHTTPSを有効化
  • ACME: Let’s Encrypt自動証明書管理を有効化
  • リバースプロキシ: サーバーがプロキシの背後にあることを示す(クライアントIP検出に影響)
  • 証明書パス: 手動TLS設定用の証明書ファイルとキーファイルのパス
  • 証明書ステータス: 現在のTLS証明書の状態を示すインラインインジケーター

CORSタブ

  • 許可されたオリジン: CORSオリジンのカンマ区切りリスト
  • 許可されたヘッダー: 許可するリクエストヘッダーのカンマ区切りリスト
  • 許可されたメソッド: 許可するHTTPメソッドのカンマ区切りリスト
  • 認証情報の許可: クロスオリジンリクエストに認証情報を含める切り替え
  • 最大年齢: CORSプリフライトレスポンスのキャッシュ期間(秒)

ルーム制限タブ

1ユーザーが作成できるアクティブルームの数を制御します:

  • ユーザーあたりの最大ルーム数: 非superadminユーザーが作成できる最大アクティブルーム数(デフォルト: 100、0 = 無制限)。superadminはこの制限をバイパスします。

アップロード割り当てタブ

チャット画像アップロードのストレージ制限を制御します:

  • ユーザーあたりの最大アップロードバイト数: 全ルームにわたるユーザーごとのストレージ割り当て(デフォルト: 524288000 = 500 MB、0 = 無制限)。superadminはこの制限をバイパスします。
  • グローバルディスクしきい値: 全ユーザーの合計ストレージ上限。超過するとすべてのアップロードが拒否され、管理者が領域を解放するまで継続(デフォルト: 0 = 無制限)。この制限はsuperadminを含むすべてのユーザーに適用されます。

チャットアップロードタブ

チャット画像アップロードの保存方法を設定します:

  • バックエンド: disk(ローカルファイルシステム)、s3(S3互換ストレージ)、または inline(base64埋め込み)
  • 最大アップロードバイト数: アップロードあたりの最大ファイルサイズ
  • インライン最大: インライン/base64アップロードの最大サイズ
  • ディスクディレクトリ: disk バックエンドのアップロード用ローカルディレクトリ

S3設定(バックエンドが s3 の場合):

  • エンドポイント、バケット、リージョン
  • アクセスキー、シークレットキー
  • 公開URL

ログタブ

  • ログレベル: tracedebuginfowarnerror。デバッグに便利 — debug に切り替えると詳細なログが表示され、本番環境では info に戻します。

トラブルシューティング

「管理パネルが表示されない」

症状: サイドバーに管理者セクションが表示されず、ユーザードロップダウンに「管理パネル」リンクがありません。

原因: ログイン中のユーザーの accesses 配列に superadmin が含まれていません。

解決策: CLIでユーザーを昇格させます:

bedrud user promote --email "your-email@example.com"

その後、一度ログアウトして再度ログインし、更新されたaccessesを含む新しいJWTを取得してください。

「設定が保存されない」

症状: 設定の保存は成功しますが、シークレット値が変更されていないように見えます。

原因: サーバーは更新リクエストで "••••••••" または空文字列が送信された場合、既存のシークレット値を保持します。これは意図的な設計で、非シークレットフィールドのみを変更する際にシークレットを誤って上書きするのを防ぎます。

解決策: 更新リクエストでマスクされたプレースホルダーではなく、実際のシークレット値を送信してください。

「自分のアカウントを削除できない」

症状: 自分のユーザー詳細ページで削除ボタンが非表示になっているか、APIが400エラーを返します。

原因: 安全のため自己削除はブロックされています。現在ログインしているアカウントを削除することはできません。

解決策: 別のsuperadminにアカウントを削除してもらうか、別のユーザーとしてCLIを使用してください。

「管理者URLにアクセスするとダッシュボードにリダイレクトされる」

症状: /dashboard/admin に直接アクセスすると /dashboard にリダイレクトされます。

原因: 管理者ガードルートがJWTの accesses 配列をチェックします。superadmin が欠落している場合、ガードがリダイレクトします。

解決策: アカウントにsuperadminアクセスがあることを確認してください。アクセスが最近変更された場合は、一度ログアウトして再度ログインし、JWTを更新してください。


関連ドキュメント

  • 管理者API — 全管理エンドポイントのAPIリファレンス
  • 認証 — アクセスレベルとロールシステム
  • 設定 — config.yaml設定リファレンス
  • クイックスタート — 初回管理者セットアップ手順