Skip to content
Go back

从 Obsidian 到博客:我的内容自动发布工作流

Posted on:April 18, 2026 at 12:00 AM

一、写作的痛点:写得很爽,发得很烦

作为一个重度 Obsidian 用户,我几乎所有的思考和写作都在这个本地知识库里完成。Obsidian 的双向链接、图谱视图、丰富的插件生态,让写作体验非常流畅。

但问题来了:写好的内容怎么发布出去?

常见的做法有这些:

方式优点缺点
手动复制简单直接每次都要改格式、传图片,太麻烦
Obsidian Publish原生支持付费($8/月),自定义域名另收费
第三方同步工具一键同步需要学习成本,格式兼容性不一定好
自己搭建完全可控技术门槛高,维护成本大

我希望的方案是:在 Obsidian 里写,自动同步到线上,最好还不要钱。

二、我的方案选择:Notion 作为中转站

核心思路

既然 Obsidian 是纯本地的,那需要找一个”云端桥梁”来连接本地和线上。我的选择是:Notion 数据库作为内容中转站

为什么选 Notion?

  1. 免费且稳定:个人免费版完全够用
  2. API 友好:有完善的 REST API,可以自动化操作
  3. 表格化管理:数据库视图方便管理文章状态
  4. 生态成熟:很多工具都能从 Notion 读取数据

整体架构

Obsidian(本地写作)

Node.js 脚本(发布到 Notion)

Notion 数据库(内容管理)

GitHub Action(定时同步)

Astro 静态博客 + GitHub Pages(线上展示)

工作流:

  1. 在 Obsidian 写完文章,运行发布脚本
  2. 文章进入 Notion 数据库,可以管理状态(草稿/已发布)
  3. GitHub Action 每 6 小时自动拉取 Notion 内容到博客仓库
  4. 有新内容时自动部署到 GitHub Pages

三、技术栈选型详解

3.1 静态博客:Astro

市面上静态博客生成器很多,为什么我选 Astro

框架特点适合场景
Hexo中文社区活跃,主题多中文博客首选
Hugo编译速度极快内容量大的站点
Next.jsReact 生态,动态能力强需要交互的博客
Astro零 JS 默认,性能优秀内容为主的博客

我选 Astro 是因为:

我用的是 AstroPaper 主题,轻量且美观。

3.2 部署平台:GitHub Pages

虽然 Vercel/Netlify 也很好用,但 GitHub Pages 更简单直接,且完全满足个人博客需求。

3.3 同步机制:GitHub Action

GitHub 原生的 CI/CD 工具,可以:

四、核心实现步骤

4.1 Notion 数据库设计

数据库字段如下:

字段名类型说明
TitleTitle文章标题
DescriptionRich Text文章描述/摘要
AuthorRich Text作者
PublishDateDate发布日期
TagsMulti-select文章标签
StatusSelectDraft / Published
SlugRich TextURL 自定义部分

关键点:

4.2 GitHub Action 同步脚本

定时同步的配置文件 .github/workflows/sync-content.yml

name: Sync Content from Notion

on:
  schedule:
    - cron: "0 */6 * * *" # 每6小时运行一次
  workflow_dispatch: # 支持手动触发

jobs:
  sync:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout 代码
        uses: actions/checkout@v4

      - name: 安装 Node.js
        uses: actions/setup-node@v4
        with:
          node-version: "20"

      - name: 安装依赖
        run: npm ci

      - name: 从 Notion 同步内容
        env:
          NOTION_TOKEN: ${{ secrets.NOTION_TOKEN }}
          NOTION_DATABASE_ID: ${{ secrets.NOTION_DATABASE_ID }}
        run: node scripts/sync-from-notion.js

      - name: 提交变更
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"
          git add src/content/blog/
          git diff --quiet && git diff --staged --quiet || git commit -m "同步 Notion 内容"
          git push

核心逻辑:

  1. 定时拉取 Notion 数据库中的所有文章
  2. 将每篇文章转换为 Markdown 文件
  3. 下载文章中的图片到本地
  4. 提交到仓库的 src/content/blog/ 目录

4.3 Obsidian 发布脚本

我写了一个 Node.js 脚本,一键将 Obsidian 文章发布到 Notion:

主要功能:

使用方法:

# 发布文章
node publish.js "8-创作/文章/我的文章.md"

# 作为草稿发布
node publish.js "8-创作/文章/我的文章.md" --draft

Frontmatter 示例:

---
title: 我的文章标题
date: 2026-04-18
tags:
  - 标签1
  - 标签2
description: 文章描述(可选,会自动提取)
---

脚本会自动填充作者字段(统一为”桃翁”),不需要手动写。

4.4 用 Claude Code 封装成 Skill

每次敲命令还是不够方便。因为我常用 Claude Code,就把发布流程封装成了 Skill。这样只需要说”帮我把这篇文章发布到 Notion”,Claude 就会自动调用脚本完成发布。

Skill 的好处:

实际使用流程:

  1. 在 Obsidian 写完文章
  2. 打开 Claude Code,说”帮我把这篇文章发布到 Notion”
  3. 确认文件路径
  4. 完成

五、实际使用体验

日常写作流程

  1. 在 Obsidian 写作

    • 新建文件,填写 frontmatter

    • 用 Markdown 写作,插入图片

    • 完成初稿

  2. 发布到 Notion

    
    
    node publish.js "8-创作/文章/刚写完的文章.md"
    
    
    • 文章进入 Notion 数据库

    • 可以在 Notion 里调整状态(Draft → Published)

  3. 等待自动同步

    • GitHub Action 每 6 小时检查一次

    • 或者手动触发同步

  4. 上线

    • 同步完成后自动部署到 GitHub Pages

    • 文章可以在博客上看到

效果展示

从写完到上线的完整路径:

Obsidian → 运行脚本 → Notion(状态 Published)→ GitHub Action → 博客上线

整个过程:1 分钟写脚本发布 + 最多 6 小时等待同步

如果不介意手动触发 GitHub Action,可以立即同步。

六、总结与扩展

这套方案的优势

  1. 写作体验好:Obsidian 的本地写作体验无可挑剔
  2. 管理方便:Notion 作为 CMS,可以随时调整文章状态
  3. 完全免费:Notion 免费版 + GitHub Pages = 零成本
  4. 自动化:发布一次,自动同步上线
  5. 版本控制:所有内容在 Git 仓库有备份

可以改进的地方

  1. 实时同步:目前是定时拉取,可以改为 Webhook 触发
  2. 图片优化:可以自动压缩图片、生成 WebP 格式
  3. 草稿预览:Draft 状态的文章可以生成预览链接
  4. 双向同步:Notion 修改后同步回 Obsidian(目前只支持单向)

适合哪些人使用


如果你也想搭建类似的工作流,可以参考我的实现思路和代码。核心逻辑不复杂,关键是把各个环节串联起来,形成一个顺畅的闭环。

有任何问题欢迎交流。