[Obcsapi v4] Obcsapi Golang 版本

警告
本文最后更新于 2023-08-13,文中内容可能已过时。

Obcsapi v4 版本,使用 Golang 重构。功能,部署说明见文档。https://kkbt.gitee.io/obcsapi-go/#/

很久之前,我在为我的笔记找一个安身之所。但是我很快发现我的云笔记难以导出,所以就放弃了迁移,也没再继续使用,至今云笔记中还有着以前写的笔记。后来我试图寻找一个使用 WebDAV 存储纯文本的笔记软件,有段时间,还真的被我找到了,即思源笔记,思源笔记的 Web 编辑器能连接我的 WebDAV 服务。桌面版,手机版,Web 版功能很一致,都可以连接 WebDAV,思源笔记还使用 git 存储。不过由于纯文本,Markdown 的局限性,思源最后好像选择了 JSON 存储。虽然 JSON 也是纯文本,但是对其他软件就不太友好了。总之我很难在我的坚果云客户端上查看笔记了。

纯文本局限如此之大,遭到放弃,为什么我还要选择纯文本呢。大概是因为纯文本相对简单,易于存储,被多个应用使用。我的笔记大多为备忘,计划。内容上代码,说明和日志记录就占了很多,也有一些收藏的俏皮话,网页等等。大部分纯文本都足以应对了。我也会将纯文本 Markdown。当做源代码,源文件之类的存档。总之我很中意不依赖特定软件的,可以轻松被程序处理的纯文本。我想,纯文本再过几十年也可以被轻松读取,也不会过时到无法打开。而本地存储,也不用担心服务商跑路。

后来找到了 Obsidian 作为笔记软件,接触到插件系统中的 Remotely Save 对象存储同步后,写了一些程序来往对象存储里写入记录。一点点升级到了 Obcsapi v4。本来计划使用 Rust 重构 v3 Python 版本的,但是写 Rust 自己要写的库有点多,试了一下 Golang ,这玩意写起来很快,不过代码就像白开水,总之我现学现写,搭玩具一样搭起来了 Obcsapi v4 。现在至少能用。

Obcsapi v4 相对于v3 ,后端从 Python 变成了 Golang,不得不说 Python 的环境和包体积真是有点大,尤其是亚马逊对象存储的 SDK ,他们似乎把很多服务器信息都放在包里了。至于前端网页,功能有增加也有减少。减少了文本的前进后退,输入框的 Markdown 预览,但也增加了更多东西。所有功能都在文档里有说明 https://kkbt.gitee.io/obcsapi-go/#/

由于增加了一些数据源,现在 Obcsapi 可以与更多软件联合使用,如 Alist 支持挂载网盘,提供 WebDAV 服务,借由 WebDAV,Obcsapi 间接支持的数据源就很多了。而且由于是文件同步方式,自由度还是比较高的。可以任意组合,甚至可以把 Obsidian 仅仅作为一个同步软件。效果比较好的还有坚果云同步文件夹,或者把 WebDAV 挂载成盘。Obcsapi v4 的流程大概这样

https://cdn.ftls.xyz/images/2023/06/default_canvas.svg

由于是文件同步纯文本,可以看到纯文本可以被各种各样的编辑器打开使用。

https://cdn.ftls.xyz/images/2023/06/canvas_2_show.svg

同步效果最好的还是 Obsidian 插件 Self-hosted LiveSync 用 CouchDB 实时同步,但是门槛也有点高,需要一个数据库。我想着如何降低 Obcsapi 的门槛,经过测试,目前内存大约占用 40mb,以前试过 Obcsapi v4 可以编译到 ARM 平台,可以使用 Termux 在旧手机上运行;大概也可以在 Linux 板子上运行。如果使用 Rust 构建,大概性能应该会更高一些?

总而言之,阿里云函数计算大概是最简单的方法了。如果不是腾讯云云函数收基础费用,我大概不会接触阿里云函数计算。而阿里云函数计算,支持挂载对象存储。所以,如果以前使用 Obsidian Remotely Save 对象存储方式,并使用的是阿里云对象存储同步,大概5分钟就可以搭建完成 obcsapi v4。没有使用过也不算麻烦,也可参考我以前的博客 Obsidian 同步 Remotely Save S3 配置指南。下面是最简单实用的的方法,大概是除了 Docker 之外最好的方法了。

这种部署方式需要开通阿里云云函数(函数计算FC)服务和对象存储服务。原理是云函数挂载对象存储,使用对象存储内的 Obcsapi 程序,配置等。Obcsapi 使用本地存储数据源,存储到同一个对象存储中。

请使用者注意使用费用,如果库中文本文件多,体积较小,费用会比较低;如果是文件占用空间大,建议考虑购买服务器或者使用对象存储,因为云函数的流量并不便宜(0.5元/GB)。如使用 Obcsapi 的图床等功能,也注意使用费用。

  1. 下载最新版本的 releases 压缩包 ,可根据自身需要修改其中配置文件,主要修改账户密码。
  2. 创建一个和云函数服务地域相同的对象存储,然后在文件管理中创建一个文件夹,名称可以是 fc 或者 _fc ,如果打算云函数和对象存储就使用这一个库,使用fc作为文件夹名称,库中会多出一个文件夹,其中包含多个文件,可以在 Obsidian 库中修改配置文件等,或者使用对象存储服务商,Alist 等进行文件管理;_fc 文件夹 Obsidian Remotely Save 默认不会进行同步。

https://cdn.ftls.xyz/images/2023/06/1-oss.png

  1. 创建文件夹 fc 后,点进去,然后将压缩包内容解压上传到该文件夹。完成后,fc目录可以看到 server config.yaml 等文件则代表正确。
  2. 新建一个云函数服务,挂载刚刚创建的对象存储服务, Bucket 子目录选择 / 根目录,函数本地目录挂载到 /home/app/ 目录。

https://cdn.ftls.xyz/images/2023/06/2-fc.png

  1. 新建一个云函数服务下的云函数,环境选择 Debian9 环境即可,内存CPU选择最小的就可以(一般运行占用 40MB 内存),然后选择文件夹上传,把压缩包内的 fc-run.sh 这一个文件上传就可以了。运行程序填写 bash fc-run.sh。端口填 8900 。然后部署,进行测试。

https://cdn.ftls.xyz/images/2023/06/3-fc.png

https://cdn.ftls.xyz/images/2023/06/4-fc.png

  1. 完成部署后,会跳出函数代码界面,可以看到上传的 fc-run.sh 文件,文件内容如下
1
2
3
4
#!/bin/bash
# 如选择挂载 OSS 对象存储,请先将压缩包内文件放到 OSS 中 , 并根据相应的的目录配置云函数挂载目录
cd /home/app/fc/
./server

该文件功能只有两个步骤,进入对象存储挂载目录下的 fc 文件夹,运行 fc 文件夹下的 server 可执行文件。

  1. 点击测试函数,执行成功,则代表部署成功。可以复制 公网访问地址 URL ,并将这个网址作为 Obcsapi 前端的服务器地址。浏览器打开 https://note.ftls.xyz/web/ 这是我自己部署到前端,一般是最新版本,也可以把压缩包内的 website 文件夹自行部署为前端。注意需要在 web 这个二级目录下。

  2. 由于默认 Obcsapi 默认根目录会在对象存储 fc/webdav/ 文件夹下 ,因此需要在前端更改库文件夹位置,前端登录,默认账户密码在配置文件中有设置,进入页面后,齿轮-Server Setting-WebDAV-库文件夹位置 改为 ../../ 。然后保存即可。此外,如想使用图床,需要更改配置文件中的 backend_url_full 为云函数 URL,并且 齿轮-Server Setting-图床-BaseUrl 填写 fc/webdav/images/ 即在 Obsidian 库中使用图床上传的本地图片了。

  3. 至此,云函数已经部署完成,将对象存储作为 Obsidian 的库,可以使用 Obsidian 的插件 Remotely Save ,见Obsidian 同步 Remotely Save S3 配置指南,也可以选择使用 Alist 挂载对象存储,然后使用 Alist WebDAV 服务,使用相关软件挂载 WebDAV 为本地新盘。需要注意的是,截止 2023 04 09 阿里云云函数不支持 WebDAV 一些方法,如列出,所以无法使用 Obcsapi WebDAV 服务。

注意: 这种部署方法,fc云函数由于采用的是内网方式运行对象存储内的服务,所以内网流量较多,虽然是免费的。但也可以配置更高效的方式,如云函数同时上传 server 这个可执行文件,然后 fc-run.sh 文件内容如下

1
2
3
#!/bin/bash
cd /home/app/fc/
/code/server

这样即可运行云函数上传的 server 文件,减少内网流量。同时,压缩包内 website 文件夹也不是必须的,可以删除。

用阿里云云函数部署,云函数实例内存可能不够。 由于自然分词(按 full 词典)等原因 实例刚刚创建时,巅峰内存为 300Mb + ,平时运行也在 200Mb +。可以通过选择更小的分词词典,减少内存。最低约 17Mb 。但是分词效果就并不好了。默认大概占用 100Mb +

云函数部署虽然能实现大部分功能,但是却不如 Docker 功能完整:

1
2
docker pull kkbt/obcsapi:latest
docker run -d -p 8900:8900 --name myObcsapi -v /home/kkbt/app/obcsapi-go/:/app/data/ kkbt/obcsapi:latest

现在,打开 https://note.ftls.xyz/web/ 后,点击安装,手机平板是添加到桌面。就可以有一个简易纯文本 Memos 界面了。

我使用纯文本,是带 Markdown 的纯文本。因此归档时,可以打包成一本书,一个 EPub 格式的文件。我曾经这么做过,但是大部分内容过于零散,而且对于代码片段来说并不友好。折腾到底,对我而言,还是比较喜欢纸笔手写…但是毕竟这是个信息时代,我也不大可能用纸笔记录代码片段和笔记。不过备忘,计划和感想,倒是值得一记。科技的发展给了我太多选择