NAS/VPS 部署自动同步的客户端

本文以群晖为例,其它类型的 NAS 本质上是一样的,都是通过 Docker 进行 FarBox 的部署。不同 NAS 的硬件不同,比如基于 ARM 处理器的,运行 Docker 估计会困难很多甚至可行性很低,具体请自行研究。
如果是 VPS,基本的逻辑也是一样的,会在文末做简单介绍。

同步的机制

  1. 每隔 1 分钟,先『同步到 FarBox 的服务器节点』,然后再执行『从 FarBox 服务器上同步回来』。
  2. 这意味着,如果有本地、远程存在版本冲突 (只要不是频繁、短时、跨平台的操作,较罕见的场景),是会覆盖的。
  3. 从服务端同步回来的时候,如果是 Markdown 文档类型,会自动在同级目录下的 .Archive 目录下,创建一定数量的历史版本 (小文件的最大历史版本数为 150)。

在 NAS 上部署

在 NAS 上部署 FarBox 的客户端后,每隔 1 分钟,会自动完成同步。我们只要挂载某个文件夹作为网站文件夹,那么:

  1. 把文件放到 NAS 上对应的文件夹内,会自动同步到 FarBox 服务器上;
  2. 如果 FarBox 的服务端内容更新 (包括 Web Editor、通过微信同步等方式),也会自动同步回 NAS 内。

第一步,下载镜像

在群晖(NAS) 的 Docker 套件中,下载 farbox_client 的镜像。

第二步,挂载一个文件夹

在运行这个镜像前,选择『高级设置』,挂载一个文件夹,路径为 『/mt/data』。建议创建一个『共享文件夹』,然后在后面直接创建一个子文件夹,作为网站的文件夹。

第三步,设定环境变量

仍然是镜像运行前的『高级设置』里。
设定三个环境变量,node 就是自己 FarBox 的节点 URL,root 就是刚才挂载的 /mt/data,private_key 是自己 Bucket 的私钥。

注意: 此时私钥是处于当前 NAS 公开的状态,比如运行 docker inspect <container> 都是能看到的,请确保自己的 NAS 是不对外公开的。

小贴士

  1. 群晖的 Docker 套件,会把 stdout 进行记录,简而言之,就是在当前运行的容器详情里,里面的日志显示的也就是 FarBox Client 的同步日志。
  2. 如果有多个网站 (Bucket),那么就运行多个容器,不同的名称、root、private_key 就可以了。
  3. 按照实际运行的经验来看,整个容器大概会使用 50Mb ~ 200MB 左右的内存,但具体的仍然以实际情况为准。

配合 Dropbox、Google Drive使用?

群晖有内置的套件Cloud Sync可以同步 Google Drive、Dropbox、OneDrive 等云端,再配合上面在 NAS 部署的 FarBox 客户端,就基本能实现,数据自动通过 Dropbox 等云端同步到 FarBox 上 Bucket (网站) 的机制。
如果 FarBox 上的 Bucket 绑定了微信等输入口子,那么文本、图片更新后也会同步到 Dropbox 等云端。

配合 Resillio、微力同步使用?

Resillio、微力同步 这些工具,相当于实现一个私有的 Dropbox、百度网盘。因为国内网络、内网穿透等原因,简单以微力同步作为例子介绍。

使用步骤的简要说明:

  1. 在 NAS 上安装好 微力同步 ,最好单独创建一个『共享目录』给它使用,以后把 FarBox 上的 Bucket (网站) 目录放在其上作为同步使用。
  2. 需要设定好目录的权限,最好可以直接设定为 Everyone 都可读、可写的权限。
  3. 在 iPhone、iPad、Mac、安卓、Windows 上分别安装微力同步对应的客户端,添加对应的(读写类型)同步目录。
  4. 如果使用 Metion 作为写作工具,那么把对应的 Bucket (网站) 目录作为 『外部挂载』的形式在工作目录中打开 (它们位于 『我的 iPhone』、『我的 iPad』上)。(此时前面设定的目录权限和重要,像群晖默认给的权限没有办法正常读写,Metion 就会不断提示权限出错)。
  5. 如果使用其它写作工具,基本逻辑也是一样的,只是最终通过微力同步处理同步。
  6. 最重要的一点,在 NAS 上部署的 FarBox 客户端,其挂载的文件夹,应该就是微力同步对应的一个文件夹,这才能实现自动数据同步到 FarBox。

注意: 像 iOS 系统限制比较多的,微力同步似乎并不能在后台驻停、实时进行同步,一般需要你比如使用 Metion 写完文章后,然后再打开 微力同步 这个 App 等它完成同步。

在 VPS 上部署

如果是在 VPS 上部署,基本的逻辑也是一样的,就是运行一个 Docker 的容器。
参考命令: docker run -d --name farbox_client -v 本地site存储路径:/mt/data -e node="节点URL" -e root="/mt/data" -e private_key="私钥" hepochen/farbox_client:latest

注意事项:

  1. 私钥 (private_key) 一般是多行的,需要把换行去掉,成为一行
  2. 同样需要确保 VPS 的环境私密,因此此时 Bucket 的私钥处于相对公开的状态。

注意

本质上,本 Docker Container 运行的命令是 /usr/bin/python -m farbox_bucket.client.run,也就是对应 FarBox Bucket 开源的源码,其路径位于 farbox_bcuket/client/run.py
此类部署对自己的技术有不低的要求,也可能会遇到环境问题,也可能是需要了解 Linux 上的一些基本逻辑,也可能是要先理解『客户端 client side』和『服务端 server side』的区别,也可能需要基本非常理解 Docker 挂载文件夹的基础逻辑……
如果遇到问题,折腾并且学习,自己学、自己查;如果是 farbox_bcuket/client/run.py 的问题,欢迎在 Github 上提 request 过来,感谢。

Comments
Write a Comment
  • 已经安装了微力同步,请问应该把哪个文件夹设为跟电脑同步的文件夹。

    • Hepo reply

      @Unee Wang, 这很难回答,都是自己决定的。应该说,你自己选定了一个文件夹,它在微力同步中可以被访问到,同时,也挂载到 FarBox 的客户端中作为工作目录。

  • 为什么只有根目录会被同步,里面的文件夹完全不会被同步

    • @ddkk3000 已经设置Eeveryone可读可写了