如何部署到 NAS 上

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

准备工作

怎么在套间中心安装Docker不做赘述,在 Docker 这个套件界面中,注册表里搜索farbox,下载如图所示的镜像:

然后,启动镜像(映像)

启动 Docker 镜像时的高级设置

在 Ubuntu 单独部署 FarBox 的时候,虽然通过 xserver 这个小软件直接跑 Docker,但本质上是运行了 /home/run/farbox/run.sh 里的内容,这个文件内容参考如下:

#!/bin/bash
docker run -d \
 -p 7788:80 -p 443:443 -p 80:80 \
 -v /home/run/$name$/configs:/mt/web/configs \
 -v /data/log/$name$:/mt/web/log \
 -v /data/$name$:/mt/web/data \
 -v /data/$name$_ssdb:/mt/ssdb/data \
 -v /static/$name$:/mt/web/static \
 -v /log/docker:/mt/docker/log \
 hepochen/farbox_bucket:latest

接下来,我们要做的事情,就是把 run.sh 里的相应配置,在群晖这个 Docker 的启动设置中进行对应。

建议群晖内新增一个共享文件夹来存储 FarBox 相关的数据、日志、配置等文件夹。

文件存储的挂载
文件存储的挂载

网络端口的映射
网络端口的映射

针对 NAS 的设置优化

FarBox 的运行,需要一些配置文件,也就是最终 Docker 容器内要读取的 /mt/web/configs 路径,这里的内容可以从 https://github.com/hepochen/FarBox/tree/master/farbox_bucket/deploy/run/configs 获得,也可以直接下载 https://doc.farbox.org/_attachments/2021-04-21/configs.zip 解压处理。

基于 NAS 的特性,我们需要做一些额外的设置,但仅供参考:
1. 找到 supervisord.conf, 把 ElasticSearch 相关的删除 (它只与全文搜索有关,关闭后可以节省大量的内容),大概内容如下:

[program:elasticsearch]
;environment = JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
command = /elasticsearch/bin/elasticsearch
directory = /elasticsearch/
user = es
autostart = true
autorestart = true
redirect_stderr = true
stdout_logfile = /mt/web/log/elasticsearch.log

2,把 WebServer 的 workers 调整为 1,也能节省运行的内容,位于gunicorn.conf.py 内,比如在 bind = "unix:/tmp/web_server.sock" 这一行的上方添加单独一行 workers = 1

3, 重启 Docker 的容器。

最后,访问 <http://局域网内 ip:7788> 即可,其中 7788 是前面 Docker 设置时候做的端口映射。
此时,一个全新的 FarBox 处于运行的状态,建立的第一个 Bucket 会是管理员 Bucket,建议使用自己老的私钥,而不是页面默认提供的新私钥,以保持一致性。

绑定动态 IP

  1. 首先当前的宽带提供商有独立 IP 提供,比如电信宽带使用桥接的方式,可以有独立的 IP。
  2. 如何『桥接拨号』以及后续如何基于动态 DNS 来获得自己 NAS 的 IP,请自行研究……

动态 IP 对应 DNS 的实现,也可以参考 https://github.com/cuteribs/ribsnetwork/tree/master/ddns

使用 NAS 端备份 FarBox 节点

假设 A 节点,是部署在某个 VPS、服务器上的 FarBox 节点;此时有个 B 节点,是部署在 NAS 上的。
首先,创造一个 Token (就是自己想的随机字符串),作为 A、B 节点同步需要的密码。

在 A 的 FarBox 系统设置中,填入 Server Sync Token
在 B (NSA 节点) FarBox 系统设置中,,填入 Server Sync Token 以及 Server Sync Nodes (就是 A 的节点URL),并且将 Backend Sync 选择为
之后,B 节点 FarBox 的后台任务,每隔 10 分钟会从 A 节点同步数据。

注意:

  1. 这是节点之间 records 的同步,不包含图片、文件(解析后超过 500k 不能作为 record 存储到数据的)
  2. 相同路径的文档,持续更新的时候,不会 新的 record 替换 旧的 record 来保持数据一致性,它们会同时存在,相当于多个历史版本的存在 (但目前并未针对这些存储的数据有特别的呈现方式)。
  3. 按照实际运行的经验来看,整个容器大概会使用 200MB 左右的内存,但具体的仍然以实际情况为准。
Comments
Write a Comment
  • reply

    有nas,可以试试,等教程。。。

    • Hepo reply

      @渡 我的天,我还正在写……

      • reply

        @Hepo 哈哈,正好赶上,新问题,我新建的网站绑定域名时txt记录值不显示了,刚刚升级了。

        • Hepo reply

          @渡 你的 Bucket 应该没有处于登录的状态……

          • reply

            @Hepo 哦哦,搞定了,谢谢大佬!搞糊涂了,原来真的没登录,还有show模版功能多久能支持啊!就等这功能了。。。哈哈

            • Hepo reply

              @渡 『show 模板』是指什么?

  • reply

    直接导入configs设置,启动成功。加上移动端的 Metion 真的可以随时随地写且同步。谢海波老师。

  • wellsleep reply

    NAS 备份 FarBox 的节点是为了异地灾备或者负载均衡嘛?

    刚开始没有布在 NAS 里而选择 VPS 就是感觉映射文件夹可能会很复杂...

    • Hepo reply

      @wellsleep 算是异地灾备吧,主要是快速迁移。以防万一真的服务节点坏了,数据彻底遗失。

      FarBox 的单条数据从逻辑上来说,是没有严格的 update 逻辑的,都是 insert,object_id 永续自增,所以单纯做节点的同步还是容易的。

      之前有 bug,如果已经部署了, 镜像更新一下再重新部署一次;或者直接 update farbox_bucket 也是可以的。