TL;DR
- Obsidian + iCloud 은 작성 및 동기화
- obsidian-git plugin 으로 게시할 글만 백업
- Quartz 는 Static Site Generator(SSG)
- Cloudflare 는 hosting
들어가며
나이가 들면서 기억에 남아있는 정보가 온전하지 못한 순간이 점점 많아져서 기록의 필요성을 느낀다. 경험했던 것들을 정리하던 중 어쩌면 어떤것들은 다른 사람에게 도움이 될 수 있지 않을까 하는 생각이 들었다. 나도 누군가로부터 도움을 많이 받았으니까.
사용한 도구와 서비스
Obsidian + iCloud
Obsidian 을 사용하는 특별한 이유는 없는데, private 하게 사용할 수 있는거랑, 오프라인 사용성, plugin 환경이 좋은 것 같다. Notion, Typora, Notes(macOS) 보다 더 잘 맞는 모양이다.
동기화를 위해 가장 쉽고 빠른 방법은 월 $4/월 을 지불하는것이다. 이 방법이 더 안정적일지도 모르겠다. 하지만 이미 iCloud 비용을 내고있으니 최대한 활용해야한다.
iCloud 설정은 단순히 vault 를 iCloud Drive 내 원하는 경로에 위치시키는 것이다. 이번에 맥북 구매하고 설정할때 iCloud 에 있는 vault 를 불러오기한 것 밖에 없다.
iCloud 에 .gitignore 와 같은 기능만 있으면 아래 과정은 단순해질 수 있다. Posts/ 를 npm project 로 설정하면 되는데, 그렇게하면 node_modules 도 동기화돼서.
Obsidian plugins & cli
obsidian-git
Vault 를 git repository 에 백업할 수 있는 plugin 이다.
나는 vault 전체를 백업하지 않고 Posts/ folder 만 백업하도록 설정했다. 이미 iCloud 동기화가 되어있어서 블로그 글 보관용도로만 사용한다.
plugin 설정 값을 아래처럼 수정했다.
command palette 명령어가 제공된다.
내가 가장 많이 쓸 명령어는 Git: Commit all changes 와 Git: Push 다.
add, commit 을 한번에 해주고 commit message 기본값으로 입력된다.
obsidian-export?
Obsidian 에서 작성한 Markdown(MD) 을 일반적인 MD 형태로 변환해서 내보낼 수 있는 cli 이다. 이 설정에서는 사용하지 않는다. 내부 문서 참조([[NOTE]])나 파일 첨부(![[FILE]]) 같은 문법은 다른 tool 과의 호환성을 위해 변환이 필요하다.
Quartz
SSG 로 사용한다. 11ty 와 Quartz 가 후보였고 더 할게 없어보이는 Quartz 를 선택했다. 그 시작이 Obsidian vault 를 웹에 게시하기 위해 만들어진 tool 이어서 별도의 설정 없이도 훌륭한 기능과 디자인을 사용할 수 있다. 실제로 수정한게 거의 없다. 그리고 i18n 에 기본으로 지원돼서 좋다.
Cloudflare Pages
DNS 관리는 Cloudflare 에서 한다. Cloudflare Pages 를 제일 먼저 생각했지만 GitHub Pages 와 고민중이다.
GitHub
총 2 개의 repositories 가 필요하다.
- Obsidian
/Posts백업용 - Quartz 용
sequenceDiagram
participant Developer
participant GitHub
participant obsidian-posts
participant quartz
Developer->>obsidian-posts: Push
obsidian-posts->>GitHub: Trigger a-action workflow
GitHub->>GitHub: Start a-action workflow
GitHub->>GitHub: Configure Git user
GitHub->>quartz: Checkout quartz repository
GitHub->>quartz: Pull obsidian-posts repository as subtree
GitHub->>quartz: Push changes to quartz repository
GitHub->>GitHub: Complete workflow
설정이 이상해보일 수 있는데,
obsidian-posts 는 trigger 역할만 한다. obsidian-posts 에 있는 action 에서는 quartz 를 checkout 받아서 subtree 를 업데이트하고 다시 origin 에 push 한다.
quartz 의 빌드는 Cloudflare Pages 에서 한다.
GitHub Actions 에서 발급하는 GITHUB_TOKEN 에는 다른 repository 에 대한 권한이 없다. obsidian-posts 에서 quartz 를 다루기 위해 Personal Access Token(PAT) 를 발급받고 workflow step 에 주입해줬다. 그리고 PAT 는 ssh 로 동작할때는 사용을 못하니까 repository 참조를 을 web URL 로 설정해줬다.
name: Name of your workflow
on:
push:
branches:
- main
-
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout Digital Garden
uses: actions/checkout@v4
with:
repository: OWNER/digital-garden
ref: v4
fetch-depth: 0
token: ${{ secrets.GH_PAT }} # `GH_PAT` is a secret that contains your PAT
- name: Setup Git Info
run: |
git config user.name "GitHub Actions"
git config user.email "actions@github.com"
# - name: Add subtree
# run: git subtree add --prefix=content https://github.com/OWNER/obsidian-posts.git main --squash
- name: Pull subtree
run: git subtree pull --prefix=content https://github.com/OWNER/obsidian-posts.git main --squash
- name: Push changes
run: git push origin v4