Bedrud 文档

Bedrud 使用 YAML 配置文件管理主服务器和嵌入式 LiveKit 媒体服务器。

另见: 快速开始 | 安装指南 | 部署指南 | Docker 指南

生产环境最低配置

默认配置适用于开发环境。生产环境中请在 /etc/bedrud/config.yaml 中修改以下值:

auth:
  jwtSecret: "change-to-random-string-32-chars"
  sessionSecret: "change-to-another-random-string"

修改后重启:

sudo systemctl restart bedrud livekit

完整参考如下。


服务器配置

路径: server/config.yaml(开发环境)或 /etc/bedrud/config.yaml(生产环境)

完整参考

server:
  port: 8090                    # HTTP 端口
  host: "localhost"             # 绑定地址
 
database:
  type: "sqlite"                # 数据库类型:sqlite 或 postgres
  path: "data.db"               # SQLite 数据库文件路径
 
logger:
  level: "debug"                # 日志级别:debug、info、warn、error
  outputPath: ""                # 日志文件路径(空 = stdout)
 
livekit:
  host: "http://localhost:8090/livekit"  # 外部 LiveKit URL
  internalHost: "http://127.0.0.1:7880"  # 内部 LiveKit URL
  apiKey: "devkey"              # LiveKit API key
  apiSecret: "devsecret"        # LiveKit API secret
 
auth:
  jwtSecret: "your-jwt-secret"           # 签名 JWT token 的密钥
  tokenDuration: 24                       # Token 过期时间(小时)
  sessionSecret: "your-session-secret"    # Session cookie 的密钥
  frontendURL: "http://localhost:8090"    # 前端 URL(用于 OAuth 重定向)
 
  # OAuth 提供者(可选)
  google:
    clientId: ""
    clientSecret: ""
  github:
    clientId: ""
    clientSecret: ""
  twitter:
    clientKey: ""
    clientSecret: ""
 
cors:
  allowedOrigins: "http://localhost:8090,http://localhost:3000"  # 逗号分隔
  allowedHeaders: "Origin, Content-Type, Accept, Authorization"
  allowedMethods: "GET, POST, PUT, DELETE, OPTIONS"
  allowCredentials: true

关键设置

数据库

默认情况下,Bedrud 使用 SQLite,数据库文件位于配置的 path。对于更高并发的生产环境,可切换到 PostgreSQL,提供连接字符串。使用 PostgreSQL 时,path 字段存放连接字符串而非文件路径:

database:
  type: "postgres"
  path: "postgres://user:password@localhost:5432/bedrud?sslmode=disable"

身份验证

jwtSecret 用于签名访问令牌和刷新令牌。生产环境中请更改默认值。

OAuth 提供者为可选配置。如果不配置,UI 中不会显示社交登录按钮。每个提供者需要在相应服务上注册 OAuth 应用,并提供 client ID 和 secret。

CORS

allowedOrigins 字符串(逗号分隔)必须包含前端服务的 URL。开发环境中为 http://localhost:3000。生产环境中设置为你的域名(如 https://meet.example.com)。


LiveKit 配置

路径: server/config/livekit.yaml(开发环境)或 /etc/bedrud/livekit.yaml(生产环境)

port: 7880                      # LiveKit HTTP/WebSocket 端口
 
rtc:
  port_range_start: 50000       # UDP 端口范围起始
  port_range_end: 60000         # UDP 端口范围结束
  use_external_ip: true         # RTC 使用外部 IP
 
turn:
  enabled: true
  domain: "localhost"
  tls_port: 5349
  udp_port: 3478
 
keys:
  devkey: "devsecret"           # 必须与服务器配置匹配
 
logging:
  level: info
 
room:
  auto_create: true              # 参与者加入时自动创建房间
  empty_timeout: 60              # 删除空房间的超时时间(秒)
  departure_timeout: 60          # 所有参与者离开后保持房间的时间(秒)
  max_participants: 20           # 每个房间最大参与者数(0 = 无限制)
  enable_remote_unmute: true     # 允许服务端对参与者解除静音

livekit.yaml 中的 keys 必须与服务器 config.yaml 中的 livekit.apiKeylivekit.apiSecret 匹配。

RTC 端口范围

LiveKit 使用 UDP 端口传输媒体流。默认范围 50000-60000 适用于大多数场景。如果在防火墙后运行,请确保这些端口已开放。

架构和故障排除请参阅 WebRTC 连接性

TURN 服务器

嵌入式 TURN 服务器为受限制的 NAT 或企业防火墙后的客户端中继媒体。默认在端口 3478(UDP)和 5349(TLS)上启用。

TURN 是最后的备选中继 - 大多数客户端(约 80%)通过 UDP 直连,不会使用它。当 TURN 激活时,服务器承载所有中继媒体带宽。

TLS 要求: TURN/TLS(端口 5349)需要有效的 TLS 证书。生产环境中请设置 turn.tls_port: 443,将 cert_file/key_file 指向你的证书,或在前方放置 Layer 4 负载均衡器并设置 external_tls: true

架构、配置详情、带宽计算和故障排除请参阅 TURN 服务器指南

房间设置

room: 部分控制会议房间行为:

  • auto_create - 参与者加入时自动创建房间(默认:true
  • empty_timeout - 从未有人加入的房间被删除前的秒数(默认:60
  • departure_timeout - 所有参与者离开后保持房间活跃的秒数(默认:60
  • max_participants - 每个房间最大参与者数。设为 0 表示无限制(默认:20
  • enable_remote_unmute - 允许服务端对参与者取消静音(默认:true

容量调优建议:

  • 小型团队会议:max_participants: 10-20
  • 大型网络研讨会:max_participants: 100(或 0 表示无限制)
  • 资源受限的服务器:降低 max_participants 以减少 CPU/内存使用

环境变量

配置值可以通过环境变量覆盖。命名遵循按节前缀的约定:

Docker 部署请参阅 Docker 指南

export SERVER_PORT=8090
export DB_PATH=/var/lib/bedrud/bedrud.db
export JWT_SECRET=production-secret
export LIVEKIT_HOST=http://localhost:8090/livekit
export LIVEKIT_API_KEY=prodkey
export LIVEKIT_API_SECRET=prodsecret

环境变量完整参考

环境变量YAML 路径说明
SERVER_PORTserver.portHTTP 监听端口
SERVER_ENABLE_TLSserver.enableTLS启用 HTTPS(true/false
SERVER_CERT_FILEserver.certFileTLS 证书路径
SERVER_KEY_FILEserver.keyFileTLS 私钥路径
SERVER_DOMAINserver.domain域名
SERVER_EMAILserver.email用于 Let’s Encrypt 的邮箱
SERVER_USE_ACMEserver.useACME启用自动 Let’s Encrypt(true/false
SERVER_TRUSTED_PROXIESserver.trustedProxies逗号分隔的可信代理 IP
SERVER_PROXY_HEADERserver.proxyHeader读取客户端 IP 的头(如 X-Forwarded-For
DB_HOSTdatabase.host数据库主机(PostgreSQL)
DB_PORTdatabase.port数据库端口
DB_USERdatabase.user数据库用户
DB_PASSWORDdatabase.password数据库密码
DB_NAMEdatabase.dbname数据库名称
DB_TYPEdatabase.typesqlitepostgres
DB_PATHdatabase.pathSQLite 文件路径或 PostgreSQL 连接字符串
LIVEKIT_HOSTlivekit.host外部 LiveKit URL
LIVEKIT_INTERNAL_HOSTlivekit.internalHost内部 LiveKit URL
LIVEKIT_API_KEYlivekit.apiKeyLiveKit API key
LIVEKIT_API_SECRETlivekit.apiSecretLiveKit API secret
JWT_SECRETauth.jwtSecret签名 JWT token 的密钥
AUTH_FRONTEND_URLauth.frontendURLOAuth 重定向的前端 URL
CORS_ALLOWED_ORIGINScors.allowedOrigins逗号分隔的允许来源
CORS_ALLOWED_HEADERScors.allowedHeaders允许的请求头
CORS_ALLOWED_METHODScors.allowedMethods允许的 HTTP 方法
CORS_ALLOW_CREDENTIALScors.allowCredentials允许凭证(true/false
CORS_EXPOSE_HEADERScors.exposeHeaders暴露给浏览器的头
CORS_MAX_AGEcors.maxAge预检缓存时长(秒)

生产环境检查清单

  • jwtSecretsessionSecret 更改为强随机值
  • logger.level 设为 infowarn
  • 配置 TLS(通过安装程序或反向代理)
  • cors.allowedOrigins 设为生产域名
  • 按需配置 OAuth 提供者
  • 在防火墙中开放 LiveKit RTC 端口范围
  • /var/log/bedrud/ 设置日志轮转

完整的生产环境配置请参阅部署指南