网页控制台
服务端自带一个零依赖、零外链的网页控制台,浏览器打开根路径就是:
text
http://<服务器IP>:8080/
(上面这张是 Ubuntu 22.04 + P106-100 上的真实运行截图。)
页面上有什么
顶部状态卡
| 卡片 | 内容 |
|---|---|
| 服务状态 | 正常 / 降级、是否就绪、并发数 |
| 推理设备 | cuda:0 · fp16 还是 cpu、显卡架构、是否已经降级过 |
| 音色模型 | 当前加载的 .pth 文件名、f0 算法 |
| 语音源 | edgetts / auto / sapi / espeak、发音人、本地语音是否可用 |
| 累计成功 | 成功 / 失败 / 缓存命中 / 队列长度 |
| 音频占用 | 当前磁盘占用、文件数、保留时长 |
显卡状态
实时刷新(2 秒缓存):
- 型号、驱动版本
- 利用率(进度条,超过 85% 变红)
- 显存占用
551 / 6144 MB (9.0%) - 温度、功耗、风扇转速、SM / MEM 频率
- 谁在占用显卡 —— PID + 进程名 + 用了多少显存
- PyTorch 版本、CUDA 版本、算力、已编译的架构列表
主机状态
内存、交换分区、磁盘、负载(1/5/15 分钟)、CPU 核数、运行时长。
合成测试
输入框里打一句话,点「合成并播放」就能直接在页面上听效果, 还能选 wav / mp3 格式、下载音频。
这个面板需要填 API Key(存在浏览器 localStorage 里), 因为 /api/tts 走的是 API Key 鉴权。
最近请求
最近 50 条请求的:时间、接口、状态码、耗时、来源 IP。 排障时特别有用 —— 能看到客户端到底有没有把请求打过来。
服务信息
模型路径、f0 算法、变调、超时、音频目录、最近一次错误。 底部还有「立即清理过期音频」按钮。
给控制台加密码
默认打开控制台不需要登录。想加一层保护,改 config.yaml:
yaml
webui:
enabled: true
username: "admin"
password: "你的密码" # 留空 = 关闭登录
session_hours: 12 # 登录状态保持多久改完重启服务。之后:
- 未登录访问
/→ 自动跳到/login - 未登录访问管理接口(
/api/gpu、/api/stats等)→ 返回 401 - 登录成功 → 种一个 HMAC-SHA256 签名的会话 Cookie(HttpOnly)
哪些接口受保护
| 路径 | 需要控制台密码 | 需要 API Key |
|---|---|---|
/、/api/gpu、/api/system、/api/stats、/api/config、/api/cleanup | ✅ | ❌ |
/api/tts、/api/tts/file | ❌ | ✅ |
/api/health | ❌ | ❌ |
/docs(FastAPI 自带文档) | ✅ | ❌ |
为什么语音接口不受控制台密码保护
AstrBot 这类调用方没有浏览器 Cookie,不能让它依赖登录态。 它由 API Key 保护,两层互不干扰。
会话密钥
签名密钥持久化在 config.yaml 同目录的 .webui_secret(32 字节随机数, 权限 600)。所以重启服务不会把已登录的人踢下线。
忘记密码了
直接改 config.yaml 里的 password 然后重启; 或者清空它,控制台就回到不需要登录的状态。
安全提醒
这套密码验证只适合可信局域网
控制台密码是明文比较,Cookie 也走 HTTP 明文传输。 它解决的是"别让人随手点开我的控制台",不是"抵御攻击者"。
真要暴露到公网,请在前面套一层 Nginx / Caddy:
- 上 HTTPS
- 加限流
- 需要更强认证就用 Basic Auth 或 OAuth
同样地,security.api_key 也是明文比较。公网部署务必套 HTTPS。