Skip to content

从 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.js | React 生态,动态能力强 | 需要交互的博客 | | Astro | 零 JS 默认,性能优秀 | 内容为主的博客 |

我选 Astro 是因为:

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

3.2 部署平台:GitHub Pages

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

3.3 同步机制:GitHub Action

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

四、核心实现步骤

4.1 Notion 数据库设计

数据库字段如下:

| 字段名 | 类型 | 说明 | | ----------- | ------------ | ----------------- | | Title | Title | 文章标题 | | Description | Rich Text | 文章描述/摘要 | | Author | Rich Text | 作者 | | PublishDate | Date | 发布日期 | | Tags | Multi-select | 文章标签 | | Status | Select | Draft / Published | | Slug | Rich Text | URL 自定义部分 |

关键点:

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: 文章描述(可选,会自动提取)
---

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

五、实际使用体验

日常写作流程

  1. 在 Obsidian 写作

    • 新建文件,填写 frontmatter - 用 Markdown 写作,插入图片 - 完成初稿
  2. 发布到 Notion

    bash 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(目前只支持单向)

适合哪些人使用