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”。
  • 创建时间: 注册日期
  • 状态: 活跃/被封禁 切换开关

操作:

  • 搜索: 在搜索栏中输入内容以按姓名或邮箱筛选用户(客户端)。
  • 排序: 点击任意列标题进行排序。再次点击以切换升序/降序。
  • 分页: 用于浏览大量用户列表的导航控件。

用户操作

每行用户包含快速操作按钮:

  • 提升/降级:["user"]["user", "superadmin"] 访问级别之间切换。在访问级别列中可见。
  • 活跃/被封禁: 切换用户账户状态。被封禁的用户无法登录或刷新令牌。
  • 查看详情: 点击用户行以打开详细视图。

用户详情

位于 /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:
    • Client ID
    • Client Secret
    • Redirect URL

每个提供商都有自己的配置卡片。填写全部三个字段即可启用提供商。

LiveKit 标签页

  • 外部 LiveKit: 切换使用外部 LiveKit 服务器而非嵌入式服务器
  • 主机: LiveKit 服务器地址和端口(如 127.0.0.1:7880
  • API Key: LiveKit 服务器 API 密钥
  • API Secret: LiveKit 服务器 API 密钥

服务器标签页

  • 端口: HTTP 服务器端口(默认:80
  • 主机: 服务器主机名
  • 域名: 服务器域名
  • 邮箱: 管理员邮箱(用于 ACME 证书注册)
  • TLS: 使用证书文件启用 HTTPS
  • ACME: 启用自动 Let’s Encrypt 证书管理
  • 反向代理: 指示服务器位于代理之后(影响客户端 IP 检测)
  • 证书路径: 证书文件和密钥文件路径(用于手动 TLS 设置)
  • 证书状态: 内联指示器显示当前 TLS 证书健康状况

CORS 标签页

  • 允许的来源: 逗号分隔的 CORS 来源列表
  • 允许的请求头: 逗号分隔的允许请求头列表
  • 允许的方法: 逗号分隔的允许 HTTP 方法列表
  • 允许凭证: 切换以在跨域请求中包含凭证
  • 最大缓存时间: CORS 预检响应的缓存时间(秒)

房间限制标签页

控制单个用户可创建的活跃房间数量:

  • 每用户最大房间数: 非 superadmin 用户可创建的最大活跃房间数(默认:100,0 = 无限制)。Superadmin 用户不受此限制。

上传配额标签页

控制聊天图片上传的存储限制:

  • 每用户最大上传字节数: 所有房间中每个用户的存储配额(默认:524288000 = 500 MB,0 = 无限制)。Superadmin 用户不受此限制。
  • 全局磁盘阈值: 所有用户的总存储上限。超过后所有上传将被拒绝,直到管理员释放空间(默认:0 = 无限制)。此限制适用于所有人,包括 superadmin。

聊天上传标签页

配置聊天图片上传的存储方式:

  • 后端: disk(本地文件系统)、s3(S3 兼容存储)或 inline(base64 嵌入)
  • 最大上传字节: 每次上传的最大文件大小
  • 内联最大值: 内联/base64 上传的最大大小
  • 磁盘目录: disk 后端上传的本地目录

S3 配置(当后端为 s3 时):

  • Endpoint、Bucket、Region
  • Access Key、Secret Key
  • Public URL

日志标签页

  • 日志级别: tracedebuginfowarnerror。调试时有用 — 切换到 debug 查看详细日志,然后切回 info 用于生产环境。

故障排除

”管理面板不可见”

症状: 侧边栏中不显示管理部分,用户下拉菜单中缺少”管理面板”链接。

原因: 登录用户的 accesses 数组中没有 superadmin

解决方案: 使用 CLI 提升用户:

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

然后注销并重新登录以获取包含更新后访问权限的新 JWT。

“设置无法保存”

症状: 保存设置成功返回,但密钥值显示为未更改。

原因: 当您在更新请求中发送 "••••••••" 或空字符串时,服务器会保留现有的密钥值。这是有意设计的 — 防止在仅更改非密钥字段时意外覆盖密钥。

解决方案: 在更新请求中发送实际的密钥值(而非隐藏占位符)。

“无法删除自己的账户”

症状: 您自己的用户详情页面上隐藏了删除按钮,或 API 返回 400 错误。

原因: 出于安全考虑,禁止自我删除。您无法删除当前登录的账户。

解决方案: 由另一个 superadmin 删除该账户,或使用 CLI 以其他用户身份删除。

“访问管理员 URL 时被重定向到仪表板”

症状: 直接访问 /dashboard/admin 时被重定向到 /dashboard

原因: 管理员守卫路由检查您 JWT 中的 accesses 数组。如果缺少 superadmin,守卫将进行重定向。

解决方案: 验证您的账户具有 superadmin 访问权限。如果您的访问权限最近被修改,请注销并重新登录以刷新您的 JWT。


另请参阅