feat: 经文数据外置 sutras/*.json,加减经不改代码
- 7部经文迁移至 sutras/ 目录,/api/sutras 实时扫描返回清单 - 前端改为按需懒加载经文 JSON(selectToken 防快速切换乱序) - add_sutra.sh:校验+上传/删除 一键管理,免重启 - 修正生僻异体字(𫗪→喂、𫄨→絺、𦈎→繟、鬪→斗) - run.md 同步新架构与经文管理文档 Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
@@ -1,12 +1,13 @@
|
||||
# 运行手册 · 心经诵读站点
|
||||
# 运行手册 · 经典诵读站点
|
||||
|
||||
## 技术栈
|
||||
|
||||
| 项 | 版本 / 说明 |
|
||||
|---|---|
|
||||
| 前端 | 原生 HTML + CSS + JS(无框架、无构建) |
|
||||
| 前端 | 原生 HTML + CSS + JS(无框架、无构建),PWA(manifest + sw.js,安装后无地址栏) |
|
||||
| 后端 | Python 3 标准库 `http.server`(无第三方依赖)[Native] |
|
||||
| TTS | 千问 `qwen3-tts-flash`,走 DashScope 兼容接口 `/api/v1/services/aigc/multimodal-generation/generation` |
|
||||
| 经文数据 | `sutras/*.json` 外置数据文件,目录实时扫描,加经不改代码 |
|
||||
|
||||
## 首次准备
|
||||
|
||||
@@ -29,8 +30,25 @@ python3 server.py
|
||||
|
||||
## 接口
|
||||
|
||||
- `POST /api/tts`,请求体 `{"text": "...", "voice": "Cherry"}`(≤600 字),返回 `audio/wav` 字节流;合成结果缓存在 `cache/` 目录。
|
||||
- 静态文件由同一端口托管。
|
||||
- `POST /api/tts`,请求体 `{"text": "...", "voice": "Cherry"}`(≤800 字),返回 `audio/wav` 字节流;合成结果缓存在 `cache/` 目录(sha256(模型|音色|文本) 为键,原子写入,重启不丢、跨用户共享)。
|
||||
- `GET /api/sutras`,返回 `{"sutras": [{id, name, cat, order}]}`,实时扫描 `sutras/` 目录。
|
||||
- 静态文件由同一端口托管;经文正文走 `GET sutras/<id>.json`。
|
||||
|
||||
## 经文管理(加减经典)
|
||||
|
||||
经文为外置数据,**增删不需要改任何代码、不需要重启服务**:
|
||||
|
||||
```bash
|
||||
./add_sutra.sh sutras/新经.json # 加经:校验 JSON → 上传 → 接口验证
|
||||
./add_sutra.sh --remove daodejing # 减经:按文件名或 JSON 内 id 字段匹配删除
|
||||
```
|
||||
|
||||
JSON 字段:`id`(唯一,对应文件名)、`order`(下拉排序)、`name`、`cat`(佛经/道家,决定下拉分组)、`title`、`seal`(印章文字)、`translator`、`source`、`sourceUrl`、`pageSize`(每页段数)、`segments`(数组,项为 `{h?, g?, t}`:h=段标题、 g=小注、t=正文,t 必填且 ≤800 字)。
|
||||
|
||||
注意:
|
||||
- 校验不过(缺字段/空段/超 800 字)会被脚本拒绝,不会上传坏数据
|
||||
- 删经后其 TTS 缓存 WAV 留在 `cache/` 无害
|
||||
- 新经的 TTS 缓存首次播放时才生成(预热见下)
|
||||
|
||||
## 排错
|
||||
|
||||
@@ -56,6 +74,9 @@ python3 server.py
|
||||
- 进程:`systemctl status|restart fj`(`/etc/systemd/system/fj.service`,Restart=always)
|
||||
- 反代:`/etc/nginx/conf.d/fj.conf` → `http://127.0.0.1:8018`(与 gugong/bs 等站点并存,互不冲突)
|
||||
- 环境变量:服务器上 `/opt/fj/.env`(`PORT=8018`、密钥等,不入 Git,也不被 deploy.sh 覆盖)
|
||||
- 更新发布:一键 `./deploy.sh`(同步前端+`server.py` → 重启 `fj.service` → 健康检查 https://fj.all8ai.top)。密码登录用 `FJ_PASS=xxx ./deploy.sh`(需本机 sshpass);已配 SSH key 则直接 `./deploy.sh`。**注意**:`.env` 不在同步列表内,服务器端 `PORT=8018` 不会被本地 `PORT=8000` 覆盖
|
||||
- 更新发布:一键 `./deploy.sh`(同步前端+`server.py`+`sutras/` 目录(--delete)→ 重启 `fj.service` → 健康检查 https://fj.all8ai.top)。密码登录用 `FJ_PASS=xxx ./deploy.sh`(需本机 sshpass);已配 SSH key 则直接 `./deploy.sh`。**注意**:`.env` 不在同步列表内,服务器端 `PORT=8018` 不会被本地 `PORT=8000` 覆盖
|
||||
- 只加/减单部经:用 `./add_sutra.sh`(更快,无需重启服务)
|
||||
|
||||
**TTS 缓存预热**:服务器上曾有 `/tmp/fj_warm.py` 一次性把全部经 × 2 音色合成进 `cache/`。新经如需预热可复用该脚本模式(遍历 segments × Seren/Ethan 调本机 `127.0.0.1:8018/api/tts`,已缓存自动跳过)。
|
||||
|
||||
备份:`cache/` 可删(自动重建);`/opt/fj` 目录 + `fj.service` + `fj.conf` 为全部恢复所需。
|
||||
|
||||
Reference in New Issue
Block a user