以下是最近折腾的东西。
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 | # workflow |
在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插件能完美的展示自己的阅读书目,功能强大。
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博客里就能展示对应的书目了。
以上,如此,接下来又能折腾好久了!
评论
那个github publisher 是不是改名字了,搜索不到,有个 Enveloppe 不知道是不是。
刚看了下,是改名叫enveloppe了
有目录结构的比较麻烦,我的是 content 下面3个目录,好像没法设置。
那直接把default folder设置成content。我的是source/_posts。其实这个根据需要可设可不设,主要是方便自动上传整个文件夹。
我首选是写好文章,单篇手动上传。插件设置里命令一个任意share key(我的是share)
然后在单篇文章的 frontmatter里填入,share:true
就能控制这篇文章单独上传了。
目前你说的这个方法没问题。只是我hugo的内容是分目录放置,不同类别放在不同的文件夹下,比如 content 文件夹下有 A、B、C 3个文件夹,按你这个设置,是传到content目录下,不会传到对应文件夹下,如果用 obsidian path 就会新建目录,我本地目录是 github/ A B C 不同目录。
通过修改本地目录来强行对上了。
明白你的意思了。
哈哈。
本地内容删除了,要怎么同步让github也删除呢?
这个似乎只管上传更新,没有删除功能。
看插件设置里,有个Auto clean up选项。我没这个需求,没用过。你可以尝试下。
可以使博客支持obs的语法吗
搞这个工作流是需要有域名的吗?
域名不是必须的。
感觉介绍这么强大的插件,已经用上了。
这篇文章很有用。我在ob上有工作、生活两个库(公司电脑不便存放个人数据因此不能合并),这个方案完美解决所有痛点。
不好意思,事情有点多,想问下博主,这个可以和obsidian的库联动吗 ?还有支持excalidraw画布的内容不
联动指什么?
有插件,可以在obsidian上直接用excalidraw
简单体验了下,没太习惯~
我的没备案,国内的好多东西都弄不了
真能折腾,哈哈
好会玩,这个只见过,似懂非懂。
有没有从Obsidian直接同步到oss的方案呢?我的博客没有经过github
同步ob笔记到oss可以用remotely save插件。不过这个只有同步,没法将.md文档渲染成静态页面。你可能想问的是将先ob笔记渲染成hexo静态博客,然后同步到oss,这个没法直接来。
原来如此,有趣的知识又增加了
我还是老老实实用vscode吧
你可以用vscode把博客同步到github,这样会增加很多可能性。
有道理,有时间了折腾一下~
竟然看柳如是别传。。有什么心得吗?
看了很多年,才看完一两章。
org现在不能备案罗
嗯,大概17,18年就不能备案了。我这个org域名备案早。