Skip to content

用obsidian管理多个博客

一些花里胡哨的技巧。

目标

多个博客网站,都用github pages功能发布。多个博客的post文件放在一个obsidian仓库中管理,并且本身作为一个github repository。push 这个obsidian/github仓库后将博客内容同步到其他博客repo。各个repo自己发布。

思路

用github action,push之后检测变化的文件,clone对应仓库,同步文件,再分别push。

需要注意的是,github action对各个repo的读写权限,需要配置各种keys。
先生成ssh keys,将pub放入博客repo的deploy key,记得打开写权限;private key放入obsidian repo的secrets中。
每个博客仓库都需要一个密钥对。

示例

例如将obsidian/hexo的内容同步到hexo框架下对应的hexo/source/_posts文件夹下,/.github/workflows/sync_hexo

name: Sync ob/hexo to hexo/source_posts

on:
    push:
        paths:
            - "hexo/**" # 监听文件夹内的文件变化,没有变化不会触发action
jobs:
    sync:
        runs-on: ubuntu-latest
        steps:
            # 检出 obsidian 仓库的代码
            - name: Checkout blogs repository
              uses: actions/checkout@v3
              with:
                  repository: username/obsidian_repo
                  path: obsidian
            - name: commit
              run: |
                  cd obsidian
                  git log -1 --pretty=%B > ~/commit

            # 设置 Git 配置(用户名和ssh私钥)
            - name: Set up Git
              env:
                  ACTIONS_KEY: ${{ secrets.OB_PRI }}
              run: |
                  mkdir -p ~/.ssh/
                  echo "$ACTIONS_KEY" > ~/.ssh/id_rsa
                  chmod 700 ~/.ssh
                  chmod 600 ~/.ssh/id_rsa
                  ssh-keyscan github.com >> ~/.ssh/known_hosts
                  git config --global user.name "action"
                  git config --global user.email "email"
                  git config --global core.quotepath false
                  git config --global i18n.commitEncoding utf-8
                  git config --global i18n.logOutputEncoding utf-8

            - name: clone
              run: |
                  git clone git@github.com:username/hexo_repo ~/hexo

            - name: Sync files from obsidian/hexo to hexo/source/_posts
              run: |
                  rsync -av obsidian/hexo/ ~/hexo/source/_posts/
            - name: Commit and push changes to HexoBlog repository
              run: |
                  cd ~/hexo
                  git add .
                  git commit -m "Sync obsidian to hexo $(cat ~/commit)"
                  git push origin main

注意其中 username hexo_repo obsidian_repo secrets.OB_PRI等根据情况改写。