跳转至

个人知识库一期落地复盘

事实范围:一次个人项目从「分散笔记」到 Memos + Gitea + Obsidian + MkDocs notes + Webhook 的落地;依据为实施期文档与问题记录,非业务指标复盘。
用户使用说明:产品介绍.md


1. 需求目标 vs 落地结果(可核对)

目标维度 计划/期望 落地结果(客观)
碎片入口随时可用 VPS 上的 Memos,HTTPS 已提供域名入口;大图受 Nginx body 与 上行带宽 约束(已记录工单)
知识库 Markdown 自有 Obsidian + 私有 Git Gitea;关闭自助注册
手机可读只读站 稳定构建 + 移动布局 MkDocs Material;构建不依赖 Quartz 的外网 OG 链路
多端同步 Git Obsidian Git 插件定时 push;服务端工作副本 pull
更新延迟 可接受 v1.3 前置最坏约 cron+push ~20min;Webhook 后为 通常秒级
v1.0 未规划项 相册/录音/SSO 明确列入「待规划」,未混入一期强行交付

不足(与目标差距):家用第二台 Mac 未完成同步配置(仍为待办);notes 无访问控制;大媒体链路未建立。


2. 技术方案文档 vs 实际路径

文档/设想路径 实际路径
可能用 Tailscale 缩小暴露面 国区 无法安装 Tailscale App → 改为 域名 + HTTPS + 关注册
notes 静态站 Quartz 外网字体/OG 插件导致国内构建不稳 → 换 MkDocs
仅 cron 更新 notes pull+push 叠加延迟明显 → Gitea Webhook + adnanh/webhook,cron 兜底
单次 Certbot 新增 notes 子域时曾出现证书 SAN 不匹配 → 单独申请/核对 DNS

亮点:分层迭代(先同步与可达,再渲染与美化,再延迟优化)在本次中减少了「一次推倒」风险。


3. 关键动作复盘与 5Why 示例

案例 A:Webhook 返回 200 但站点不更新(摘录本质链)

现象:Gitea Delivery 成功,前端 notes 仍旧。

  1. Why 没变?—— 构建脚本未真正拉到新提交或未写对输出目录。
  2. Why 脚本失败未暴露?—— 一度仅看 HTTP 200,未跟 journalctl/git 报错。
  3. Why git 在脚本里报错?—— systemd 拉起的服务 无 HOME,且裸库 dubious ownership
  4. Why 环境与属主成这样?—— webhook 在非登录环境执行;仓库由容器用户属主创建。
  5. Why 未在预演中发现?—— 手工在 shell 里跑脚本服务实际环境 不一致,缺一条「服务环境试跑」检查。

结论动作:service 写明 Environment=HOME=...safe.directory 配齐;对钩先试 curl,再看日志与输出目录时间戳。可复现检查已写入 维护手册细则

案例 B:Quartz → MkDocs(价值判断链)

现象:静态站生成失败或体验不理想。

连续追问收敛到:国内构建链路是否默认不可信外网移动端信息架构是否匹配「文档站」,从而 换栈优于长期修补 Quartz 插件与外网依赖。(详细对比见需求 v1.1 与技术实现同名篇。)


4. 经验提炼

4.1 对开发者(可执行)

  • 自建第一步:镜像与依赖 docker pull/pip/GitHub 是否可达;预备 镜像前缀 / scp
  • 每新增 HTTPS 域名DNS → 安全组 → cert 三件一起验收。
  • 上传类应用:默认检查 Nginx client_max_body_size
  • 容器内发起的回源:厘清 127.0.0.1 归属(容器≠宿主机),Webhook、DB 常见问题源。
  • 静态站:根 index.md/index.html 是否与 Nginx index 一致。
  • Python 云上环境:动笔前 python3 --version 再锁 Material。

4.2 对 AICode(提示与协作)

  • 先复述 硬性边界(无 NAS、国区商店、单机 VPS),再给方案,避免先推荐装不上的 App。
  • 任何「定时 + 推送」链路,追问 端到端最坏延迟,主动建议 Webhook 或队列
  • 生成脚本时默认补 在非交互 systemd 环境下的 envHOMEPATHsafe.directory)。
  • 命令类答案尽量 可复制、可存档到仓库,与「只靠会话记忆」对比。

5. 沉淀:SOP 与 Check-list

5.1 标准程序(成功案例归纳)

SOP-01:新 VPS 拉起 Memos + Gitea(镜像加速)→ 配 Nginx 反代与 body 上限 → Certbot。
SOP-02:服务器工作副本 git clone 裸库前执行 git config --global --add safe.directory <裸库路径>
SOP-03:MkDocs 首页采用 index.md;根 README 若参与站点需处理与 index互斥规则
SOP-04:上 Webhook 时 Gitea ALLOWED_HOST_LIST + 容器访问宿主机 host-gateway/IP + curl 试钩子 + journalctl 跟一条完整构建
日常使用(收件箱节奏、Memos/Obsidian 分工):见 产品介绍

5.2 避坑 Check-list(失败教训→进场必勾)

  • [ ] Pull 超时:镜像源预案已写进上线记录了吗?
  • [ ] 静态 403:site 根是否存在 index.html(由 index.md 产出)?
  • [ ] 证书报错:新增子域是否已进 SAN
  • [ ] Memos 贴图:413:查 Nginx body;巨慢:查 套餐上行Mbps(非 Memos「压缩」能解)。
  • [ ] MkDocs:wikilink 不可当发布语法;改用 Markdown 链接
  • [ ] systemd 钩子:HOMENO_MKDOCS_2_WARNING(如需)、safe.directory
  • [ ] Obsidian:Git 插件 作者+Vinzent03+Commit-and-sync,避免同名误装。

5.3 模板与自动化(重复劳动)

重复项 建议
同一套 Cron/Webhook/rebuild-notes.sh 已通过 脚本 + systemd 固定;变更更新 上线记录
大版本选型讨论 飞书/文档复盘模板:背景、方案、否决原因、OWNER、日期
问题闭环 问题总览:全局序号 + 详情五段

6. 后续可读性

  • v2:notes 访问控制 / SSO / 相册与录音——与 Markdown 主线 分仓设计(选型文档已预埋)。