从零搭建Obsidian全栈知识系统

从零搭建 Obsidian 全栈知识系统:同步、博客、AI 一体化实战指南

核心理念

笔记不应该被困在一台设备里。 本文记录如何用一台云服务器,打通 Obsidian 的多端同步、自动博客发布、在线阅读、AI Agent 协作,构建一个完整的个人知识管理系统。


一、系统全景架构

1.1 整体架构图

┌─────────────────────────────────────────────────────────────────┐
│                    Albert Intelligence 知识系统                    │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌──────────┐    ┌──────────┐    ┌──────────┐                 │
│   │ Windows  │    │  iPhone  │    │  Chrome  │                 │
│   │ Obsidian │    │ Obsidian │    │ Web Clip │                 │
│   └────┬─────┘    └────┬─────┘    └────┬─────┘                 │
│        │               │               │                        │
│        │ Remotely Save  │ Remotely Save  │ WebDAV                │
│        │   (插件)       │   (插件)       │                       │
│        └───────┬───────┘───────┬───────┘                        │
│                │               │                                │
│          ┌─────▼───────────────▼─────┐                          │
│          │   阿里云服务器 (Ubuntu)     │                          │
│          │   47.250.14.82            │                          │
│          │                           │                          │
│          │  ┌─────────────────────┐  │                          │
│          │  │  Nginx WebDAV :18080│  │    ┌──────────────────┐  │
│          │  │  + fancyindex UI    │──┼───→│  浏览器在线阅读   │  │
│          │  │  + Markdown Viewer  │  │    │  /_viewer/        │  │
│          │  └────────┬────────────┘  │    └──────────────────┘  │
│          │           │               │                          │
│          │  ┌────────▼────────────┐  │                          │
│          │  │  inotify 文件监听    │  │                          │
│          │  │  (2秒防抖)          │  │                          │
│          │  └────────┬────────────┘  │                          │
│          │           │               │                          │
│          │  ┌────────▼────────────┐  │                          │
│          │  │  Python 处理器       │  │                          │
│          │  │  · 过滤 public:true │  │                          │
│          │  │  · 转换 wikilinks   │  │                          │
│          │  │  · 注入 title/date  │  │                          │
│          │  └────────┬────────────┘  │                          │
│          │           │               │                          │
│          │  ┌────────▼────────────┐  │    ┌──────────────────┐  │
│          │  │  Hugo 静态站点生成   │──┼───→│  公开博客 :18081  │  │
│          │  │  Stack 主题         │  │    │  搜索/归档/标签   │  │
│          │  └─────────────────────┘  │    └──────────────────┘  │
│          │                           │                          │
│          │  ┌─────────────────────┐  │                          │
│          │  │  Let's Encrypt SSL  │  │                          │
│          │  │  Certbot + DNS-01   │  │                          │
│          │  │  (Cloudflare API)   │  │                          │
│          │  └─────────────────────┘  │                          │
│          └───────────────────────────┘                          │
│                                                                 │
│   ┌──────────┐    ┌──────────────┐                              │
│   │ Claude   │    │ Obsidian     │                              │
│   │ Code     │◄──►│ Agent Client │  AI 协作层                   │
│   │ (终端)   │    │ (ACP 协议)   │                              │
│   └──────────┘    └──────────────┘                              │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

1.2 技术栈一览

层级组件用途
客户端Obsidian (Win/iOS)笔记编辑器
客户端Chrome + Obsidian Web Clipper网页剪藏
客户端Agent Client 插件AI Agent 交互
同步层Remotely Save 插件WebDAV 双向同步
存储层Nginx WebDAV文件存储和访问
展示层fancyindex + Viewer在线浏览笔记
发布层Hugo + Stack 主题静态博客生成
自动化inotify + systemd文件变更监听和自动构建
安全层Let’s Encrypt + CloudflareHTTPS 加密 + DNS 管理
AI 层Claude Code + OpenCodeAI 辅助写作和开发

1.3 端口规划

端口服务域名访问权限
18080WebDAV + 在线阅读obsidian.hialbert.onlineBasic Auth (私密)
18081Hugo 博客blog.hialbert.online公开访问
2026SSH密钥认证

二、核心数据流

2.1 写作 → 同步 → 发布 流程

你在 Obsidian 写了一篇笔记
        │
        ▼
  在 frontmatter 加入 public: true
        │
        ▼
  Remotely Save 自动同步到阿里云 WebDAV
  (/var/www/webdav/obsidian/)
        │
        ▼
  inotify 检测到文件变化(2秒防抖)
        │
        ▼
  obsidian-to-hugo.sh 启动:
  ├─ 1. 清空 Hugo content/post/ 目录
  ├─ 2. 扫描所有 .md 文件
  ├─ 3. 过滤出 public: true 的文件
  ├─ 4. Python 处理器:
  │    ├─ 规范化 frontmatter
  │    ├─ 自动注入 title(从文件名)
  │    ├─ 自动注入 date(从 created 字段)
  │    ├─ 转换 wikilinks 为标准链接
  │    └─ 移除 !嵌入 语法
  └─ 5. 复制到 Hugo content/post/
        │
        ▼
  Hugo 构建静态站点 → /var/www/hugo-blog/public/
        │
        ▼
  博客自动更新 ✅
  https://blog.hialbert.online:18081/

2.2 下架文章的三种方式

方式操作效果
改为 public: false修改 frontmatter笔记保留,博客消失(推荐)
删除 public 字段删掉那一行笔记保留,博客消失
删除整篇笔记Obsidian 里删除笔记和博客都消失
💡 安全机制

同步脚本每次运行都会先清空再重建 Hugo 的文章目录。没有 public: true 标记的笔记绝对不会出现在博客上。

2.3 在线阅读流程(Markdown Viewer)

浏览器访问 fancyindex 文件目录
        │
        ▼
  点击 .md 文件(链接已被 JS 重写)
        │
        ▼
  跳转到 /_viewer/?file=Diary/领域/xxx.md
        │
        ▼
  viewer.html 加载:
  ├─ fetch GET 读取原始 .md 文件(只读,不修改原文件)
  ├─ 去掉 YAML frontmatter
  ├─ marked.js 渲染 Markdown → HTML
  ├─ highlight.js 代码高亮
  └─ 显示渲染后的页面
        │
        ▼
  工具栏:← 返回目录 | 📥 下载原文 | 🌙 深浅色切换
📌 只读保证

Viewer 只发 HTTP GET 请求,绝不会修改、删除、覆盖原始文件。你的 Obsidian 笔记安全无虞。


三、Obsidian Vault 目录结构

3.1 本地 Vault 结构

Diary/                           ← Vault 根目录
├── .obsidian/                   ← Obsidian 配置(插件、主题、快捷键等)
│   └── plugins/
│       ├── remotely-save/       ← WebDAV 同步插件
│       ├── obsidian-local-rest-api/  ← REST API 插件
│       ├── agent-client/        ← AI Agent 客户端插件
│       └── obsidian42-brat/     ← Beta 插件管理器
├── 收件箱/                      ← 📥 临时笔记、快速捕捉
├── Clippings/                   ← 📰 Chrome Web Clipper 剪藏
├── 领域/                        ← 🎯 深度研究主题
│   ├── Obsidian多端同步搭建全记录.md
│   ├── Obsidian核心用法指南.md
│   ├── 大模型记忆与检索机制研究/
│   └── 新agent/
├── 收藏夹/                      ← ⭐ 精选内容
├── 项目/                        ← 📁 进行中的项目
├── 归档/                        ← 🗄️ 已完成的内容
├── 永久笔记.md                  ← 📝 MOC 索引
└── MOC.md                       ← 🗺️ 全局地图

3.2 服务器端目录结构

/var/www/
├── webdav/obsidian/             ← WebDAV 同步根目录
│   └── Diary/                   ← Vault 内容(与客户端实时同步)
│       ├── 收件箱/
│       ├── Clippings/
│       ├── 领域/
│       └── ...
├── hugo-blog/                   ← Hugo 博客项目
│   ├── hugo.yaml                ← Hugo 配置
│   ├── content/
│   │   ├── post/                ← 自动同步的博客文章(public: true)
│   │   ├── page/
│   │   │   └── search/          ← 搜索页面
│   │   ├── about/               ← 关于页面
│   │   └── archives/            ← 归档页面
│   ├── static/img/              ← 头像等静态资源
│   ├── themes/stack/            ← Stack 主题(Git submodule)
│   ├── layouts/_partials/       ← 主题覆写(sidebar 头像修复)
│   └── public/                  ← Hugo 构建输出(Nginx 直接 serve)
└── obsidian-ui/                 ← WebDAV 美化 UI
    ├── header.html              ← fancyindex 页头(导航栏 + CSS)
    ├── footer.html              ← fancyindex 页脚(.md 链接重写 JS)
    ├── viewer.html              ← Markdown 在线阅读器
    └── avatar.jpg               ← 头像(WebDAV UI 用)

四、功能模块详解

4.1 多端同步(Remotely Save + WebDAV)

原理: 每台设备上的 Obsidian 通过 Remotely Save 插件连接到同一个 WebDAV 服务器,实现双向增量同步。

配置要点:

# Remotely Save 插件设置
服务类型: WebDAV
地址: https://obsidian.hialbert.online:18080/obsidian/
用户名: obsidian
密码: ******
Depth Header: infinity

安全措施:

  • HTTPS 全链路加密(Let’s Encrypt 证书)
  • Basic Auth 身份验证
  • 非标准端口 18080(避开常见扫描)
  • DNS-01 验证方式(无需开放 80 端口)
💡 冲突解决

Remotely Save 根据文件的修改时间戳判断版本新旧。如果两端同时修改同一文件,会保留最新的版本。建议一次只在一台设备编辑。

4.2 WebDAV 文件管理界面(fancyindex)

访问 https://obsidian.hialbert.online:18080/obsidian/ 即可看到 GitHub 风格的深色目录列表,特性包括:

  • 📁 文件夹图标和 📝 Markdown 文件图标自动识别
  • 🖼️ 图片、🎬 视频、🎵 音频文件类型图标
  • 圆形头像 + “Personal Knowledge Base by Albert” 品牌展示
  • 按名称、日期、大小排序
  • 响应式布局,手机端也能用

4.3 Markdown 在线阅读器(Viewer)

点击任意 .md 文件即可在浏览器中渲染阅读,无需下载。

技术实现:

  • marked.js — Markdown → HTML 实时渲染
  • highlight.js — 代码块语法高亮(支持 Python、JavaScript、Bash 等)
  • 纯前端 — 零后端依赖,不占服务器资源
  • 只读 — 只发 GET 请求,绝不修改原文件

功能:

  • 面包屑导航(obsidian / Diary / 领域 / xxx.md
  • ← 返回目录 按钮
  • 📥 下载原文 按钮
  • 🌙/☀️ 深浅色切换(localStorage 记忆)
  • 自动剥离 YAML frontmatter
  • 图片相对路径自动转换
  • wikilinks!embeds 显示为行内代码

4.4 Hugo 静态博客(Stack 主题)

访问 https://blog.hialbert.online:18081/ 即可看到自动发布的博客。

博客特性:

  • 🔍 全文搜索 — 侧栏搜索框,Fuse.js 模糊匹配
  • 📂 分类和标签 — 自动从 frontmatter 提取
  • 📅 归档 — 按时间线展示所有文章
  • 🌗 深浅色切换 — 跟随系统或手动切换
  • 📱 响应式 — 手机端完美适配
  • 📖 目录导航 — 文章内自动生成 TOC
  • ⏱️ 阅读时长 — 自动计算
  • 🔗 RSS 订阅 — 支持全文 RSS

发布控制:

只需在 Obsidian 笔记的 frontmatter 中加一行:

---
public: "true"    # 加这一行,文章自动发布到博客
---

不加或改为 false,文章只存在于你的私人 Vault 中。

4.5 自动构建管道(inotify + systemd)

┌──────────────┐     ┌───────────────┐     ┌──────────────┐
│   inotify    │────→│  防抖 2秒     │────→│ obsidian-to- │
│   监听文件   │     │  合并多次     │     │ hugo.sh      │
│   变更事件   │     │  触发         │     │ 过滤+转换    │
└──────────────┘     └───────────────┘     └──────┬───────┘
                                                   │
                                            ┌──────▼───────┐
                                            │  Hugo 构建   │
                                            │  静态 HTML   │
                                            └──────────────┘

systemd 保障:

  • Restart=always — 进程崩溃自动重启
  • RestartSec=5 — 5 秒后重启
  • 开机自动启动
  • 日志记录到 /var/log/obsidian-hugo.log

查看实时日志:

tail -f /var/log/obsidian-hugo.log

4.6 SSL 证书管理(Certbot + Cloudflare DNS-01)

为什么用 DNS-01 而不是 HTTP-01?

  • HTTP-01 需要开放 80 端口(安全风险)
  • DNS-01 通过 Cloudflare API 验证域名所有权,无需开放任何额外端口

证书信息:

域名用途证书路径
obsidian.hialbert.onlineWebDAV/etc/letsencrypt/live/obsidian.hialbert.online/
blog.hialbert.online博客/etc/letsencrypt/live/blog.hialbert.online/

自动续期: Certbot 自带 systemd timer,每 12 小时检查一次是否需要续期。


五、Chrome Web Clipper — 一键剪藏到 Obsidian

5.1 是什么?

Obsidian Web Clipper 是 Chrome 浏览器扩展,可以一键将网页内容保存为 Markdown 格式,直接存入 Obsidian Vault。

5.2 工作流程

在 Chrome 中浏览文章
        │
        ▼
  点击 Web Clipper 扩展图标
        │
        ▼
  选择保存模板(剪藏/书签/高亮)
        │
        ▼
  自动转换为 Markdown 格式
        │
        ▼
  保存到 Vault 的 Clippings/ 目录
        │
        ▼
  Remotely Save 同步到云端
        │
        ▼
  所有设备都能看到这篇剪藏 ✅

5.3 Frontmatter 自动生成

Web Clipper 剪藏的笔记会自动生成结构化的 frontmatter:

---
title: "文章标题"
source: https://原文链接
author: 作者名
published: 2026-04-01
created: 2026-04-06T13:26:35+08:00
tags:
  - 状态/收件箱
  - 来源/文章
  - 主题/
---
💡 配合 Inbox 工作流

剪藏的文章默认打上 状态/收件箱 标签,提醒你稍后阅读和整理。处理完后改为 状态/完成 并移动到对应的领域文件夹。


六、AI 协作层 — Agent Client + Claude Code

6.1 Agent Client 插件

Agent Client 插件通过 Agent Client Protocol (ACP) 将 AI Agent(如 Claude Code、Codex、Gemini CLI)引入 Obsidian,实现直接在编辑器中与 AI 对话。

核心功能:

  • @笔记引用 — 在对话中用 @笔记名 引用 Vault 中的笔记内容
  • 图片粘贴 — 直接拖拽图片到对话框
  • 斜杠命令 — 使用 / 调用 Agent 提供的命令
  • 多 Agent 切换 — 同时运行 Claude Code、Codex 等
  • 会话历史 — 恢复或分叉之前的对话
  • 导出为笔记 — 将对话保存为 Markdown

安装方式:

  1. 先安装 BRAT 插件(Beta 插件管理器)
  2. BRAT → Add Beta Plugin → 粘贴 https://github.com/RAIT-09/obsidian-agent-client
  3. 启用 Agent Client

6.2 Local REST API 插件

让外部程序(如 Claude Code、脚本)通过 HTTP API 操控 Obsidian。

API 端点:

端点方法用途
/vault/GET列出 Vault 根目录文件
/vault/{path}GET读取指定文件内容
/vault/{path}PUT创建或更新文件
/vault/{path}DELETE删除文件
/vault/{path}PATCH追加内容到文件

示例 — 用 curl 读取笔记:

curl http://127.0.0.1:27123/vault/领域/Obsidian核心用法指南.md \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: text/markdown"

示例 — 用 curl 创建笔记:

curl -X PUT http://127.0.0.1:27123/vault/收件箱/新笔记.md \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: text/markdown" \
  -d "# 新笔记标题

这是正文内容。"

6.3 Claude Code + Obsidian 联动

Claude Code(终端 AI 助手)可以通过 Local REST API 直接与 Obsidian 交互:

用户在终端对 Claude Code 说:
  "在 Obsidian 里面创建一篇关于 XXX 的笔记"
        │
        ▼
  Claude Code 调用 REST API:
  PUT /vault/领域/XXX.md
  Content-Type: text/markdown
  Body: 生成的 Markdown 内容
        │
        ▼
  笔记立即出现在 Obsidian 中 ✅
        │
        ▼
  Remotely Save 同步到所有设备
        │
        ▼
  如果 frontmatter 包含 public: true
  → 自动发布到博客 🚀
📝 实际使用体验

本文就是通过 Claude Code 调用 Obsidian REST API 直接创建的——写作、保存、同步、发布,全链路自动化。


七、安全架构

7.1 多层安全防护

Internet
    │
    ▼
┌───────────────────┐
│ Cloudflare DNS    │  DNS 层:隐藏真实 IP(Proxy 模式可选)
└────────┬──────────┘
         │
┌────────▼──────────┐
│ 阿里云防火墙      │  网络层:只开放 18080、18081、2026
└────────┬──────────┘
         │
┌────────▼──────────┐
│ Let's Encrypt SSL │  传输层:TLS 1.2/1.3 加密
│ (DNS-01 验证)      │  无需开放 80 端口
└────────┬──────────┘
         │
┌────────▼──────────┐
│ Nginx Basic Auth  │  应用层:用户名密码认证
│ (.htpasswd)        │  WebDAV 和 Viewer 都受保护
└────────┬──────────┘
         │
┌────────▼──────────┐
│ SSH Key Only      │  管理层:仅密钥登录,禁用密码
│ (Port 2026)       │  非标准端口
└───────────────────┘

7.2 公私分离设计

内容访问方式认证
全部 Vault 笔记WebDAV (:18080)Basic Auth 必须
在线阅读 Viewer/_viewer/ (:18080)Basic Auth 必须
博客文章 (public: true)Hugo (:18081)无需认证,公开
博客搜索/search/ (:18081)无需认证,公开

核心原则:私密笔记永远不会意外暴露。 只有你明确标记 public: true 的文章才会通过 Hugo 发布到公开博客。


八、核心配置文件速览

8.1 Nginx 配置(双域名双端口)

# WebDAV + 在线阅读
server {
    listen 18080 ssl;
    server_name obsidian.hialbert.online;

    location /_viewer/ {
        # Markdown 在线阅读器(Basic Auth 保护)
    }

    location /obsidian/ {
        # WebDAV 文件同步
        dav_methods PUT DELETE MKCOL COPY MOVE;
        dav_ext_methods PROPFIND OPTIONS;
        fancyindex on;
    }
}

# Hugo 博客
server {
    listen 18081 ssl;
    server_name blog.hialbert.online;
    root /var/www/hugo-blog/public;
}

8.2 Hugo 配置(核心参数)

baseURL: "https://blog.hialbert.online:18081/"
title: "Albert Intelligence"
theme: "stack"
defaultContentLanguage: "zh"

params:
  sidebar:
    subtitle: "Knowledge, AI & Life"
    avatar: "/img/avatar.jpg"
  widgets:
    homepage:
      - type: search       # 全文搜索
      - type: archives      # 归档
      - type: categories    # 分类
      - type: tag-cloud     # 标签云

8.3 发布控制(frontmatter 标记)

---
tags:
  - 类型/永久笔记
  - 主题/Obsidian
created: 2026-04-06
public: "true"        # ← 这一行控制是否发布
---

九、已安装的 Obsidian 插件清单

插件用途必要性
Remotely SaveWebDAV 多端同步必须
Local REST API外部程序控制 Obsidian推荐(AI 协作必需)
Agent Client在 Obsidian 内使用 AI Agent可选(提升效率)
BRAT安装 Beta 插件可选(Agent Client 依赖)
Obsidian Web ClipperChrome 网页剪藏推荐

十、常见问题 FAQ

Q1: 同步冲突怎么办?

Remotely Save 以最后修改时间为准。建议同一时间只在一台设备上编辑。如果发生冲突,可以在 Remotely Save 设置中查看同步日志。

Q2: 博客文章标题/日期显示异常?

确保 frontmatter 中包含 titledate(或 created)字段。同步脚本会自动从文件名和 created 字段注入,但手动指定更可靠:

---
title: "你的文章标题"
date: 2026-04-06
---

Q3: SSL 证书过期了怎么办?

Certbot 会自动续期。如果手动续期:

certbot renew --dns-cloudflare \
  --dns-cloudflare-credentials /etc/letsencrypt/cloudflare/credentials.ini

Q4: 在线阅读器会修改我的笔记吗?

绝对不会。 Viewer 只发 HTTP GET 请求读取文件,渲染过程完全在浏览器端完成。服务器上的 .md 文件纹丝不动,不会影响任何设备的 Obsidian 同步。

Q5: 服务器配置要求?

最低 1 核 1G 就够用。当前使用阿里云 2 核 2G(马来西亚),内存占用约 445MB(28%),磁盘 3.4G/40G(10%),非常轻量。

Q6: 这套系统的运行成本?

项目费用
域名 (.online)¥7/年(首年)
阿里云服务器视套餐而定
SSL 证书免费(Let’s Encrypt)
Cloudflare DNS免费
Hugo + Stack 主题免费开源
Obsidian 客户端免费
所有插件免费

十一、未来可扩展方向

  • Excalidraw 支持 — 在线渲染手绘图
  • 评论系统 — 博客接入 Giscus (GitHub Discussions)
  • 图床 — 将笔记中的图片上传到 CDN
  • 全文搜索增强 — 在 WebDAV 端也加搜索功能
  • 移动端 PWA — 博客添加 manifest.json 支持离线访问
  • 自动备份 — 定期将 Vault 备份到 S3 或 OSS
  • Graph View 在线版 — 用 D3.js 渲染 Vault 的关系图谱

十二、总结

这套系统的核心理念是 “写一次,到处用”

  1. — 在任意设备的 Obsidian 中写笔记
  2. 同步 — Remotely Save 自动同步到云端
  3. 阅读 — 浏览器在线阅读,无需安装 Obsidian
  4. 发布 — 加一行 public: true 自动变成博客
  5. 剪藏 — Chrome 一键保存网页到 Vault
  6. AI — Claude Code 直接读写你的笔记

所有环节都是自动化的。 你只需要专注于一件事——写好你的笔记。


Quote

“The best note-taking system is the one you actually use.” 最好的笔记系统,是你真正会用的那个。


本文由 Claude Code 通过 Obsidian Local REST API 自动创建,写作 → 保存 → 同步 → 发布,全链路自动化。

Powered by Obsidian + Hugo
使用 Hugo 构建
主题 StackJimmy 设计