对于喜欢写博客的人来说，一个舒服的写作流程非常重要。

很多技术作者都会选择 Obsidian 作为自己的知识管理和写作工具，因为它拥有：

- 本地 Markdown 存储
- 强大的插件生态
- 灵活的笔记管理方式
- 不受平台限制的创作体验

但是，当文章需要发布到自己的博客时，传统流程依然比较繁琐：

1. 在 Obsidian 编写 Markdown
2. 复制文章内容
3. 登录 CMS 后台
4. 上传图片
5. 设置标题、分类、封面
6. 发布文章

重复操作不仅浪费时间，也容易打断写作状态。

所以，我基于开源项目 [drewlyton/sanity-obsidian-plugin](https://github.com/drewlyton/sanity-obsidian-plugin) 进行了二次开发，并针对个人博客使用场景进行了改造。

**项目地址：** [violet27chen/sanity-obsidian-plugin](https://github.com/violet27chen/sanity-obsidian-plugin)

![插件截图](https://cdn.sanity.io/images/z4mv7hi8/production/ea8ecc112e4ee0217d8ddde3a4967b854848555b-669x260.png)

## Sanity for Obsidian：打造 Obsidian、Sanity、博客三向同步工作流

这个插件的目标很简单：

> 在 Obsidian 中完成创作，一键同步到 Sanity，再自动展示到自己的博客。

整体流程：

```
Obsidian
    ↓
发布同步
    ↓
Sanity CMS
    ↓
博客网站
```

最终形成三个环节互相连接：Obsidian ↔ Sanity ↔ Blog

## 为什么选择 Obsidian + Sanity？

### Obsidian：专注写作

Obsidian 最大的优势就是 Markdown 和本地优先。文章始终保存在自己的设备中，你可以继续使用熟悉的 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 后台修改文章后，可以重新同步回来继续编辑。

### 3. 支持博客字段映射

不同博客结构不同，插件不会固定字段。你可以自由映射标题、slug、封面、分类等字段，适合技术博客、文档网站、知识库、产品站等场景。

### 4. 自动处理图片

写文章时插入的图片，发布时插件会自动上传到 Sanity 并转换为 CDN 地址，不需要进入 CMS 后台重新上传。

## 安装与配置教程

### 准备工作

开始之前，你需要：
- Obsidian
- Sanity 项目
- 一个支持 Sanity 数据读取的博客

如果没有 Sanity 项目，前往 [sanity.io](https://www.sanity.io/) 注册并创建项目。

### 第一步：安装 Obsidian 插件

目前插件还没有上架 Obsidian Community Plugins，需要手动安装。

**方法一：BRAT 安装（推荐）**

1. 打开 Obsidian → 设置 → 第三方插件 → 浏览社区插件，搜索 BRAT 并安装启用
2. 进入设置 → BRAT → Add Beta Plugin，填写 `violet27chen/sanity-obsidian-plugin`
3. 等待安装完成，在设置 → 第三方插件中找到 Sanity 并开启

**方法二：手动安装**

进入你的 Obsidian Vault 的 `.obsidian/plugins` 目录，执行：

```bash
git clone https://github.com/violet27chen/sanity-obsidian-plugin.git
```

目录结构：`.obsidian/plugins/sanity-obsidian-plugin`

重新打开 Obsidian，在设置 → 第三方插件中启用 Sanity。

### 第二步：创建 Sanity API Token

进入 Sanity Dashboard → Project → API → Tokens → Add API Token，权限选择 Editor（不要选 Viewer，因为发布文章需要写入权限），复制生成的 Token。

### 第三步：配置插件

进入 Obsidian → 设置 → Sanity，填写：

- **API Token**：上一步生成的 Token
- **Project ID**：在 Sanity Dashboard → Project Settings 中复制
- **Dataset**：一般填 `production`
- **Type Name**：你的文章类型，如 `post`

### 第四步：配置文章字段

假设博客文章结构为：

```yaml
post:
  title
  slug
  body
  cover
  categories
```

插件设置中对应填写标题、正文、文件名、额外字段即可。

### 第五步：发布第一篇文章

在 Obsidian 创建 Markdown 文件，写好内容后打开命令面板（Ctrl + P），搜索 Sanity，选择「Publish to Sanity」。插件会自动创建文章、上传图片、保存 sanity_id。

### 第六步：博客展示文章

完成同步后，博客读取 Sanity 数据即可展示。以后每次打开 Obsidian → 写文章 → 点击发布 → 博客更新，一气呵成。

## 常见问题

### 发布失败：403 insufficientPermissions

Token 权限不足，重新创建 Token 并选择 Editor 角色。

### 图片没有上传

检查图片路径是否正确、是否使用 Markdown 图片格式、Token 是否有上传权限。

### 找不到插件

确认设置 → 第三方插件中 Sanity 已经开启。

## 为什么做这个项目？

我一直认为：

> 写作工具应该服务作者，而不是让作者适应后台系统。