# 2026-06-20 运维实录 ## 有声书服务全线搭建 ### Audiobookshelf 部署 - Docker 部署 ghcr.io/advplyr/audiobookshelf:latest,端口 13378 - Caddy 反代 podcast.xybkwd.top - 手机端希声 App 同步收听 ### 章节排序三层同步铁律 只改文件名不生效,Audiobookshelf 按三层数据排序: | 层 | 字段 | 规则 | |:---|:---|:---| | 文件系统 | 文件名 01-标题.mp3 | 数字前缀 | | books.chapters | start(秒) | 连续递增 | | books.audioFiles | index | 1→2→3→... | ### 下载→归档工作流 ``` yt-dlp 下载(带 upload_date) → 排序 → 加前缀 → audiobooks/节目名/ → archive_old_audio.sh <节目> 3 (淘汰旧集到 archive_pending/) → sync_archive.sh (SCP到 D:/服务器备份/有声书/) → watcher 自动检测 → 希声同步 ``` ### 本地归档 - D:/服务器备份/有声书/<节目名>/ (D盘 392G) - 脚本: archive_old_audio.sh / sync_archive.sh ### 有声书内容 | 节目 | 集数 | 来源 | 状态 | |:---|:---|:---|:---| | 渤海小吏·八王之乱 | 5集 | B站 | ✅ | | 纵横四海 | 3集 | B站 | ✅ | | 翟东升 | - | YouTube | ❌ 需cookies | | Elon Musk | 99集 | 本地导入 | ✅ | ## 踩坑 1. 数据库误删 — 任何 DB/cache 操作必须先确认 2. 章节排序是 start 时间戳,不是文件名字母序 3. SCP 中文路径失败 — 需临时英文路径中转 4. 容器有 watcher,不需要重启 5. B站用 -f worst 最小化下载,每集 ~40MB 6. YouTube 需要 cookies 认证 ## 文档体系 - server-ops: TIMELINE + CHANGELOG + DECISION_LOG 全面补全 - dashboard: CHANGELOG v1.4.0 - nav-page: CHANGELOG v1.0.3 - inspiration-collector: CHANGELOG v2.2 + 文章20_服务器 - 服务清单 10→17 项 ## 今日感悟 - "不可越过":管线通了就收手,知道什么时候够了 - "车马华服":客户端追求渲染,服务器追求完成 - 三层记忆:WorkBuddy + 项目级 + 宏观,比空白强 ## 23:15 阅读日报时间窗口修复 **问题**:`daily_report_ai.py` 的 `load_today_data()` 使用 `date_str = datetime.now().strftime("%Y-%m-%d")` 严格按日历日过滤。22:00 后的晚间阅读(标记为当日日期)会被次日的严格日历过滤漏掉。 **修复**: - `parse_time_from_line` → 改为捕获完整 `datetime` 对象 - `load_today_data` → 改为 24 小时滚动窗口(`since_dt = now - 24h`) - 文件:`/home/ubuntu/weread-sync/daily_report_ai.py` - 验证:`python3 -m py_compile` 通过 - 生效:明日 22:00 cron **教训**:任何"每日"定时任务如果用日历日过滤,必须考虑夜间时段的归属。滚动窗口(过去N小时)比日历日更鲁棒。 ## 23:25 🔴 两大核心服务时间窗口铁律固化 ### 日报 cron 分支分歧修复 - 根因:两条线推同一个 inspiration-collector 仓库撞车(WorkBuddy推文章 vs cron推日报) - 修复:`run_daily_digest.sh` 增加 `git pull --rebase` before push - 以前没出过是因为以前推文顺序在日报之后 ### 阅读日报 24h 滚动窗口修复 - 问题:`daily_report_ai.py` 的 `load_today_data()` 严格按日历日过滤,晚间阅读漏入次日间隙 - 修复:改为 `since_dt = now - timedelta(hours=24)` 时间戳比较 - 经验:任何"每日"定时任务,滚动窗口比日历日更鲁棒 ### 三层文档已同步 - 项目级:weread-notes Gitea (commit 2508746) - 宏观:server-ops DECISION_LOG + daily - 本地:Claw MEMORY.md 铁律