使用kbpbot实现Keybase静态文件托管
关于 Keybase.pub
我之前写过一篇介绍 Keybase 加密网络服务体验 的文章,里面提到 Keybase 对于用户的公共目录提供了 Keybase.pub 这个静态文件托管网站,方便其它用户访问 Keybase KBFS 里保存的公共文件。
所以之前我都会把我的 MDwiki 知识库 也同步更新到我的 Keybase 下的 wiki 公共目录,这样就可以把我的 nocwat.keybase.pub
作为一个备用的 Wiki 网站,如果我的 VPS 服务器无法访问,也可以通过 Keybase.pub 访问 Wiki 知识库。
然而最近我才后知后觉地发现原来 Keybase 从今年 3 月份开始就已经关闭了 Keybase.pub 静态文件托管服务,理由则是使用这项服务的用户数量太少,因此也就需要考虑新的 Keybase 静态文件托管方案了。
kbpbot
我稍微看了一下 Keybase Book 中关于 Kebyase Sites 的介绍文章,里面关于 Keybase.pub 的介绍还没有更新,不过还好目前 Keybase 提供的 kbpbot 机器人还是可以正常使用的。
kbpbot 机器人原本是为了支持用户使用自定义域名发布网站而开发的,为自定义域名配置正确的 CNAME 和 TXT 记录之后,访问域名时 kbpbot 就可以读取指定的 Keybase 目录中的文件,然后将静态文件内容返回给访问者。
由此也可以看出,kbpbot 也必须有访问对应的 Keybase 目录的权限,自定义域名静态文件托管才能正常工作。得益于 Keybase KBFS 文件系统的设计,公共目录、私有目录、团队目录都可以给 kbpbot 赋予访问权限:
提示
KBFS 文件系统中的所有文件都会自动签名加密,如果需要了解更多关于 KBFS 的使用方式,可以参考 Keybase 官方的 Introducing the Keybase Filesystem 这篇文章。
-
公共目录:
kbpbot 默认就可以访问用户的所有公共目录,不需要专门配置,例如我的 Wiki 知识库的 KBFS 路径就是:
/keybase/public/nocwat/wiki
; -
私有目录:
用户只需要在私有目录下建立一个自己和 kbpbot 能访问的子目录,这里多个 Keybase 用户名使用逗号隔开即可,例如:
/keybase/private/yourname,kbpbot/XXX
; -
团队目录:
团队目录则更加简单,将 kbpbot 作为读者加入你的团队,然后使用团队目录路径,例如:
/keybase/team/yourteam/XXX
。
然后是最重要的自定义域名配置,按照 Keybase Sites 文章里介绍的方式添加对应的 DNS 记录即可。例如我的 MDwiki 知识库使用的是 wiki.vp8.win 自定义域名,为 kbpbot 添加如下 DNS 记录:
-
CNAME 记录:
名称为
wiki
,记录值为:kbp.keybaseapi.com
; -
TXT 记录:
名称为
_keybase_pages.wiki
,记录值为:kbp=/keybase/public/nocwat/wiki
。
其中比较关键的就是 TXT 记录了,kbp=XXX
记录值就是用来告诉 kbpbot 机器人,用户访问此域名时需要访问什么 KBFS 目录。如果你用的是私有目录,把 TXT 记录值换成类似于 kbp=/keybase/private/yourname,kbpbot/XXX
就可以了。
域名配置完成生效之后,就可以通过自定义域名访问你的静态站点了。由于 kbpbot 还支持自动申请和更新 Let’s Encrypt HTTPS 证书,用户访问站点时将会自动使用 HTTPS 访问,完全不需要维护 HTTPS 证书之类的,这一点还是非常方便的。
另外 kbpbot 甚至还支持使用 Keybase Git 代码仓库来访问静态文件,只是不支持私有代码仓库(只有自己才能访问私有 Git 仓库),需要使用团队仓库,同样也要将 kbpbot 作为读者加入你的团队。
例如团队名称还是上面的 yourteam
,如果建立一个 teamwiki
仓库,就可以使用 keybase://team/yourteam/teamwiki.git
这种地址来 clone 仓库了,然后存放一些静态文件内容并提交。
最后我们把 Git 仓库对应的域名 TXT 记录值修改为:kbp=git@keybase:team/yourteam/teamwiki
,用户就可以通过域名 HTTPS 访问静态站点了。
同步 KBFS
我的 Wiki 主站是放在目前博客的 VPS 服务器上运行的,整个 Wiki 知识库目录通过 Resilio Sync 与本地的 Windows / Linux 电脑进行同步,本地使用 Markdown 编辑器修改 Wiki 内容后就可以自动更新到 VPS 服务器上。
Keybase KBFS 对应的 Wiki 目录,我则是直接在 Linux 上使用 rsync
命令将同步过的本地 Wiki 目录更新到 Keybase,好处就是可以基于 rsync
的同步机制自动只更新差异的文件,这里需要先启动 Keybase 应用程序哦:
~# rsync -ruv --exclude=notes.sqlite --exclude=.sync ~/Documents/wiki/ /run/user/$(id -u)/keybase/kbfs/public/nocwat/wiki/
rsync
的 --exclude
参数可以忽略不需要同步的文件,这里我指定 notes.sqlite
忽略 Markdown 编辑器使用的数据库文件,并指定 .sync
忽略 Resilio Sync 使用的内部同步目录。
Linux 系统上 rsync 的目标目录是:/run/user/$(id -u)/keybase/kbfs
,与当前本地用户的用户 ID 有关;Windows 系统如果 Keybase 客户端启用了在资源管理器中显示 KBFS 盘符,rsync 的目标目录可能就是这样:K:\
(实际的 KBFS 盘符可能并不是 K 盘)。
总结
我的 MDwiki 知识库在 Keybase 上的备用网站 wiki.vp8.win 目前已经正常运行一段时间了,而且 Keybase 的静态文件托管服务在国内访问也很正常,并没有出现被墙之类的问题。
由于 kbpbot 除了 Keybase 公共、私有和团队 KBFS 目录,还支持使用 Git 仓库,我们也可以将类似 Hexo 这种静态博客通过 Keybase Git 来管理,本地修改构建之后提交到仓库更新,这样小伙伴们通过 Keybase 来托管静态博客也还是比较省事的。
虽然 Keybase 被 Zoom 收购之后发展势头不太好,更新节奏也变慢了,但还是希望 kbpbot 的静态文件托管服务能继续维持下去,毕竟 Keybase 提供的各项加密网络服务还是非常出色的,祝大家玩的开心哦。