作者:唐尸三摆手
一、前言
在使用TrueNAS之前,我一直使用的同步应用是群晖的Drive套件。但只能在群晖NAS和PC之间同步文件,手机端仅能同步相册,这就导致我微信中的文件只能通过数据线拷贝出来之后再进行整理。而Syncthing可以非常方便的在手机端指定文件夹进行同步。等有时间的时候再统一进行整理。听说Drive移动端出了新版本,不知道是否有所改进,但我已经用习惯了Syncthing,也懒得换回去。关于Syncthing的内容会比较多,我将它分成了两个篇章。
第一篇:Synchting的部署(Syncthing及其发现和中继服务器)
第二篇:同步体系规划和Synchting的使用
二、部署Syncthing
1、到hub.docker网站搜索Syncthing,可以查找到syncthing/syncthing或者linuxserver/syncthing,这两个都是官方认可的镜像,部署方式也大同小异。
这里是官方的Docker compose部署参数:
version: "3"
services:
syncthing:
image: syncthing/syncthing
container_name: syncthing
hostname: my-syncthing
environment:
- PUID=1000
- PGID=1000
volumes:
- /wherever/st-sync:/var/syncthing
ports:
- 8384:8384 # Web UI
- 22000:22000/tcp # TCP file transfers
- 22000:22000/udp # QUIC file transfers
- 21027:21027/udp # Receive local discovery broadcasts
restart: unless-stopped
先解释一下这段代码:
其实只需要关注environment、volumes、ports部分所对应的代码。
environment就是设置环境变量,Syncthing需要设置两个环境变量PUID和PGID,这两个环境变量是用来指定docker容器拥有哪个用户和用户组来的权限,默认的代码里给的变量值是1000,在旧版的TrueNAS Scale中建立的第一个用户和用户组的ID默认是1000,但在目前新版本的TrueNAS Scale中第一个用户的用户ID和用户组ID默认是3000。所以在部署的时候要注意改为3000。如果新建用户和用户组的时候手动设置了用户和用户组的ID,这里就按照手动设置的ID来填写即可。
volumes对应的是需要同步的文件夹,为了方便,我把所有需要同步的文件都放在同一个文件夹中,其实也可以设置多个映射路径,这个看个人的需要。
ports对应的是端口映射,docker实质上就是一台轻量化的虚拟机,在docker的运行机制下外部设备是没有办法直接访问docker的内部端口,因此需要把docker内部的端口映射到宿主机,也就是你的NAS的端口上(有点DDNS端口转发的意思),这时候访问NAS的ip+端口号就相当于访问docker内部的端口。
2、登录TrueNAS Scale,在左侧选择“应用”,点击右上角蓝色的“启动Docker镜像”

3、在“应用名称”中自定义一个方便自己识别的应用名称,应用名称有格式要求,如果出现提示按照要求格式修改下,这里我填写的是syncthing。在下方“Image repository”中填写镜像名称,这里我填写的是官方的镜像“syncthing/syncthing”,镜像名称必须与hub.docker网站上的名称一致,版本使用默认的“latest”

4、继续往下,来到“Container Environment Variables”,设置环境变量,点击右侧的“添加按钮”,添加两个环境变量PUID、PGID,对应的ID都是3000,需要注意的是这个用户和用户组对你要同步的文件夹要有读写权限,否则无法同步。

5、继续往下,来到“Port Forwarding”,设置端口映射,点击右侧的添加按钮,这里一共需要映射4个端口号
主机端口,容器端口,端口协议
9001,8384,TCP
22000,22000,TCP
22000,22000,UDP
21027,21027,UDP
“Container Port”中填写的是docker容器的端口号,对应的是部署代码中冒号后面的数字,这个端口号不允许随便调整,“Node Port”是NAS主机的端口号,对应的是部署代码中冒号前的数字,可以根据自己的端口使用情况进行调整,但在TrueNAS Scale中,这个端口号必须大于等于9000。这里8384所映射出的9001端口,就是日后从浏览器访问的端口。

前两个端口协议直接用默认的TCP协议即可,后面两个端口的协议要修改为UDP。

6、继续往下,来到“存储”,设置文件夹映射,“Host Path”是指你在NAS中的目录,可以根据自己实际的设置情况进行选择。“Mount Path”则是docker内部的路径,我官方的代码略微进行了调整,将/var/syncthing/work映射到NAS的/mnt/pool/work上,/var/syncthing/photo映射到NAS的/mnt/pool/photo,这样后续我可以按照这样的方式添加其他数据集。


映射配置文件夹
这里还有一个重要的文件夹在代码中没有提及,那就是Synchting的配置文件夹,如果不设置这个文件夹的映射,那么在重启docker容器只有,Syncthing所有之前调整过的配置都会丢失,因此我们需要对配置文件进行映射
“Host Path”中选择NAS的/mnt/pool/docker/syncthing,“Mount Path”中填写/var/syncthing/config。

7、之后其余设置都不需要更改,直接拉到最后,选择“保存”。

这时系统应该会开始拉取镜像,并进行部署。如果拉取失败可以多尝试几次。或者使用魔法。

8、当docker应用的标签由灰色的“DEPLOYING”变为绿色的“ACTIVE”时,说明部署成功了。之前设置的NAS在局域网中的IP地址是192.168.0.10,刚才为Synchting映射的web访问端口是9001,那么我们从浏览器地址栏中输入:http://192.168.0.10:9001,就可以开始使用Syncthing了。


默认情况下Syncthing会使用公开的发现和中继服务器,这些服务器大多位于国外,在我的网络环境下,同步速度最高只有200KB/S,显然这样的同步速度远远达不到我的使用要求。按理说局域网中的机器应该能够直连,但我发现,局域网中的两台设备也经常会情不自禁的连上公开的服务器进行同步,我并不清楚其中的原因,因此我决定自己搭建,让设备尽量在局域网内直连。

三、部署发现服务器
下面是docker-compose的部署代码:
syncthing_discovery_server:
image: syncthing/discosrv
container_name: syncthing-discovery-server
command: -debug -listen=":8443"
environment:
- PUID=1000
- PGID=1000
volumes:
- ./syncthing/discosrv:/var/stdiscosrv
ports:
- 8443:8443 # Listen address (default “:8443”)
restart: always
首先需要在TrueNAS Scale中给发现服务器设置一个数据集,用于映射发现服务器的/var/stdiscosrv文件夹,这个数据集需要有相应的读写权限。相关操作可以查看之前的内容。这里我建立了一个“discosrv”数据集

1、回到应用部署界面,“应用名称中”填写一个方便识别的名称,这里我填写的是:syncthing-discovery,“Image repository”中填写镜像名称:“syncthing/discosrv”。

2、在“Container Environment Variables”中添加两个环境变量,PUID和PGID,变量值是在前文章中的用户和用户组的ID:3000。

3、在“Port Forwarding”设置端口映射,“Container Port”容器端口为8443,不要填错,“Node Port”节点端口我这里设置为9443,也可以根据自己需要修改为其他9000以上没有被占用的端口号。“协议”保持默认的TCP即可。

4、在“存储”中设置文件夹映射,“Host Path”中选择刚才我们已经建立好的“discosrv”数据集。“Mount Path”中填写docker容器内部的文件夹“/var/stdiscosrv”,这个同样不能修改。

5、其余设置均保持默认,拉到最后点击“保存”,待应用右上角的状态变为绿色的“ACTIVE”之后,部署就算完成了。

四、部署中继服务器
同样的,需要提前在TrueNAS Scale中给中继服务器准备一个数据集,用于映射中继服务器的/var/strelaysrv文件夹。

1、回到应用部署界面,“应用名称中”填写一个方便识别的名称,这里我填写的是:syncthing-relay,“Image repository”中填写镜像名称:syncthing/relaysrv,这个不能填错。

2、环境变量的设置与发现服务器一样,PUID和PGID都是3000。

3、需要映射的端口是22067,因为已经大于9000了,所以这里容器端口和节点端口我都填写了22067。协议同样用默认的TCP即可。

4、在“存储”中设置文件夹映射,“Host Path”中选择刚才我们已经建立好的“relaysrv”数据集,“Mount Path”中填写docker内部的文件夹“/var/strelaysrv”,这个同样不能修改。

5、其余设置均保持默认,拉到最后点击“保存”,待应用右上角的状态变为绿色的“ACTIVE”之后,部署就算完成了。

五、下期预告
Syncthing是一个功能相当强大的同步软件,部署只是成功的第一步,下一篇会介绍一下Syncthing的使用,以及如何使用我们自己搭建的发现服务器和中继服务器,还有如何去规划自己的数据,形成一个高效的同步体系。
阅读更多网络存储精彩内容,可前往什么值得买查看


财经自媒体联盟

4000520066 欢迎批评指正
All Rights Reserved 新浪公司 版权所有