QNAP NAS 作为 Joplin 同步后端笔记

Joplin是我非常满意的一款笔记软件,入手NAS之前,在树莓派+Nextcloud上面都用的很不错。于是,入手NAS之后首先想着把Joplin的后端转移过来。

转移的过程,理论上并不复杂,无非就是首先保证所有客户端同步并且退出,然后把服务器端的数据转移好,最后更改所有客户端的远端地址,这个随便自己思考一下就可以的出来,都不用去查文档。

不过我还是碰上了两个麻烦:

执行完数据迁移之后,按教程新建了一个共享文件夹并且配置WebDAV,然后更改PC端同步地址,测试,发现报SSL错误,有关LEAF什么的错误,去网上搜只能发现是SSL没配置对,但灵异的是,我明明用的是以前的证书文件。

这里需要解释,由于QNAP初始化的时候,我选择了中国区,造成无法使用Let's Encrypot的免费证书,所以我用的办法是,把原来树莓派上的证书文件下载下来,上传到控制台-系统-安全-证书与私钥那里,相当于是手动配置的SSL证书。配置的过程中,有三个文件(证书、私钥、中间证书)要上传,但是中间证书那一栏标注着可选,我想着我上传的证书文件是“full_chain.pem”,也就是中间证书和证书的合并文件,我手头也没有中间证书了,所以就没有管中间证书那一栏,上传之后浏览器访问都正常,Windows自带的WebDAV客户端也没说啥,但是Joplin很挑剔这个证书。这个时候我只能怀疑是中间证书缺失的问题。

本来想着勾选上“忽略SSL错误”凑合着用就行了,但是安卓客户端更挑剔,根本就没有忽略错误的选项。于是,只能是想办法把证书完全配置好。于是从NAS上重新把证书下载回来,用文本编辑器打开,比较full_chain.pem文件和下载回来的证书文件的差异,发现full_chain.pem文件里面很明显的有两段密码,下载回来的证书文件只有一段,并且内容与full_chain.pem文件其中的一段完全相同。

难道所谓的证书合并,其实就是把两段文本粘在一起?尝试了一下,把full_chain.pem文件中多出来的那段密码单独写成一个文件,扩展名改成CRT,上传到控制台-系统-安全-证书与私钥那里,再访问就完全正常了。

结论:QNAP NAS 的网页服务器不认合并后的证书,合并好了传回去也会只取其中的一段,所以中间证书如果空着那就是空着了。但是,浏览器和windows系统不知道是因为缓存过,还是因为比较智能,可以自动把中间证书补上,但是Joplin没有这么智能,所以必须把三个证书都上传。

P.S. 中间证书的问题,之前也出过:Letsencrypt certbot命令的默认操作使得网站在Android端报证书错误的问题

这个就纯粹是人品问题了,证书搞好了之后开始同步,结果老是在同一个文件里卡住,报错信息是一段看起来像是Nextcloud维护模式的信息。一开始以为是同步速度太快的问题,但是后来看了一下文件的内容之后,发现文件确实是损坏了。具体的说,是Nextcloud服务器端的文件完好,本地磁盘放的是损坏的(文件的前七八行被一条Nextcloud维护模式信息覆盖了),但是Nextcloud并不知道二者有差异。我迁移文件的方法是把本地磁盘上的文件上传到NAS,所以中招了。

可以合理推断,某一次Nextcloud客户端正在同步时,我搞了一次升级或者APP安装,然后服务器端返回来的错误信息就被阴差阳错当做文件写了。提了个issue,但是目前无人跟进。

修复倒是还可以,就是把服务器端的正确文件替换进去。

但是心有余悸。如果由于某些原因,本地的错误文件又覆盖了服务器端的正确的,那就很难搞了。

  • 最后更改: 2020/08/27 07:23