Obsidian 到 GitHub 再到 Cloudflare:把技術筆記變成自動發布流程
分類:Automation · DevOps
如果平常已經使用 Obsidian 寫筆記,最理想的狀態是不需要另外打開 CMS。
可以把流程設計成:
Obsidian
↓
Vault Git repo
↓
GitHub Actions
↓
獨立 Blog repo
↓
Cloudflare
為什麼 Blog 要獨立 repo
主 Vault 可能同時包含工作筆記、專案資料、草稿與 Blog,但 Cloudflare 不應直接拿整個 Vault build。
所以保留兩個 repo:
Vault repo
= 所有 Obsidian 筆記
Blog repo
= Astro 網站
GitHub Actions 負責中間分流。
Vault 結構
blog/
├── drafts/
└── published/
├── 2024/
├── 2025/
└── 2026/
規則:
drafts/
= 還沒發布
published/
= 網站應該存在的全部文章
published 是唯一正式內容來源
網站 repo 的:
src/content/blog/
可以完全由:
blog/published/
鏡像:
rsync -av --delete blog/published/ blog-repo/src/content/blog/
這時 --delete 才安全,因為 published/ 已經代表正式網站的完整內容。
GitHub Actions 觸發
只在 Blog 內容有變化時觸發:
on:
push:
branches:
- main
paths:
- "blog/published/**"
這樣一般筆記更新不會觸發網站 deployment。
Cross-repository push
Workflow 需要讀 Vault repo、寫 Blog repo,因此需要一個只允許寫 Blog repo 的 credential。
權限遵循最小權限即可,例如:
Contents: Read and write
Workflow 核心
概念上只有:
Checkout Vault repo
Checkout Blog repo
rsync published/
commit + push Blog repo
Blog repo 一更新:
GitHub Actions
↓
Blog repo
↓
Cloudflare
↓
Astro build
↓
正式網站
刪文也能同步
如果 blog/published/ 裡的文章被刪掉,下次 Action 的 rsync --delete 會讓 Blog repo 同步刪除。
Cloudflare 下一次 build 後,該文章網址就會變成 404。
架構重點
Obsidian 負責寫作與整理,GitHub 負責版本控制與 Automation,Astro 負責產生網站,Cloudflare 負責 build 與 hosting。
每一層只做一件事,整體會比同一個資料夾同時使用多套同步機制更容易維護。
Tags:Obsidian · GitHub Actions · Cloudflare · Automation