管理仪表板为管理您的 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
日志标签页
- 日志级别:
trace、debug、info、warn或error。调试时有用 — 切换到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。