• v0.2.2 2ea33d7572

    v0.2.2 — 安装引导 + Admin 管理后台 + 全局设置
    Docker Publish / build-and-push (push) Canceled after 0s
    Stable

    sun released this 2026-09-05 00:37:02 +08:00 | 24 commits to main since this release

    将 develop 合入 main。本次发布把 v0.1.0 纯环境变量配置方案,升级为 WebUI 全流程管理。


    新增

    M0 — SQLite 存储层

    • modernc.org/sqlite (无 CGO) 接管所有运行时配置
    • store/ 包:settings / voices 两表,PRAGMA WAL + foreign_keys
    • 启动期自动检测 DB 完整性,损坏时备份为 .corrupt-<时间戳> 并回退到 setup 模式

    M1 — 安装引导

    • 首次启动(无 installed.lock)进入 setup 模式
    • /setup 页面 4 步表单:凭证 → 默认路由 → 音色列表 → 确认
    • Vue 3.4 + axios 1.6 via bootcdn,//go:embed 进 binary
    • 装完写 installed.lock 锁定,后续访问 /setup 302 跳 /admin

    M2 — Admin 管理后台

    • /admin 单页 SPA:仪表盘 / 音色管理 / 全局设置 / CORS
    • 音色 CRUD:新增 / 删除 / 启用切换
    • 鉴权复用 OpenAI API key(DB 里 auth_key)
    • 浏览器安装模式完全跳过 CORS

    M3 — 全局设置 + 声音路由

    • default_speaker 是 voice 名字(如 chun),路由时查 voice 表拿真 speaker ID
    • POST /v1/audio/speech 支持 voice=<name> 动态路由
    • 未知 voice 返 400 unknown voice: '<name>'
    • 禁用 voice 返 403 voice '<name>' is disabled
    • 改设置后下一个请求立即生效(不需重启)

    M4 — 文档 + 工程收敛

    • README 重写:聚焦 WebUI 引导 + 老用户迁移 + 资源 ID 1.0/2.0 区别
    • 新增 CHANGELOG.md / PROJECT_BOOK.md
    • .env.example 收敛到 4 个引导 env
    • docker-compose 加 named volume tts-data 持久化 tts.db
    • Dockerfile 准备 /data 目录并开放 appuser 写权限
    • 4 个集成测试(lock / setup / voices / tts_voice)

    运维工具

    • cmd/dumpdb:dump tts.db 的 settings + voices,敏感字段自动打码

    配置迁移

    v0.1.0 用 env 配 11 个 BYTEDANCE_TTS_* 变量。v0.2.2 起改 WebUI 持久化到 SQLite。

    配置 v0.1.0 (env) v0.2.2 (DB)
    API Key BYTEDANCE_TTS_API_KEY /setup 或 /admin
    默认音色 BYTEDANCE_TTS_SPEAKER 同上(填 voice 名字,非 speaker ID)
    资源 ID BYTEDANCE_TTS_RESOURCE_ID 同上
    CORS ALLOWED_ORIGINS /admin CORS tab
    OpenAI key OPENAI_TTS_API_KEY /setup 或 /admin

    启动引导只需 4 个 env(DB 不存在时必需):

    TTS_ADMIN_KEY     安装 token
    TTS_DB_PATH       DB 路径(默认 ./tts.db)
    PORT              监听端口(默认 8080)
    OPENAI_TTS_API_KEY  OpenAI 接口鉴权(可选)
    

    向后兼容:老 env 仍可作为 DB 缺失时的 fallback,不强制迁移。


    安全修复

    编号 等级 问题 修复
    SEC-001 中 speaker ID(用户付费资产)在日志 / metrics / admin API 响应中明文暴露 日志打码 S_G8****naJ1;metrics label 用 sha1[:8] 不可逆哈希;admin API 只回前 4 + 后 4
    SEC-002 中 enabled=0 字段不生效,禁用音色仍可调用 禁用时返 403 voice_disabled,与 unknown_voice (400) 形成清晰区分
    SEC-003 低 安装 token 比较用普通 ==,存在计时攻击风险 改 subtle.ConstantTimeCompare / common.SecureEqualString
    SEC-004 低 normal 模式配置加载失败后服务继续跑,所有请求 503 但用户无感 改 fail-fast:log.Fatalf 退出 + /health body 加 configuration_error 字段 + metric tts_config_load_failures_total{mode="normal"} 供告警

    行为变化

    启动

    • 首次启动(无 DB)→ 监听端口,浏览器 /setup 引导
    • 正常启动(已有 DB)→ 直接加载,访问 /admin
    • DB 损坏 → 自愈回退到 setup 模式
    • normal + 配置坏 → fail-fast 退出(K8s 拉起会循环触发,便于告警)

    CORS

    • 安装模式完全跳过 CORS
    • 同源请求自动豁免
    • 预检不消耗限流配额
    • 配置全 DB 化

    资源 ID

    • V3 API 复刻 2.0 项目应填 seed-icl-2.0(不是 volc.megatts.icl)
    • 模型名 seed-tts-2.0-standard(不复用 resource id)

    下载

    平台 文件
    Windows x64 tts-api.exe
    Docker ghcr.io/Blue-Ink-Studio/Volcano-Engine-TTS-UI:v0.2.2
    源码 Source code (zip) / (tar.gz)

    升级步骤

    1. 拉取最新代码或镜像
    2. 备份旧 env(API Key / speaker ID / 资源 ID),安装时重新输入
    3. 启动服务(首次进 setup 模式)
    4. 浏览器 /setup 完成配置
    5. 验证:/health 无 configuration_error,/admin 可登录
    6. 客户端测试 /v1/audio/speech 合成正常

    统计

    • 本次新 commit:22(M0-M4 全在 develop)+ 1 反向合并 = 23
    • 总 commit(远端 main):含 VUL 修复 + CI workflow 共 106
    • 变更文件:33
    • 新增代码:+4763 行(Go ~2952,UI ~1503,文档 + 配置 + 测试 ~300)
    • 新增包:store / installer / cmd/dumpdb / middleware/installguard / middleware/admin_auth

    已知 / 后续

    • ui-arch-debt:admin.html 当前是单文件 ~60KB,M5 拆分(按需加载,CDN 分片缓存)
    • /dashboard 合并到 /admin:避免"两个状态页"用户困惑
    • 集成测试目前 gitignore(按本地策略),未来挪到 CI

    致谢

    23 个独立 commit 来自本仓库维护者(3371392206@qq.com)。

    Downloads