- TIMELINE: v11.0 有声书服务上线 + 音频归档体系 - CHANGELOG: v1.3.0 Audiobookshelf 部署 + 踩坑记录 - DECISION_LOG: O-2026-06-20 x3 (归档分层/章节排序/部门拆分) - README: 新增 ebook-library + Audiobookshelf 条目 - 服务清单: 新增 podcast.xybkwd.top + 音频归档
10 KiB
10 KiB
服务器服务部署时间线
记录东京服务器(43.163.225.30)上每个服务的诞生背景和部署时间。
2026 年之前
🔴 Beast Trader 策略运行(起点)
- 背景:你已经在服务器上运行 Freqtrade 策略,但无法实时监控运行状态
- 痛点:策略有没有在跑、最近有没有成交、收益如何——这些信息需要一个面板来展示
- 这是一切的起点
2026 年上半年
🟡 v1.0 — Beast Dashboard(监控面板)
- 部署时间:约 2026 年初
- 背景:策略运行在 freqtrade 上,需要一个 Web 面板实时监控
- 技术选型:FastAPI 后端(端口 9000)+ 纯 HTML 前端,Caddy 反代
dashboard.xybkwd.top - 核心功能:实时展示策略状态、持仓、最近交易记录
- 意义:服务器上第一个自建 Web 服务,打开了后续所有服务的大门
🟢 v2.0 — Telegram Bot 通知
- 部署时间:Dashboard 之后不久
- 背景:Dashboard 需要人主动去看,策略有信号时需要主动推送
- 技术选型:Freqtrade 原生 Telegram 集成 + 自建
@jason5612_bot - 核心功能:策略信号推送、交易通知、每日日报推送到微信(通过 Server酱)
- 意义:从"人查面板"升级到"机器主动通知"
🟢 v3.0 — Caddy 反向代理
- 部署时间:服务数量达到 3 个左右时
- 背景:每个服务都跑在不同端口,直接 IP:端口 访问体验差,且没有 HTTPS
- 技术选型:Caddy(自动 Let's Encrypt 证书)+ 域名(
xybkwd.top系列) - 核心功能:统一入口、HTTPS、basic_auth 保护
- 意义:从此访问服务变成正常的域名访问,安全性也解决了
🔵 v4.0 — Gitea(私有 Git 服务)
- 部署时间:约 2026 年中
- 背景:策略代码、面板代码都在服务器上手工改,没有版本控制,一旦改坏无法回滚
- 技术选型:Gitea(轻量级自托管 Git)+
gitea.xybkwd.top - 核心功能:代码版本管理、跨设备同步、作为知识库中枢
- 意义:从此所有代码改动都有历史记录,服务器上的"作坊"升级成"有规范的工程"
🟣 v5.0 — 灵感收集器(Memos → AI → Gitea)
- 部署时间:约 2026 年 5 月
- 背景:你有很多碎片想法(微信、备忘录),但散落各处,无法沉淀
- 技术选型:Memos(碎片记录)+ Daily Digest 脚本(DeepSeek API 分析)+ Gitea 存储
- 核心功能:碎片灵感 → AI 深度分析 → Markdown 归档 → Gitea
- cron:每日 22:00 北京时间自动运行
- 意义:第一次把"AI 分析"引入工作流,不只是执行策略,还帮你思考
🟠 v6.0 — 栖云导航页(nav.xybkwd.top)
- 部署时间:约 2026 年 5-6 月
- 背景:服务越来越多,需要一个统一入口
- 技术选型:纯静态 HTML(
/var/www/nav/index.html)+ Caddy 静态托管 - 核心功能:所有服务的导航、快速跳转
- 意义:"栖云"这个名字就是这时候定的,个人数据中心的雏形出现了
🔴 v7.0 — 每日要闻(brief.xybkwd.top)
- 部署时间:约 2026 年 6 月初
- 背景:每天想快速了解重要新闻,但不想被信息流淹没
- 技术选型:RSS 抓取(7 个源)→ DeepSeek 总结 →
brief.html两栏展示 - 核心功能:AI 精选摘要、分类展示、移动端适配
- cron:每 3 小时抓取一次,30 分钟后 AI 总结
- 意义:第一次把"新闻聚合 + AI 总结"做成自动化流水线
🔵 v8.0 — Todo 系统(todos.html + todo_server.py)
- 部署时间:约 2026 年 6 月
- 背景:灵感收集器分析了你的想法,但产生的待办事项没有地方管理
- 技术选型:Python HTTP Server(端口 9001)+ PWA 前端(
todos.html) - 核心功能:CRUD 待办、优先级、分类、从灵感自动提取 todo
- 意义:灵感 → 待办 → 执行的闭环形成了
🟢 v9.0 — AI 对话(chat.xybkwd.top)
- 部署时间:约 2026 年 6 月
- 背景:想在手机上直接和 AI 对话,而不依赖 WorkBuddy 桌面端
- 技术选型:FastAPI + SQLite(端口 8900)+ 内嵌 HTML/JS 前端
- 核心功能:移动端 AI 对话、对话历史存储、Markdown 渲染
- 意义:WorkBuddy 的能力延伸到了手机端
🟡 v10.0 — 系统备份自动化
- 部署时间:约 2026 年 6 月中旬
- 背景:服务越来越多,一旦服务器出问题,重建成本很高
- 技术选型:
backup.sh脚本 + cron 每日 04:00 自动备份 - 备份内容:系统配置、Docker 元数据、SQLite 数据库、工作目录、SSL 证书
- 意义:从"能跑"升级到"不怕丢"
当前状态(2026-06-15)
| 服务 | 域名 | 端口 | 状态 |
|---|---|---|---|
| Caddy(反代) | 各域名 | 80/443 | ✅ 运行中 |
| Gitea | gitea.xybkwd.top | 3000 | ✅ 运行中 |
| Memos | memo.xybkwd.top | 5230 | ✅ 运行中 |
| 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://服务器备份//有声书// | — | ✅ 手动同步 |
演化规律
每次加新服务,都遵循同一个模式:
痛点出现 → 找到一个最小可用的技术方案 → 快速上线 → 用一段时间 → 发现新问题 → 迭代或加新服务
没有一开始就做宏大规划,都是按需生长。现在的架构是 10 次迭代 自然演化的结果。
2026-06-15 — Calibre-Web 电子书库上线
背景:冯总在文石阅读器上读书并做标注,需要一个统一管理平台,且与 AI 打通。
部署内容:
- Docker 部署
linuxserver/calibre-web:latest - 端口:8083,Caddy 反代到
books.xybkwd.top - 数据目录:
~/calibre-web/books(图书库)、~/calibre-web/config(配置) - nav 导航页新增电子书库卡片(琥珀色书籍图标)
后续计划:
- 上传图书文件
- 打通文石标注同步(Calibre Companion / WebDAV)
- 开发 AI 读书助手(摘要生成、笔记整理、微信读书同步)
- 建立独立 Gitea 仓库
ebook-library管理书库相关代码和文档
意义:个人知识管理从多个碎片(Memos、要闻、Gitea)走向阅读 → 标注 → AI 分析 → 笔记归档的完整闭环。
2026-06-15 — Lucky 清除 & 全面安全加固
背景:冯总要求排查服务器安全状态,确保纯私有化部署的个人服务不对外暴露。
排查发现:
- Lucky 已无实质作用(进程、Docker、二进制均不存在),仅残留 配置目录(132KB)
- 所有服务的 Caddy basicauth 认证缺失(之前设置后被取消)
- ufw 残留 Lucky 端口规则(16601/tcp)和多余规则(9001/tcp)
- Shadowsocks 服务正常运行(31567/tcp,代理用途)
- fail2ban 未安装
执行操作:
- 彻底删除 (无 Docker 镜像/容器/卷残留)
- 恢复所有个人服务的 basicauth 保护(用户名 ,密码 )
- 加密的服务:gitea / dashboard / memo / nav / books
- 不加的服务:blog(公开)、vaultwarden(自身有登录)
- Caddyfile 备份到 server-ops 仓库
安全铁律:
- 严禁取消 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.shSCP 到本地 - 本地归档:
D:/服务器备份/有声书/<节目名>/(D 盘 392G 可用) - 服务器脚本:
/home/ubuntu/audiobookshelf/scripts/archive_old_audio.sh - 本地脚本:
D:/服务器备份/有声书/sync_archive.sh
踩坑记录:
- 数据库误删 — 必须问用户再动手(血的教训)
- 章节排序 — 不是靠文件名字母序,是靠 chapters[].start 时间戳
- SCP 中文路径 — 含空格的目录需临时路径中转
- 容器无需频繁重启 — watcher 自动检测文件变化
- B站无纯音频流 — 用
-f worstvideo+worstaudio/worst最小化下载量
当前有声书内容:
| 节目 | 集数 | 来源 |
|---|---|---|
| 渤海小吏·八王之乱 | 5集 | B站 |
| 纵横四海 | 3集 | B站 |
| 翟东升 | 3集 | YouTube |
| Elon Musk | 99集 | 本地导入 |
意义:从碎片化的通勤时间利用,升级为一套完整的"内容获取 → 整理归档 → 移动收听"流水线。个人知识输入的又一条通道。