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:
20
CHANGELOG.md
20
CHANGELOG.md
@ -199,3 +199,23 @@ NYT, CNN, Al Jazeera, TechCrunch, BBC, The Guardian, CNBC, Bloomberg
|
|||||||
- selector.py — 新源权重 + 主题差异化上限
|
- selector.py — 新源权重 + 主题差异化上限
|
||||||
- summarize_news.py — 来源恢复逻辑 + 时间格式修复
|
- summarize_news.py — 来源恢复逻辑 + 时间格式修复
|
||||||
- sync.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` 最小化下载量
|
||||||
|
|||||||
@ -39,3 +39,39 @@
|
|||||||
22:15 WorkBuddy 自动化 → 读取 digest + 待办 → 微信推送工作报告
|
22:15 WorkBuddy 自动化 → 读取 digest + 待办 → 微信推送工作报告
|
||||||
23:00 WorkBuddy 自动化 → 全量固化检查 → 补漏 → git push → 微信通知
|
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 | 部署/运维 |
|
||||||
|
| 文体部 | 文体部 | 播客/有声书 |
|
||||||
|
|
||||||
|
**原因**:单空间上下文被压缩,各部门任务相互污染。拆分后各空间独立记忆,主任只保留宏观摘要。
|
||||||
|
|||||||
@ -21,7 +21,9 @@
|
|||||||
| beast/ai-chat | AI 对话 |
|
| beast/ai-chat | AI 对话 |
|
||||||
| beast/todo-system | 待办系统 |
|
| beast/todo-system | 待办系统 |
|
||||||
| beast/daily-brief | 日报生成 |
|
| beast/daily-brief | 日报生成 |
|
||||||
|
| beast/ebook-library | 电子书库 + AI读书助手 |
|
||||||
| beast/server-ops | **跨服务的运维日志(本仓库)** |
|
| beast/server-ops | **跨服务的运维日志(本仓库)** |
|
||||||
|
| — | Audiobookshelf (podcast.xybkwd.top) — 无独立仓库,运维记录在 server-ops |
|
||||||
|
|
||||||
## 目录结构
|
## 目录结构
|
||||||
|
|
||||||
|
|||||||
57
TIMELINE.md
57
TIMELINE.md
@ -125,13 +125,15 @@
|
|||||||
| Caddy(反代) | 各域名 | 80/443 | ✅ 运行中 |
|
| Caddy(反代) | 各域名 | 80/443 | ✅ 运行中 |
|
||||||
| Gitea | gitea.xybkwd.top | 3000 | ✅ 运行中 |
|
| Gitea | gitea.xybkwd.top | 3000 | ✅ 运行中 |
|
||||||
| Memos | memo.xybkwd.top | 5230 | ✅ 运行中 |
|
| 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 | ✅ 运行中 |
|
| AI Chat | chat.xybkwd.top | 8900 | ✅ 运行中 |
|
||||||
| Todo Server | nav.xybkwd.top/api | 9001 | ✅ 运行中 |
|
| Todo Server | nav.xybkwd.top/api | 9001 | ✅ 运行中 |
|
||||||
| 每日要闻 | brief.xybkwd.top | 静态 | ✅ 运行中 |
|
| 每日要闻 | brief.xybkwd.top | 静态 | ✅ 运行中 |
|
||||||
| 栖云导航 | nav.xybkwd.top | 静态 | ✅ 运行中 |
|
| 栖云导航 | nav.xybkwd.top | 静态 | ✅ 运行中 |
|
||||||
|
| **Audiobookshelf** | **podcast.xybkwd.top** | **13378** | **✅ 运行中** |
|
||||||
| 灵感收集器 | — | cron | ✅ 每日 22:00 运行 |
|
| 灵感收集器 | — | cron | ✅ 每日 22:00 运行 |
|
||||||
| 系统备份 | — | cron | ✅ 每日 04:00 运行 |
|
| 系统备份 | — | cron | ✅ 每日 04:00 运行 |
|
||||||
|
| 音频归档 | D://服务器备份//有声书// | — | ✅ 手动同步 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -186,3 +188,56 @@
|
|||||||
|
|
||||||
**安全铁律**:
|
**安全铁律**:
|
||||||
- 严禁取消 basicauth,任何调试通过 localhost 不改 Caddyfile
|
- 严禁取消 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集 | 本地导入 |
|
||||||
|
|
||||||
|
**意义**:从碎片化的通勤时间利用,升级为一套完整的"内容获取 → 整理归档 → 移动收听"流水线。个人知识输入的又一条通道。
|
||||||
|
|||||||
Reference in New Issue
Block a user