最近折腾Obsidian及hexo

以下是最近折腾的东西。

GitHub Publisher(enveloppe)

上手Obsidian一段时间后,感觉良好。想着通过Obsidian直接更新博客。这个hexo博客代码托管在Github,然后通过Netlify部署和构建。一直的做法是,通过github.dev在线更新或者修改Github代码仓的博客文章。既然使用Obsidian了,能用Obsidian直接更新博客就很完美了。

因为代码都托管在Github,使用Obsidian直接更新博客的可能性和方法很多。比如obsidian-git,将整个博客作为一个Obsidian仓库,然后使用此插件同步更新。又比如obsidian-digital-garden,将需要的Obsidian笔记托管到Github,然后通过Vercel构建静态站点。

以上适合新建全新的Obsidian笔记及新建的博客。对于像我这样已有存量笔记及博客的用户不太适用,使用起来不太优雅。直到我发现了obsidian-github-publisher

GitHub Publisher原名叫mkdocs publisher(目前已改名叫enveloppe。2024.7.25)。最大特点是能将Obsidian仓库里的任意笔记自动或者手动同步到GitHub代码仓库的任意位置。

安装好插件后,首先设置好Github相关信息,包括Github repository,用户名,token以及Branch。当然也可以在单个笔记文件里,通过文档属性(frontmatter),单独设置接收笔记上传的Github仓库信息(可以选择同一用户下的不同仓库,同一仓库下的不同位置)。

上传设置。设定上传的笔记存储在Github仓库的位置。因为我的hexo博客日志文件保存在source/posts目录下,故选择Fixed Folder,设定好默认上传到的目录。


文章发布。在文章文档属性添加一个share属性(可以根据需要在插件设置里改成其他任意名称),赋予值 true。文章写好后,右键发布。

这个插件还有很多其他功能,比如支持Wikilinks,dataview以及静态博客支持markdown富文本展示的内容,比如Mermaid,Latex等。详细介绍可以参见这个页面:obsidian publisher documentation

deploy to COS

这个hexo博客代码托管在Github,Netlify构建静态文件,然后套上国内的cdn。唯一的问题是无论是直接用Netlify自带的cdn,还是套国内的cdn,总感觉不够丝滑。问题出在哪儿是显而易见的。

某天突然顿悟,为什么执迷于一定要部署到Netlify?hexo这样静态博客的优点不正是部署方式的多样性吗!除了类似Netlify这样的serverless平台,对象云存储,FTP,linux主机(通过Rsync部署),git仓库,ipfs等等都可以部署hexo。(参见hexo部署

因为经常用,决定把这个hexo博客迁移到腾讯COS。

源自WordPress时代保持下来的好习惯,博客站点动静态资源分离,图片,JS等静态资源都托管于第三方的存储,因而剩下的工作会很简单,可以使用诸如hexo-deployer-cos这样的插件。但是我这个博客目前只能运行于nodejs 14.x(博客主题老旧原因),就不使用插件方式,不动博客代码本身了。适合用Github action自动构建hexo,然后推送到cos。

方法很简单,在Github action新建一个自动化任务 .github/workflows/cos-deploy.yml,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# workflow
name: Hexo blog

on:
push:
branches:
- main

jobs:
deploy:
name: Deploy Blog
runs-on: ubuntu-latest
env:
TZ: Asia/Shanghai

steps:
# check it to your workflow can access it
# from: https://github.com/actions/checkout
- name: Checkout Repository master branch
uses: actions/checkout@v2
with:
ref: 'main'
submodules: true

# from: https://github.com/actions/setup-node
- name: Setup Node.js
uses: actions/setup-node@master
with:
node-version: "14.x"

- name: Yarn Install Cache
uses: c-hive/gha-yarn-cache@v1

- name: Install Dependencies
run: yarn install

## generate files
- name: Generate Hexo Site Public Files & Create Files for Blog Assets
run: yarn build

## deploy to tencent cos
- name: Deploy to Tencent COS
env:
SECRET_ID: ${{ secrets.TENCENT_CLOUD_SECRET_ID }}
SECRET_KEY: ${{ secrets.TENCENT_CLOUD_SECRET_KEY }}
BUCKET: ${{ secrets.COS_BUCKET }}
REGION: ${{ secrets.COS_REGION }}
run: |
sudo pip install coscmd
coscmd config -a ${{ secrets.TENCENT_CLOUD_SECRET_ID }} -s ${{ secrets.TENCENT_CLOUD_SECRET_KEY }} -b ${{ secrets.COS_BUCKET }} -r ${{ secrets.COS_REGION }}
coscmd upload -rs --delete ./public/ / -f

在Github设置里新建4个密码变量,分别是secrets.TENCENT_CLOUD_SECRET_ID,secrets.TENCENT_CLOUD_SECRET_KEY,secrets.COS_BUCKET,secrets.COS_REGION。对应的值(id,key,cos桶名称,地域)可以在腾讯COS里设置查询。

以上代码可以根据自己的需要修改,比如Github仓库的分支(main),node版本等。上述自动化的流程是,先从 Github仓库中检出代码,然后在action里缓存,接着构建hexo的静态文件,然后通过腾讯云的coscmd工具上传到相应的cos桶里。

最后一行命令 coscmd upload -rs –delete ./public/ / -f 目的是比较cos存储桶内的文件,如果有变更则更新,如果cos中存在但hexo的public目录中不存在,则删除对应的文件。腾讯云的coscmd工具的使用可以参见官方文档

hexo的public目录上传到cos以后,绑定域名,就可以访问了。COS提供了自定义源站域名,cdn加速域名,全球加速域名三种选择。因为我站点的静态资源已经cdn了,此处完全没必要再次cdn加速,因此我使用了自定义源站域名。而全球加速只适用于有在多个不同地区上传文件到cos的需求。

通过测试,发现即使使用的是自定义源站域名,ping出来仍然有多个ip,网站访问速度比netlify+国内cdn好很多,个人体验也更丝滑。(心理作用?)

Dataview

之前安利过weread这个Obsidian的微信读书插件,能将微信读书的所有笔记同步回Obsidian。这个插件默认只能通过笔记目录(书名或者书籍类别两种)的方式展示读书笔记,不太直观,而配合obsidian-dataview插件能完美的展示自己的阅读书目,功能强大。

weread插件默认展示方式

obsidian-dataview应该是目前使用量最大的Obsidian插件了,用处很多。对于我的读书笔记,能从对应的笔记仓库里过滤、排序和提取数据,然后通过表格,列表等方式展示。

用法很简单,安装好插件以后,新建一个展示dataview数据的笔记页面,然后输入相应的的dataview代码,稍等片刻,等数据提取完毕,就能展示了。插件网站有详细的使用说明可以参考。

对于读书笔记,我主要想通过时间展示阅读的书目。weread插件给读书笔记提供了很多文档属性(frontmatter),比如书名,阅读时间,作者,封面等等。dataview正是从这些数据中查询,筛选然后展示的。

比如我的dataview代码:

table author, lastReadDate
from “read/weread”
sort lastReadDate desc

从read/weread 文件夹里查询数据,展示作者(author),最后阅读时间(lastReadDate)等信息,并按照最后阅读时间排序。

展示效果如下:

以上是在Obsidian笔记里展示,如果把这个笔记文件直接发布到hexo,只有聊聊几行dataview代码。而上面提到的GitHub Publisher插件刚好解决了这个问题,在插件设置里把dataview功能开启。在上传到github仓库之前,dataview代码会被提前渲染成对应的markdown格式的文本,这样在hexo博客里就能展示对应的书目了。

以上,如此,接下来又能折腾好久了!

陈寅恪及《柳如是别传》 《中国历代政治得失》笔记补遗

  评论

Nickname
Email
Website
0/500
  • 百度表情
  • 新浪微博
  • 脸书表情
13 comments

那个github publisher 是不是改名字了,搜索不到,有个 Enveloppe 不知道是不是。

加利福尼亚
Linux
Chrome 127.0.0.0

刚看了下,是改名叫enveloppe了

中国
Windows 10
Chrome 109.0.0.0

有目录结构的比较麻烦,我的是 content 下面3个目录,好像没法设置。

加利福尼亚
Linux
Chrome 127.0.0.0

那直接把default folder设置成content。我的是source/_posts。其实这个根据需要可设可不设,主要是方便自动上传整个文件夹。
我首选是写好文章,单篇手动上传。插件设置里命令一个任意share key(我的是share)
然后在单篇文章的 frontmatter里填入,share:true
就能控制这篇文章单独上传了。

中国
Windows 10
Chrome 109.0.0.0

目前你说的这个方法没问题。只是我hugo的内容是分目录放置,不同类别放在不同的文件夹下,比如 content 文件夹下有 A、B、C 3个文件夹,按你这个设置,是传到content目录下,不会传到对应文件夹下,如果用 obsidian path 就会新建目录,我本地目录是 github/ A B C 不同目录。

加利福尼亚
Linux
Chrome 127.0.0.0

通过修改本地目录来强行对上了。

加利福尼亚
Linux
Chrome 127.0.0.0

明白你的意思了。

中国
Windows 10
Chrome 109.0.0.0

哈哈。:微笑:

中国
Windows 10
Chrome 109.0.0.0

本地内容删除了,要怎么同步让github也删除呢?

加利福尼亚
Linux
Chrome 127.0.0.0

这个似乎只管上传更新,没有删除功能。

中国
Windows 10
Chrome 109.0.0.0

看插件设置里,有个Auto clean up选项。我没这个需求,没用过。你可以尝试下。

中国
Windows 10
Chrome 109.0.0.0
----- Read more
Doncr

可以使博客支持obs的语法吗

山东
Windows 10
Microsoft Edge 126.0.0.0
提问者

搞这个工作流是需要有域名的吗?

广东
Windows 10
Microsoft Edge 126.0.0.0

域名不是必须的。

广东
Windows 10
Chrome 109.0.0.0

感觉介绍这么强大的插件,已经用上了。

浙江
macOS Catalina
Microsoft Edge 123.0.0.0
iaei

这篇文章很有用。我在ob上有工作、生活两个库(公司电脑不便存放个人数据因此不能合并),这个方案完美解决所有痛点。

  1. 可以自由地将不同库的内容发布至同一博客。
  2. 发布简单,只要加个属性,不用复制粘贴至其他位置发布。ob里也可以用该属性筛出发布的文章,便于整理。
  3. 静态页,不用购买服务器,cos即可,且数据都存于ob中,不会因为服务器停用等原因丢失数据,也方便迁移。
  4. 博客可用代码高度自定义。
上海
macOS Catalina
Safari 17.3.1

:like:

广东
Android Quince Tart
WeChat 8.0.47.2560
knowfoot

不好意思,事情有点多,想问下博主,这个可以和obsidian的库联动吗 ?还有支持excalidraw画布的内容不

宁夏
Windows 10
Chrome 116.0.0.0

联动指什么?
有插件,可以在obsidian上直接用excalidraw

广东
Android Quince Tart
Microsoft Edge 119.0.0.0

简单体验了下,没太习惯~

德里国家首都辖区
Windows 10
Microsoft Edge 119.0.0.0

我的没备案,国内的好多东西都弄不了

湖北
Windows 10
Chrome 118.0.0.0

真能折腾,哈哈

广东
macOS Catalina
Microsoft Edge 118.0.2088.46

好会玩,这个只见过,似懂非懂。

安徽
Windows 10
Firefox 118.0

有没有从Obsidian直接同步到oss的方案呢?我的博客没有经过github

河北
macOS Catalina
Chrome 117.0.0.0

同步ob笔记到oss可以用remotely save插件。不过这个只有同步,没法将.md文档渲染成静态页面。你可能想问的是将先ob笔记渲染成hexo静态博客,然后同步到oss,这个没法直接来。

广东
Windows 10
Chrome 109.0.0.0

原来如此,有趣的知识又增加了
我还是老老实实用vscode吧:大笑:

河北
macOS Catalina
Chrome 117.0.0.0

你可以用vscode把博客同步到github,这样会增加很多可能性。

广东
Windows 10
Chrome 109.0.0.0

有道理,有时间了折腾一下~

河北
macOS Catalina
Chrome 117.0.0.0
----- Read more

竟然看柳如是别传。。有什么心得吗?

江苏
macOS Catalina
Safari 17.0

看了很多年,才看完一两章。:大笑:

广东
Android Quince Tart
WeChat 8.0.42.2460

org现在不能备案罗

湖北
Windows 10
Chrome 117.0.0.0

嗯,大概17,18年就不能备案了。我这个org域名备案早。

广东
Android Quince Tart
WeChat 8.0.42.2460