docs: Audiobookshelf v11.0 — 完整部署记录 + 决策经验固化

- TIMELINE: v11.0 有声书服务上线 + 音频归档体系
- CHANGELOG: v1.3.0 Audiobookshelf 部署 + 踩坑记录
- DECISION_LOG: O-2026-06-20 x3 (归档分层/章节排序/部门拆分)
- README: 新增 ebook-library + Audiobookshelf 条目
- 服务清单: 新增 podcast.xybkwd.top + 音频归档
This commit is contained in:
fxy
2026-06-20 15:09:01 +08:00
parent cc4692bb64
commit 4171581c81
4 changed files with 114 additions and 1 deletions

View File

@ -199,3 +199,23 @@ NYT, CNN, Al Jazeera, TechCrunch, BBC, The Guardian, CNBC, Bloomberg
- selector.py — 新源权重 + 主题差异化上限
- summarize_news.py — 来源恢复逻辑 + 时间格式修复
- sync.py — 阅读时长秒→分钟
## v1.3.0 (2026-06-20) — Audiobookshelf 有声书服务
### Added
- **Audiobookshelf** Docker 部署ghcr.io/advplyr/audiobookshelf:latest端口 13378
- Caddy 反代 `podcast.xybkwd.top`
- `archive_old_audio.sh` — 服务器端滚动淘汰脚本每节目保留3集
- `sync_archive.sh` — 本地 D 盘归档同步脚本
- `D:/服务器备份/有声书/` — 本地永久音频归档目录
- 文体部工作空间 — 播客/有声书/课程学习管理
### Changed
- 服务清单新增 Audiobookshelf (podcast.xybkwd.top)
### Lessons Learned (Critical)
- 🔴 数据库/cache 操作必须先问用户,不得擅自执行(造成 Audiobookshelf DB 误删)
- Audiobookshelf 章节排序依赖三层:文件名 + chapters[].start + audioFiles[].index
- 排序依据必须是源端 upload_date不准凭主观判断
- 容器有 watcher 自动检测文件变化,不需要重启
- B站无纯音频流`-f worstvideo+worstaudio/worst` 最小化下载量

View File

@ -39,3 +39,39 @@
22:15 WorkBuddy 自动化 → 读取 digest + 待办 → 微信推送工作报告
23:00 WorkBuddy 自动化 → 全量固化检查 → 补漏 → git push → 微信通知
```
### O-2026-06-20: 音频滚动淘汰 + 本地归档分层存储
**决策**:服务器每节目只保留最新 3 集,旧集通过 `archive_old_audio.sh` 移到 `archive_pending/`,再由 `sync_archive.sh` SCP 到本地 D 盘归档。
**原因**
- 服务器磁盘有限59G 总量40G 可用),不滚动物理上无法长期扩容
- 冯先生明确要求旧音频不直接删除,要保存为个人财富
- 本地 D 盘 392G 可用,足以存储大量音频
**架构**
```
服务器 audiobooks/ (3集) → archive_pending/ (暂存) → D:/服务器备份/有声书/ (永久)
```
### O-2026-06-20: 章节排序以源端发布时间为准
**决策**:同一专辑多集章节的排序,必须依据 B站/YouTube 的 `upload_date`,不准靠文件名或主观判断。
**原因**中文文件名排序Unicode 码位顺序)与实际发布时间经常不一致。`【深】` vs `【妖】` 在中文排序中【深】靠前,但视频发布顺序是【妖】先于【深】。
**实施**:下载时 `--print upload_date` 记录源端时间,按 upload_date 升序排列生成 01-N 前缀。
### O-2026-06-20: 多部门工作空间拆分
**决策**:从单一 Claw 工作空间拆分为 6 个独立工作空间:
| 部门 | 路径 | 职责 |
|:---|:---|:---|
| 主任 | Claw | 总协调、宏观记忆 |
| 办公室 | 办公室 | 公文写作 |
| 交易部 | 服务器 | 策略研发/实盘 |
| 智库办 | 智库办 | 形势分析 |
| 开发部 | dev-department | 部署/运维 |
| 文体部 | 文体部 | 播客/有声书 |
**原因**:单空间上下文被压缩,各部门任务相互污染。拆分后各空间独立记忆,主任只保留宏观摘要。

View File

@ -21,7 +21,9 @@
| beast/ai-chat | AI 对话 |
| beast/todo-system | 待办系统 |
| beast/daily-brief | 日报生成 |
| beast/ebook-library | 电子书库 + AI读书助手 |
| beast/server-ops | **跨服务的运维日志(本仓库)** |
| — | Audiobookshelf (podcast.xybkwd.top) — 无独立仓库,运维记录在 server-ops |
## 目录结构

View File

@ -125,13 +125,15 @@
| Caddy反代 | 各域名 | 80/443 | ✅ 运行中 |
| Gitea | gitea.xybkwd.top | 3000 | ✅ 运行中 |
| Memos | memo.xybkwd.top | 5230 | ✅ 运行中 |
| Beast Dashboard | dashboard.xybkwd.top | 9000 | ✅ dry-run 运行中 |
| Dashboard | dashboard.xybkwd.top | 9000 | ✅ dry-run 运行中 |
| AI Chat | chat.xybkwd.top | 8900 | ✅ 运行中 |
| Todo Server | nav.xybkwd.top/api | 9001 | ✅ 运行中 |
| 每日要闻 | brief.xybkwd.top | 静态 | ✅ 运行中 |
| 栖云导航 | nav.xybkwd.top | 静态 | ✅ 运行中 |
| **Audiobookshelf** | **podcast.xybkwd.top** | **13378** | **✅ 运行中** |
| 灵感收集器 | — | cron | ✅ 每日 22:00 运行 |
| 系统备份 | — | cron | ✅ 每日 04:00 运行 |
| 音频归档 | D://服务器备份//有声书// | — | ✅ 手动同步 |
---
@ -186,3 +188,56 @@
**安全铁律**
- 严禁取消 basicauth任何调试通过 localhost 不改 Caddyfile
---
### 2026-06-20 — Audiobookshelf 有声书服务上线 + 音频归档体系
**v11.0 — 有声书 & 播客服务**
**部署内容**
- Docker 部署 `ghcr.io/advplyr/audiobookshelf:latest`,端口 13378
- Caddy 反代到 `podcast.xybkwd.top`
- docker-compose 管理:`/home/ubuntu/audiobookshelf/docker-compose.yml`
- 数据目录:`config/` `metadata/` `audiobooks/` `podcasts/`
- 手机端通过希声 App 同步收听
**核心工作流**
```
B站/YouTube → yt-dlp 下载(带 upload_date) → 转 MP3
→ 按源端发布时间排序 → 加 01-N 前缀(完整保留标题)
→ 放入 audiobooks/节目名/
→ Audiobookshelf watcher 自动检测 → 希声自动同步
```
**技术突破 — 章节排序三层同步铁律**
Audiobookshelf 章节排序依赖三层数据,只改文件名不生效:
| 层 | 位置 | 关键字段 | 规则 |
|:---|:---|:---|:---|
| ① 文件系统 | 文件名 | `01-标题.mp3` | 数字前缀确保字母序 |
| ② books 表 | `chapters` JSON | `start`(秒) | 必须连续递增 |
| ③ books 表 | `audioFiles` JSON | `index` | 必须顺序 1→2→3→... |
**滚动淘汰 + 本地归档体系**
- 每节目服务器只保留最新 3 集(节省磁盘)
- 淘汰的旧集 → `archive_pending/` 暂存 → `sync_archive.sh` SCP 到本地
- 本地归档:`D:/服务器备份/有声书/<节目名>/`D 盘 392G 可用)
- 服务器脚本:`/home/ubuntu/audiobookshelf/scripts/archive_old_audio.sh`
- 本地脚本:`D:/服务器备份/有声书/sync_archive.sh`
**踩坑记录**
1. 数据库误删 — 必须问用户再动手(血的教训)
2. 章节排序 — 不是靠文件名字母序,是靠 chapters[].start 时间戳
3. SCP 中文路径 — 含空格的目录需临时路径中转
4. 容器无需频繁重启 — watcher 自动检测文件变化
5. B站无纯音频流 — 用 `-f worstvideo+worstaudio/worst` 最小化下载量
**当前有声书内容**
| 节目 | 集数 | 来源 |
|:---|:---|:---|
| 渤海小吏·八王之乱 | 5集 | B站 |
| 纵横四海 | 3集 | B站 |
| 翟东升 | 3集 | YouTube |
| Elon Musk | 99集 | 本地导入 |
**意义**:从碎片化的通勤时间利用,升级为一套完整的"内容获取 → 整理归档 → 移动收听"流水线。个人知识输入的又一条通道。