侧边栏壁纸
博主头像
龍騰博客 博主等级

行动起来,活在当下

  • 累计撰写 172 篇文章
  • 累计创建 31 个标签
  • 累计收到 7 条评论

目 录CONTENT

文章目录

Obsidian + WorkBuddy + Hermes + SER8 保姆级搭建教程(完整修订版)

管理员
2026-08-12 / 0 评论 / 0 点赞 / 3 阅读 / 0 字

说明:这份教程已经把实际部署中踩过的坑(网络模式、权限、路径映射)全部修正进去,照着做可以少走弯路。

适用场景:MacBook Pro(装 Obsidian + WorkBuddy)+ SER8 fnOS(Docker 跑 Syncthing + Ollama/llama.cpp + Hermes) 目标:公文/心得走本地模型全程不出局域网,学习资料靠 Hermes 从 Lark 自动采集 + 云端模型整理。


架构总览

┌─────────────────────────┐   Syncthing 实时同步(局域网直连)      ┌──────────────────────────┐
│   MacBook Pro           │ ◄─────────────────────────────────► │   SER8 (fnOS + Docker)   │
│  - Obsidian(原生 App)  │                                      │  - Syncthing(存 Vault)  │
│  - WorkBuddy            │ ◄──── 局域网调用本地模型 ──────────►   │  - Ollama / llama.cpp    │
└─────────────────────────┘                                      │  - Hermes(Lark 自动采集)│
                                                                 └──────────────────────────┘
                                                                              ▲
                                                                              │ 拉群、发链接
                                                                     ┌────────┴─────── ─┐
                                                                     │   Lark App       │
                                                                     └──────────────────┘

第一步:SER8 上部署 Syncthing

1.1 创建 docker-compose.yml

路径建议 /vol3/1000/docker/syncthing/docker-compose.yml

services:
  syncthing:
    image: syncthing/syncthing:latest
    container_name: syncthing
    hostname: ser8-syncthing
    network_mode: host        # 必须用主机网络模式,否则会广播出 Docker 内部虚拟 IP,导致 Mac 端连不上只能走中继
    environment:
      - PUID=1000
      - PGID=1000
    volumes:
      - /vol3/1000/docker/syncthing/config:/var/syncthing/config
      - /vol3/1000/docker/obsidian-vault:/var/syncthing/vault
    restart: unless-stopped

注意:network_mode: host 模式下不需要写 ports: 字段,容器直接共享宿主机端口,写了反而多余。

1.2 启动

cd /vol3/1000/docker/syncthing
docker compose up -d

1.3 打开管理界面并立刻设置密码

浏览器访问 http://SER8的IP:8384第一次打开会提示"允许无密码远程访问"的危险警告,必须马上处理

  1. 右上角齿轮 → 「GUI」选项卡

  2. 填写「GUI 身份验证用户」和「GUI 身份验证密码」

  3. 顺便勾选「使用 HTTPS」,保存

不设置这个密码,任何能访问到这个端口的人都能远程改你的同步配置甚至删改文件。

1.4 添加 Vault 文件夹

点「添加文件夹」,路径填 /var/syncthing/vault,文件夹 ID 起个名字如 obsidian-vault,先不共享,等 Mac 端装好再连。


第二步:MacBook 上装 Syncthing 客户端

brew install syncthing
brew services start syncthing

浏览器打开 http://localhost:8384

  1. 点「添加远程设备」,填入 SER8 那边界面右上角显示的「设备 ID」

  2. 回到 SER8 端界面,会弹出"发现新设备",点接受

  3. 回到 SER8 端,编辑 obsidian-vault 文件夹 → 「共享」→ 勾选 Mac 设备

  4. Mac 端会弹出"接受共享文件夹"提示,选一个本地路径,比如 ~/Documents/ObsidianVault

关于是否要同局域网:不是必须,但建议首次配对在同一 Wi-Fi 下完成,这样会自动走局域网直连,速度快且不经过任何第三方中继服务器;配对成功后,就算以后出门在外,也能通过中继服务器同步(内容端到端加密,但涉密材料建议尽量避免依赖中继,有需要可以后续加 Tailscale/WireGuard 做私有隧道)。

等两边状态都显示「最新」(绿色对勾),说明同步打通了,之后就是自动、持续、双向同步,不需要手动点同步。


第三步:MacBook 上安装 Obsidian

官网下载:https://obsidian.md/download,装好后选「打开文件夹作为 Vault」,选中 ~/Documents/ObsidianVault


第四步:设计 Vault 文件夹结构

ObsidianVault/
├── 涉密工作区/
│   ├── 公文报告/
│   ├── 学习心得/
│   ├── 发言材料/
│   └── 风格样本/
└── 学习资料区/
    ├── 智能家居/
    ├── AI与大模型/
    ├── 路由器与网络/
    └── raw/              ← Hermes 自动采集的原始笔记落地在这里

原则:涉密工作区只允许本地模型接触,学习资料区可以用云端模型,靠文件夹物理隔离,不依赖"记得切换"。


第五步:给 Vault 做 Git 版本管理

5.1 下载三个自动化脚本

把之前给你的三个脚本放进 Vault 根目录:

  • 01_初始化Git.command(只运行一次)

  • 02_存档.command(每次让 AI 批量整理前运行)

  • 03_恢复存档.command(整理出问题时用来读档)

5.2 解除 macOS 的安全限制(下载后必做,否则打不开)

打开「终端」,执行:

xattr -d com.apple.quarantine ~/Documents/ObsidianVault/01_初始化Git.command
xattr -d com.apple.quarantine ~/Documents/ObsidianVault/02_存档.command
xattr -d com.apple.quarantine ~/Documents/ObsidianVault/03_恢复存档.command

chmod +x ~/Documents/ObsidianVault/01_初始化Git.command
chmod +x ~/Documents/ObsidianVault/02_存档.command
chmod +x ~/Documents/ObsidianVault/03_恢复存档.command

5.3 运行初始化

双击 01_初始化Git.command,看到"✅ 完成"说明 Vault 已经装好时光机。

以后使用节奏:批量整理前双击 02_存档.command 存档;整理出问题时双击 03_恢复存档.command,按提示选编号读档。


第六步:确认 SER8 本地模型可被局域网访问

Mac 上执行:

curl http://192.168.0.188:11434/api/tags

返回一堆模型信息说明没问题(IP 换成你实际的 SER8 地址)。


第七步:配置 WorkBuddy 双工作区

7.1 涉密工作区 → 只接本地模型

  1. WorkBuddy 设置 → 模型 → 添加自定义模型 → OpenAI 兼容接口 → 地址填 http://192.168.0.188:11434/v1

  2. 新建工作区,工作目录指向 ~/Documents/ObsidianVault/涉密工作区

  3. 模型手动锁定为这个本地模型,不接任何云端 API Key

7.2 学习资料区 → 用云端模型

新建另一个工作区,指向 ~/Documents/ObsidianVault/学习资料区,模型用 WorkBuddy 内置的云端选项。

7.3 设定整理规则

在涉密工作区里告诉 WorkBuddy:

心得放 学习心得/,发言放 发言材料/,报告放 公文报告/,相关内容用双链关联,写新报告参考 风格样本/ 的文风。

学习资料区同理,按子分类归档打标签。


第八步:小批量试跑

  1. 双击 02_存档.command 存档

  2. 拖 5-10 篇文章进对应工作区的"待处理"文件夹

  3. 让 WorkBuddy 按规则整理

  4. 打开 Obsidian 检查结果

  5. 满意后再处理剩余全部文章,处理前再存一次档


第九步:Lark + Hermes 自动化采集学习资料

9.1 在 Lark 里建群并拉机器人

  1. Lark 里点"+"新建群,随便起名比如 "学习资料收集"

  2. 群设置 → Bots → Add Bot → 搜索你之前在开放平台创建的应用名 → 添加

  3. 如果搜不到,去 https://open.feishu.cn/ 确认应用在「版本管理与发布」里已发布

  4. 群里 @ 机器人发"你好"测试,能回复说明通了

9.2 修正 Hermes 容器的目录挂载(关键,避免文件存进容器丢失)

编辑 Hermes 的 docker-compose.yml,在原有挂载基础上新增一条,让容器内外路径完全一致:

services:
  hermes:
    ...
    volumes:
      - /vol3/1000/docker/hermes/data:/opt/data                              # 原有的,保留
      - /vol3/1000/docker/obsidian-vault:/vol3/1000/docker/obsidian-vault    # 新增

9.3 修正写入权限(UID 不匹配问题)

chmod -R 777 /vol3/1000/docker/obsidian-vault/学习资料区/

9.4 放开 Hermes 的写入沙盒限制

同一个 docker-compose.ymlenvironment 部分:

environment:
  - HERMES_WRITE_SAFE_ROOT=/opt/data:/vol3/1000/docker/obsidian-vault/学习资料区

只放开到"学习资料区"这一层,不要放开整个 obsidian-vault,避免 Hermes 误碰涉密工作区。

9.5 重启生效

cd /vol3/1000/docker/hermes
docker compose down
docker compose up -d

9.6 验证权限和路径

docker exec -it hermes touch /vol3/1000/docker/obsidian-vault/学习资料区/AI/test.txt
rm /vol3/1000/docker/obsidian-vault/学习资料区/AI/test.txt

没报错说明打通了。

9.7 给 Hermes 下达固定规则

请创建一个任务:监控"学习资料收集"群里的消息,如果消息包含链接,抓取内容整理成 Markdown 笔记(标题、来源链接、日期、内容摘要),固定保存到 /vol3/1000/docker/obsidian-vault/学习资料区/raw/。不管遇到什么权限问题,都只能存这个目录,遇到写入失败直接报错给我,不要自己切换到其他目录。这个任务常驻后台运行。

9.8 测试

Lark 群里发一条带链接的消息,几分钟后检查:

ls -la /vol3/1000/docker/obsidian-vault/学习资料区/raw/

确认文件生成后,再去 Mac 上打开 Obsidian 确认同步过来了。


完整检查清单

  • [ ] SER8 Syncthing 用 network_mode: host 部署,GUI 已设置密码

  • [ ] Mac Syncthing 已连接 SER8,文件夹同步状态显示"最新"

  • [ ] Mac 原生 Obsidian 打开的是同步文件夹

  • [ ] Vault 建好「涉密工作区」「学习资料区」目录结构

  • [ ] 三个 .command 脚本已解除隔离标记、赋予可执行权限,01 已运行

  • [ ] 确认 Mac 能访问 SER8 的 Ollama/llama.cpp 接口

  • [ ] WorkBuddy 两个工作区模型配置正确,没有接反

  • [ ] 小批量试跑通过

  • [ ] Lark 群已建好,机器人已拉入且能正常对话

  • [ ] Hermes 容器已挂载 Vault 真实路径,权限和 HERMES_WRITE_SAFE_ROOT 已修正

  • [ ] Lark 发链接测试,文件能正确落地到 raw/ 并同步到 Mac


踩坑记录(遇到类似问题直接对照)

现象

原因

解法

Syncthing 一直走 relay,地址显示 172.x.x.x

容器用了默认桥接网络,广播的是 Docker 内部虚拟 IP

改成 network_mode: host

Syncthing 提示"无密码远程访问"危险警告

默认没启用 GUI 认证

设置 GUI 用户名密码

双击 .command 提示"无法验证开发者"

macOS Gatekeeper 隔离标记

xattr -d com.apple.quarantine 文件路径

双击 .command 提示"没有正确的访问权限"

下载过程丢失了可执行权限

chmod +x 文件路径

Hermes 生成的文件在 Obsidian 里找不到

容器内路径和 Vault 真实路径不是同一个挂载

修正 docker-compose.ymlvolumes,让容器内外路径完全一致

Hermes 写入 raw/ 报错,改存别的目录

目录属主 uid 1000,容器内进程 uid 10000,权限不匹配

chmod -R 777 对应目录

Hermes 写入被拒绝,报 outside HERMES_WRITE_SAFE_ROOT

Hermes 自带写入沙盒限制,只允许写 /opt/data

修改 HERMES_WRITE_SAFE_ROOT 环境变量加入 Vault 路径

0
AI

评论区