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

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

注意: 这是高阶的使用逻辑,请务必能理解 Docker 以及一些 Web 服务的基本逻辑,不要在没有基本的技术背景且不愿意自己解决问题的前提下去做尝试,会浪费自己的时间的。而且所有代码开放,client 端即使有问题都是独立的非关联性的,如果不懂基于 Python 的 Web 开发,此时在 Docker 的容器内更是黑盒的状态,不像 FarBox 2.0 部署之后还可以自行设定 Sentry 捕获错误。请务必理解!!!

同步的机制

  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 的客户端中作为工作目录。

  • wellsleep reply

    使用 client 在群晖上部署完毕,好用。

    和之前手工用途 python 脚本同步,好像看不到 template 文件夹。如果要修改 jade 模板,应该去哪找源文件呢?

    • wellsleep reply

      @wellsleep 我的意思是,以前我用手工 python 脚本同步,很少会从服务器上 sync_from,所以 template 文件夹可能一直就在本地。

      现在用 client 同步客户端,数据刚开始就是从服务器上同步回来,所以似乎没有抓到,导致现在 client 的文件夹里就没有办法改模板...