Files
selfreleaseandDevin 6329f3f6b4 feat: 分享传播与经文纸水墨背景
- 分享按钮:系统分享 + 二维码卡片(qr.png),移动端移入播放行不再遮挡标题
- og 分享卡片元数据 + og.png 封面;beforeinstallprompt 安装提示
- robots.txt / sitemap.xml / poster.png 传播物料
- .sutra-paper 宣纸底纹:桌面 bg.jpg,移动端竖版 bg-m.jpg,夜间模式罩层适配
- 移动端设置区重排为双列标签网格

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-05 14:30:43 +08:00

4.4 KiB
Raw Permalink Blame History

运行手册 · 经典诵读站点

技术栈

项 版本 / 说明
前端 原生 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 外置数据文件,目录实时扫描,加经不改代码
背景音乐 bgm/ 目录音频文件循环播放(前端淡入淡出),deploy.sh 随 sutras/ 一并同步
传播资源 og.png 分享卡片图、qr.png 二维码、poster.png 海报、bg.jpg 经文底纹、robots.txt/sitemap.xml
后台面板 连点页脚提示 6 次唤出,GET /api/stats 返回运行统计(访客 IP 取 X-Forwarded-For 末位)

首次准备

cd "/Users/freedak/Documents/AIDashboard/心经"
cp .env.example .env   # 填入真实 DASHSCOPE_API_KEY

.env 变量:DASHSCOPE_API_KEY(必填)、DASHSCOPE_BASE、TTS_MODEL、PORT(默认 8000)。

应用启停

# 启动 [Native]
python3 server.py
# 打开 http://127.0.0.1:8000

# 停止:Ctrl+C

接口

  • POST /api/tts,请求体 {"text": "...", "voice": "Cherry"}(≤800 字),返回 audio/wav 字节流;合成结果缓存在 cache/ 目录(sha256(模型|音色|文本) 为键,原子写入,重启不丢、跨用户共享)。
  • GET /api/sutras,返回 {"sutras": [{id, name, cat, order}]},实时扫描 sutras/ 目录。
  • 静态文件由同一端口托管;经文正文走 GET sutras/<id>.json。

经文管理(加减经典)

经文为外置数据,增删不需要改任何代码、不需要重启服务:

./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 缓存首次播放时才生成(预热见下)

排错

现象 原因 处理
页面报"未配置 DASHSCOPE_API_KEY" .env 缺失或键名不对 检查 .env
502 / TTS 服务返回 4xx 密钥失效、音色与模型不匹配 换音色或核对密钥
浏览器播放无声 系统静音 / 自动播放策略 点击播放按钮触发

端口表

服务 端口
本地 Web + API 8000(.env 的 PORT 可改)
线上应用 8018(127.0.0.1,仅经 nginx 反代)

部署备份

线上部署(2026-09-28 已上线):

  • 域名:https://fj.all8ai.top(HTTP 301 → HTTPS,Let's Encrypt 证书自动续期)
  • 服务器:154.8.162.18(OpenCloudOS 9.4),应用目录 /opt/fj
  • 进程: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+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 为全部恢复所需。