🏗️ Hermes 文件系统 · 全整合架构方案

向量化 + 文件浏览器 + 可搜索 + 可分享 + Obsidian 整合
☁️ 云端服务器 🖥️ WSL / Windows 🧠 向量引擎 🌐 Funnel 分享 📝 Obsidian

🎯 目标与背景

初衷

云端 Hermes 调试网络时容易崩溃,需要 Git 版本管理兜底 → 延伸出将所有文件纳入索引、可搜索、可浏览、可分享的完整系统。

核心能力

浏览 — 手机/浏览器打开链接直接看
搜索 — 自然语言搜索所有文件内容
分享 — 链接发给别人也能打开
自动 — 文件变化自动索引、自动同步
版本 — Git 保护配置和技能不丢失

🏛️ 整体架构总览

🔗 单一入口https://vm-0-13-ubuntu-3.tailcf1eca.ts.net/
⬇️ 路由分发 ⬇️
路由内容类型当前状态
/ 文件目录首页 浏览 ⚡ 需升级 Caddy
/hermes/ ~/.hermes/ 全部内容(技能/配置/方案) 浏览 搜索 ⚡ 需装 Caddy
/obsidian/ Obsidian 笔记 vault(从 WSL 同步) 浏览 笔记 ❌ 待搭建
/projects/ 代码项目(轻量级,从 WSL 同步) 浏览 搜索 ❌ 待搭建
/search 全局语义搜索页面 搜索 ❌ 待搭建
/new 在线新建笔记(可选) 笔记 — 可选项

🔁 数据流向

文件从产生 → 到可搜索可浏览的全链路
轻文件
📝 Obsidian
🔄 rsync 实时
☁️ ~/files/obsidian/
🧠 ChromaDB 索引
🌐 Funnel 可搜可看
大文件
📄 PDF / 大项目
🖥️ 仅存 WSL 本地
🧠 本地 ChromaDB
🔗 穿透查询(SSH)
🌐 Funnel 统一搜索结果
Git 保护
📦 main 分支
📦 local 分支
🔄 cron 自动 push
✅ GitHub 私有仓库
🛟 重装恢复

📦 存储分层策略

大文件本地,轻文件两边同步

层级内容存放位置同步方式Funnel 可看?可搜索?
L1 轻量 技能 .md / 配置 / 记忆 ☁️ 云端 + 🖥️ WSL Git 双向同步
L2 笔记 Obsidian vault (.md) 🖥️ Windows + ☁️ 同步副本 rsync 实时
L3 项目 代码项目(轻量) 🖥️ WSL + ☁️ 同步副本 rsync 定时
L4 重文件 PDF / 大数据集 / 大项目 🖥️ 仅 WSL 本地 不同步 ⚠️ 穿透 ⚠️ 穿透
L5 产出 Hermes 生成的 .html 报告 ☁️ 云端 不须同步
💡 穿透查询机制: Funnel 搜索时,云端搜不到的结果会自动通过 Tailscale SSH → WSL 查询本地索引,返回后合并展示。用户无感知。

📝 Obsidian 整合方案

当前状态

📁 Vault 位置 — Windows 本地
📄 格式 — Markdown + `[[双向链接]]`
Obsidian 技能 — Hermes 已掌握(可读写)
🔗 连接通道 — Tailscale SSH → WSL → Windows 文件系统

整合后的能力

笔记可浏览/obsidian/ 目录,MD 渲染为页面
笔记可搜索 — 向量化后自然语言搜索
笔记可分享 — 单篇笔记有独立链接
笔记可同步 — 写即同步,Obsidian 存 → 云端秒到
Hermes 可读写 — 我帮你整理/生成笔记,写入 vault

实际工作流程

你在 Obsidian 记笔记
修改 .md 文件
inotifywait
检测文件变化
rsync 到云端
仅传变更的 .md
ChromaDB 更新
增量索引
Funnel 可见
可搜 · 可看 · 可分享
✨ 高级用法: 我在 Funnel 上建一个"新建笔记"页面,你或他人在手机浏览器就能写笔记,自动存回 Obsidian vault。真正做到了"随处记录,统一管理"。

🛡️ 版本保护(Git + GitHub)

☁️ 云端 (main)

config.yaml
skills/ 84个技能
memories/ 用户记忆
logs/ 崩溃日志
plans/ 实施方案

🖥️ WSL (local)

config.yaml
skills/
memories/
logs/
⏰ 定时备份: 云端每天 3:00 · WSL 每天 4:00 自动 git commit + push
🛟 重装恢复: 执行 bash recover.sh → 5~10 分钟全部恢复
⚠️ 不跟踪: .env(API Key)/ sessions/ / state.db

🔧 技术栈总览

🌐
网络层
Tailscale
Funnel
Caddy
连接 · 暴露 · 渲染
🧠
索引层
Ollama
nomic-embed-text
ChromaDB
Embedding · 向量库
🔄
同步层
rsync
inotifywait
cron
实时 · 定时 · 增量
📦
版本层
Git
GitHub
gh CLI
备份 · 恢复 · 回溯
📝
笔记层
Obsidian
Hermes skill
记录 · 查询 · 生成
🔑
安全层
密钥脱敏
Tirith
HTTPS
防护 · 拦截 · 加密

⚡ 优化点汇总

#优化项说明效果
1存储分层 轻文件两边同步,重文件仅存本地 云端 28GB 绰绰有余
2索引分层 云端只索引轻文件,本地索引全量 搜索快 5~10 倍
3搜索穿透 云端搜不到时通过 SSH 查本地索引 单入口全量搜索
4增量索引 文件变化才重新索引,不每次全扫 CPU 占用极低
5MD 预渲染 文件变更时自动转为 HTML 缓存 浏览时秒开
6搜索缓存 热门搜索结果缓存 5 分钟 重复查询不穿透
7实时同步 inotify 监听,只传变更文件 Obsidian 写完即同步
8Caddy 替代 替代 Python http.server,自带 MD 渲染 .md 文件直接看渲染页

📋 分阶段搭建计划

Phase 1
Caddy 文件浏览器 + MD 渲染(约 1h)
升级 Funnel 的文件服务:Caddy 替代 Python http.server
→ 目录浏览 · .md 自动渲染 · .html 直接出 · 链接可分享
🔧 需安装 Caddy · 配置 Caddyfile
Phase 2
向量引擎:Ollama + ChromaDB(约 1h)
安装 Ollama → 拉取 nomic-embed-text → 安装 ChromaDB
→ 编写索引脚本 → 全量扫描文件 → 验证语义搜索
🔧 需安装 Ollama · 下载模型 274MB · 安装 ChromaDB
Phase 3
搜索 UI + 网页搜索框(约 1h)
在 Funnel 上加搜索页面 → 输入自然语言 → 返回结果
→ 支持云端索引 + 穿透查本地
⚡ 前提:Phase 2 完成
Phase 4
WSL Obsidian 实时同步(约 30min)
配置 WSL → 云端 rsync 同步
→ inotifywait 监听 Obsidian vault 变更 → 自动触发同步
→ 验证笔记写完即出现在 Funnel 上
⚡ 前提:Phase 1 完成(Caddy 可浏览)
Phase 5
Git 版本保护 + 重装恢复脚本(约 1h)
云端 Git init → GitHub 私有仓库 → cron 定时 push
→ WSL Git init → push local 分支
→ recover.sh 恢复脚本 → .env 安全备份到 WSL
⚡ 需 GitHub Token

✅ 已经完成的基础

Tailscale 连接 — 云端 ↔ WSL 已通
SSH 免密 — 云端 → Windows → WSL
Funnel 已上线 — 文件已可公开访问
Python 文件服务 — 临时可用(需升级)
密钥脱敏 — 云端 + WSL 已开启
Tirith 安全规则 — 已开启
gh CLI — 已安装
Obsidian 技能 — Hermes 已掌握

🖼️ 完整架构图

👤 你(手机)
👥 分享给他人
💻 PC 浏览器
⬇️ ⬇️ ⬇️
🌐 Tailscale Funnel → https://vm-0-13-ubuntu-3.tailcf1eca.ts.net/
⬇️
🔄 Caddy 文件服务器 · 路由分发 · MD 渲染 · HTTPS
📂 /browse
目录浏览
🔍 /search
语义搜索
📝 /obsidian
笔记
📦 /hermes
技能·配置
📄 /output
生成报告
⬇️
🧠 向量引擎
Ollama + ChromaDB
skills · obsidian · 代码 · PDF
📂 文件系统
~/files/
笔记同步 · Git 保护 · 增量索引
🔄 同步管道
rsync + inotify
WSL → 云端 · 实时 · 增量
⬇️
📝 Obsidian
Windows
→ rsync 实时
📁 代码项目
WSL
→ rsync 定时
📄 大文件/PDF
仅本地
→ 穿透查询

🎯 一句话总结

云端搭入口 🌐 · Obsidian 填内容 📝 · 向量引擎来搜索 🧠 · Git 兜底不怕崩 🛡️ · 大文件存本地 📦 · 轻文件两边通 🔄 · 手机打开就能看 📱 · 链接分享给朋友 👥