对于喜欢写博客的人来说,一个舒服的写作流程非常重要。
很多技术作者都会选择 Obsidian 作为自己的知识管理和写作工具,因为它拥有:
-
本地 Markdown 存储
-
强大的插件生态
-
灵活的笔记管理方式
-
不受平台限制的创作体验
但是,当文章需要发布到自己的博客时,传统流程依然比较繁琐:
-
在 Obsidian 编写 Markdown
-
复制文章内容
-
登录 CMS 后台
-
上传图片
-
设置标题、分类、封面
-
发布文章
重复操作不仅浪费时间,也容易打断写作状态。
所以,我基于开源项目 drewlyton/sanity-obsidian-plugin 进行了二次开发,并针对个人博客使用场景进行了改造。
项目地址:
violet27chen/sanity-obsidian-plugin
Sanity for Obsidian:打造 Obsidian、Sanity、博客三向同步工作流
这个插件的目标很简单:
在 Obsidian 中完成创作,一键同步到 Sanity,再自动展示到自己的博客。
整体流程:
Obsidian ↓发布同步 ↓Sanity CMS ↓博客网站最终形成:
Obsidian ↕ Sanity ↕ Blog三个环节互相连接。
你可以:
-
在 Obsidian 写文章
-
在 Sanity 管理内容
-
在博客网站展示文章
为什么选择 Obsidian + Sanity?
Obsidian:专注写作
Obsidian 最大的优势就是 Markdown 和本地优先。
文章始终保存在自己的设备中:
---title: Astro 入门教程slug: astro-guidecategories: - Astro---
这里是文章正文。你可以继续使用熟悉的 Markdown 语法,不需要适应复杂后台编辑器。
Sanity:负责内容管理
Sanity 是一个现代化 Headless CMS。
它负责:
-
内容存储
-
图片管理
-
字段管理
-
API 提供
-
多端内容分发
博客前端只需要读取 Sanity 数据即可展示。
Blog:负责最终展示
无论你的博客使用:
-
Astro
-
Next.js
-
Nuxt
-
其他前端框架
都可以通过 Sanity 获取文章内容。
这样:
写作、管理、展示三个部分完全分离。
插件主要功能
1. Obsidian 发布到 Sanity
在 Obsidian 写完文章后:
点击:
Publish to Sanity插件会自动:
-
创建 Sanity 文档
-
同步文章内容
-
上传图片资源
-
保存文档 ID
不需要再次复制粘贴。
2. Sanity 同步回 Obsidian
除了发布,也支持拉取内容。
例如:
你在 Sanity 后台修改文章:
Sanity ↓Obsidian可以重新同步回来继续编辑。
3. 支持博客字段映射
不同博客结构不同。
插件不会固定字段。
例如:
Sanity:
titleslugheroImagecategoriespublishedAt可以映射为:
title → titleslug.current → slugheroImage → covercategories → categories适合:
-
技术博客
-
文档网站
-
知识库
-
产品站
4. 自动处理图片
写文章时:
![[cover.png]]或者:
发布时插件会自动处理:
-
上传图片
-
转换为 Sanity Asset
-
使用 CDN 地址
不需要进入 CMS 后台重新上传。
安装与配置教程
准备工作
开始之前,你需要:
-
Obsidian
-
Sanity 项目
-
一个支持 Sanity 数据读取的博客
如果没有 Sanity 项目:
前往:
注册并创建项目。
第一步:安装 Obsidian 插件
目前插件还没有上架 Obsidian Community Plugins,需要手动安装。
方法一:BRAT 安装(推荐)
1. 安装 BRAT
打开 Obsidian:
设置 → 第三方插件 → 浏览社区插件
搜索:
BRAT
安装并启用。
2. 添加插件仓库
进入:
设置 → BRAT → Add Beta Plugin
填写:
violet27chen/sanity-obsidian-plugin
等待安装完成。
3. 启用插件
进入:
设置 → 第三方插件找到:
Sanity
开启即可。
方法二:手动安装
进入你的 Obsidian Vault:
找到:
.obsidian/plugins执行:
git clone https://github.com/violet27chen/sanity-obsidian-plugin.git目录:
.obsidian └── plugins └── sanity-obsidian-plugin重新打开 Obsidian:
设置 → 第三方插件 → 启用 Sanity第二步:创建 Sanity API Token
进入 Sanity:
Project → API → Tokens → Add API Token权限选择:
Editor不要选择:
Viewer因为发布文章需要写入权限。
复制生成的 Token。
第三步:配置插件
进入:
Obsidian → 设置 → Sanity
填写:
API Token
输入:
xxxxxxxxxxxxxxxxProject ID
进入:
Sanity Dashboard → Project Settings复制:
Project ID例如:
abc12345Dataset
一般:
productionType Name
填写你的文章类型。
例如:
post如果 Schema:
{ name:"post"}这里填写:
post第四步:配置文章字段
假设博客文章结构:
post:
titleslugbodycovercategories插件设置:
标题:
title正文:
body文件名:
slug.current额外字段:
cover:cover
categories:categoriesObsidian:
---title: 我的文章slug: my-postcover: image.pngcategories: - 技术---同步到 Sanity:
{"title":"我的文章","slug":{ "current":"my-post"},"categories":[ "技术"]}第五步:发布第一篇文章
创建 Markdown 文件:
我的第一篇博客.md内容:
---title: 我的第一篇博客slug: first-blogcategories: - 教程---
这是文章正文。插入图片:
![[cover.png]]打开命令面板:
Ctrl + P搜索:
Sanity选择:
Publish to Sanity完成后:
插件会自动:
-
创建文章
-
上传图片
-
保存 sanity_id
-
完成同步
第六步:博客展示文章
完成同步后:
博客读取 Sanity 数据。
流程:
Obsidian ↓Sanity ↓Astro Blog以后:
打开 Obsidian
↓
写文章
↓
点击发布
↓
博客更新
常见问题
发布失败:403 insufficientPermissions
原因:
Token 权限不足。
解决:
重新创建 Token:
Role:Editor图片没有上传
检查:
-
图片路径是否正确
-
是否使用 Markdown 图片格式
-
Token 是否有上传权限
找不到插件
确认:
设置 → 第三方插件 → Sanity已经开启。
为什么做这个项目?
我一直认为:
写作工具应该服务作者,而不是让作者适应后台系统。
Obsidian 擅长创作。
Sanity 擅长管理。
博客擅长展示。
把三个工具连接起来,可以打造一个属于自己的现代化内容系统。
后续计划
未来会继续优化:
-
自动同步
-
草稿状态管理
-
多文档类型支持
-
更完善的博客发布流程
如果你正在使用:
-
Obsidian
-
Markdown
-
Sanity
-
Astro / Next.js 博客
欢迎体验这个项目。
项目地址: