proper productionize project

This commit is contained in:
2026-07-15 23:54:53 -07:00
parent b8850c87a4
commit edb6d2b5b4
46 changed files with 11346 additions and 1560 deletions
+58 -22
View File
@@ -1,56 +1,92 @@
# 洛星瓷直播弹幕姬配置。
# 洛星瓷多用户直播组件服务配置。
#
# 使用方式:复制为 config.toml 后填写所有 replace-with-* 项;该文件包含
# CookieCloud、数据库和访问令牌等敏感信息,请不要提交或公开分享。
# 使用方式:复制为 config.toml 后填写所有 replace-with-* 项。这个文件
# 包含首次迁移所需的 CookieCloud、bootstrap proof 和旧 OBS 令牌,请不要
# 提交或公开分享。多用户运行数据在初始化后保存在 PostgreSQL 中。
# Docker Compose 会将它以只读方式挂载到容器的 /app/config.toml。
# 与 blivedm_rs 一致的连接配置段。实际 Bilibili Cookie 不写在这里,
# 服务会通过下方 [cookiecloud] 在运行时获取最新 Cookie。
# 旧单用户配置兼容段:room_id 只在数据库没有任何账户时,绑定给首次
# 创建的 system_admin,并且此后不可修改。后续账号的 room_id 由系统
# 管理员创建邀请码时指定,不读取此字段。
# 实际 Bilibili Cookie 不直接写在配置中,而是通过 CookieCloud 获取。
[connection]
room_id = "000000"
room_id = "123456" # 替换为首个系统管理员的真实直播间 ID;不能以 0 开头。
# cookies = "SESSDATA=..." # 不需要;由 CookieCloud 托管。
# HTTP、WebSocket 及静态前端监听端口。host 网络模式下为宿主机端口。
# HTTP、WebSocket 及静态前端监听地址。host 网络模式下只绑定
# 127.0.0.1,让同机 Nginx 代理,不要将应用端口直接暴露到公网。
[server]
bind_address = "127.0.0.1"
port = 9719
# 弹幕姬设置数据库。此账号必须可创建和修改 overlay_settings 表。
# 多用户数据库。保存账户、邀请码、TOTP 注册状态、会话、恢复码摘要、
# 加密 CookieCloud 凭据、直播源、组件/设置、OBS token 摘要和审计日志。
# 数据库账号必须能执行项目迁移;租户表会启用 RLS。
[database]
url = "postgresql://streamutils:replace-with-database-password@127.0.0.1:5432/streamutils?sslmode=disable"
# 外部部署的 CookieCloud 实例。key 是同步 UUID;password 是同步密码。
# 旧单用户配置兼容段:只在首次 system_admin 初始化时导入到该账户,
# 随后 Key 和密码会使用 security.data_encryption_key 加密存入 PostgreSQL。
# 受邀用户在自己的 /control 页面填写各自的 CookieCloud;不同账户不会
# 共用凭据。迁移完成后修改此段不会覆盖数据库中的凭据。
# key 是 CookieCloud 同步 UUID;password 是同步密码。
[cookiecloud]
host = "http://127.0.0.1:8088"
key = "replace-with-cookiecloud-uuid"
password = "replace-with-cookiecloud-password"
# 管理台登录密码和用于签发 HTTP-only 会话 Cookie 的随机密钥。
# session_secret 建议至少 32 个随机字符。
# password 是一次性 bootstrap proof,只能在数据库尚无账户时授权创建
# 第一个 system_admin。它不会成为账户密码,也不能用于日常登录。
# 所有账户都是 passwordless:以后使用 username + TOTP(或恢复码)登录。
# session_secret 是旧配置兼容字段,目前仍为必填;填写了下方独立的数据
# 加密密钥后,它不用于签发数据库会话。两个值都应使用独立随机内容。
[admin]
password = "replace-with-a-long-admin-password"
password = "replace-with-a-one-time-bootstrap-secret"
session_secret = "replace-with-at-least-32-random-characters"
# OBS 页面只读订阅令牌;浏览器源 URL 为 /obs?token=<access_token>。
# 多用户身份安全配置。用 `openssl rand -base64 32` 生成独立的 32 字节
# Base64 密钥。它使用 XChaCha20-Poly1305 加密 TOTP Secret 和各用户的
# CookieCloud Key/密码;遗失或更换后无法恢复已有密文,请安全备份。
[security]
data_encryption_key = "replace-with-32-random-bytes-in-base64"
# TOTP 验证器中显示的 issuer;上线后不建议随意更改。
totp_issuer = "danmaku.luoxingci.com"
# 登录会话、二维码绑定流程和普通邀请码的默认有效期。
session_ttl_hours = 12
registration_ttl_minutes = 15
invitation_ttl_hours = 72
# 公开站点必须由 Nginx/可信反代提供 HTTPS,并保持此项为 true。
# 只有本机、无敏感数据的纯 HTTP 调试才能临时设为 false。
secure_cookies = true
# 用户只能配置此白名单中的 CookieCloud 基础地址,防止任意服务端
# 请求。必须包含上方 cookiecloud.host;可填多个管理员批准的实例。
cookiecloud_allowed_hosts = ["http://127.0.0.1:8088"]
# 旧 OBS token 兼容段:只导入首个 system_admin 的默认弹幕组件一次。
# 新组件通过控制台生成独立、可撤销且只存摘要的 token,地址格式为:
# /obs/<publicId>#token=<component-token>
# 没有需要迁移的旧 OBS 浏览器源时可设为空字符串。
[obs]
access_token = "replace-with-a-long-random-obs-token"
# Bilibili 礼物目录缓存。启动时会立即加载,之后按此间隔刷新;
# 请求失败会继续使用上一次成功结果。刷新间隔最小 60 秒。
# 各活动直播源的 Bilibili 礼物目录缓存。启动时立即加载,之后按此
# 间隔刷新;失败时保留上一次成功结果。刷新间隔最小 60 秒。
[gifts]
refresh_interval_seconds = 600
request_timeout_seconds = 10
# Bilibili 直播间表情目录缓存。接口使用 CookieCloud 中的 SESSDATA;
# 实时消息自带的表情图片始终优先,目录仅用于补齐缺失的图片地址。
# 各用户 Bilibili 直播间表情目录缓存。接口使用该用户加密保存的
# CookieCloud/SESSDATA;消息自带图片始终优先,目录仅补齐缺失地址。
[emoticons]
refresh_interval_seconds = 600
request_timeout_seconds = 10
# OBS 弹幕姬的初始设置。仅当该直播间尚未通过 /control 保存过设置时使用;
# 一旦控制台保存,PostgreSQL 中的设置优先。价格阈值单位为千分之一元,
# 因此 10000 = 10 元、100000 = 100 元。
# 旧弹幕姬初始设置兼容段:只在首次 system_admin 初始化时,作为其默认
# danmaku_overlay 的旧数据迁移/回退值。其他受邀用户使用组件内建默认值;
# 所有用户之后都在 /control 按组件修改,PostgreSQL 设置始终优先。
# 迁移后修改这里不会覆盖任何已有组件。价格单位为千分之一元,因此
# 10000 = 10 元、100000 = 100 元。
[overlay]
title = "洛星瓷专用弹幕猪!"
# 全局字号百分比,可在管理控制台中实时调整;允许范围 50-300。
font_scale = 140
max_visible = 5
@@ -66,7 +102,7 @@ low_performance_mode = false
high_value_threshold = 10000
featured_value_threshold = 100000
# 初始显示的事件类别,同样可在 /control 中随时修改并实时同步到 OBS。
# 首个旧组件迁移时显示的事件类别;之后在 /control 中按组件修改。
[overlay.events]
danmaku = true
enter = true