Syncthing–数据同步利器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Syncthing–数据同步利器
简介:
⽆论办公、⽂件共享、团队协作还是家庭照⽚、视频、⾳乐、⾼清电影的存储,我们常常都有⽂件同步和存储的需求。

但随着国内各⼤⽹盘的花式阵亡或限速,早已没什么好选择了。

好吧,我已经转战使⽤onedriver了,但是在单位⾥⾯,没有互联⽹,找开源的软件试试⾃⼰搭建吧。

⾃建⽹盘云储存同步服务的软件有很多, Seafile、NextCloud、ownCloud、BT Sync (Resilio Sync) 等。

⽽ Syncthing 则有着⾃⼰⾮常特别的优点,受到众多⾼⼿们的推荐,被誉为是 Resilio Sync / BT Sync 和 Dropbox 的最佳开源替代品。

Syncthing 最⼤的特⾊是采⽤了与 Resilio Sync (BitTorrent Sync) 类似的 P2P 分布式技术,⽆需中⼼服务器,即可让多台设备互相实时同步⽂件。

Syncthing 官⽅⽀持 Linux、Windows、OS X、FreeBSD、Solaris 等系统,并且有第三⽅的 iOS、Android 应⽤。

我选择它还有⼀个原因就是,它只需要⼀个⽂件就可以了。

在linux下只有⼀个⽂件,在windows下也可以只有⼀个⽂件,当然还有⼀个GUI 桌⾯程序。

⼀:官⽹及下载
linux64位就是我主⼒使⽤的,放在⼀个fedora服务器上,不过是跑在docker⾥⾯。

SyncTrayzor是官⽅提供的GUIwindows客户端,⽅便设置开机启动进⾏⾃动同步。

可以缩⼩到任务栏。

实在是⽅便部署到客户端,让它⾃动上传啊。

Portable是免安装版本。

Setup就是安装版本。

X64 X86,根据你的系统,随便下载吧。

⼆:在linux下进⾏安装
1.下载
随你喜欢wget curl winscp了。

解压后只需要⼀个⽂件:
2.配置
2.1复制⽂件
cp syncthing /usr/bin/syncthing
只需要复制这⼀个⽂件,其他的可以删了。

2.2修改权限
chmod +x /usr/bin/syncthing
加上可执⾏权限
2.3运⾏
./usr/bin/syncthing
就这⼀个⽂件,直接执⾏。

它会⾃动⽣成配置⽂件,还不能先改,只好运⾏⼀遍,等它出现
[CKEAY] 17:44:53 INFO: Detected 1 NAT service
[CKEAY] 17:45:39 INFO: Joined relay relay://36.229.223.123:22067
⼤概就是已经⽣成配置⽂件,并运⾏起来了。

ctrl+c 停⽌这个进程。

2.4修改配置⽂件
sed 's/127.0.0.1/0.0.0.0/g' /root/.config/syncthing/config.xml
默认配置⽂件在/root/.config/syncthing/config.xml,默认监听⽹络是127.0.0.1,远程不能访问,所以⽤sed命令修改为0.0.0.0 3.运⾏
./usr/bin/syncthing
再次运⾏起来。

4.测试
只要没出乱七⼋糟的错误,就算安装成功了。

⼆:在Docker中安装
1.下载
docker pull syncthing/syncthing
2.运⾏
docker run -it -p 8384:8384 -p 22000:22000
-v /storage/conf/syncthing:/var/syncthing/config
-v /storage/data/syncthing:/var/syncthing
syncthing/syncthing:latest
官⽅给的运⾏参数就是这样了。

/storage/conf/syncthing,配置⽂件存储位置。

/storage/data/syncthing,数据存储主⽬录。

两个⽬录根据⾃⼰的情况替换。

8384 22000,两个端⼝⼀般不占⽤,直接运⾏。

3.测试
和linux测试⼀样。

只要没出乱七⼋糟的错误,就算安装成功了。

三:在windows中安装
1.下载
windows下我们就不使⽤linux那样的单⽂件版了。

⽬前最新的应该是这个版本。

如果你是32位的系统,请下载。

2.运⾏
解压后找到SyncTrayzor.exe,双击运⾏即可
3.配置
还是⽼问题,默认只有127.0.0.1,localhost可以访问,没有远程访问权限。

照下图,右边的设置,⽤来修改图形界⾯监听地址,并且可以设置随开机⾃动启动
四:基本配置
1.配置简介
我们要配置⾃动同步,那么就要有2台电脑运⾏syncthing,相互要能连通,并配置相同ID的共享⽂件夹。

每台电脑,第⼀次运⾏syncthing时,会⾃动⽣成随机ID,并注册ID,⽹络地址到全球发现服务器。

添加远程设备时,去全球发现服务器,来查ID,取得远程设备的⽹络地址。

所以,在windows不要复制解压运⾏过的,只复制压缩包,解压,重新⽣成新的ID。

后⾯的例⼦以2台设备同步⼀个⽂件夹为例讲解。

设备1:WORKER(操作机,本地设备),设备2: NUC(家庭服务器,放在路由器边上,没键盘,没⿏标,只接了HDMI到电视,远程设备)同步⼀个⽂件夹,WORKER路径:D:\PythonTest\flasktest ,nuc路
径:/var/syncthing/temp/app。

WORKER操作系统windows,NUC操作系统fedora,syncthing运⾏在docker中,映射容器路
径/var/syncthing到物理路径/storage,那么最后的共享⽂件夹,即NUC物理机的/storage/temp/app。

对这些不理解的,⾃⼰慢慢补docker的知识。

忽略NUC运⾏的DOCKER。

2.配置中⽂.
如下图,先点English,在弹出的下拉框,点击Chinese(china),就变成中⽂了。

3.配置WEB安全
我们输⼊地址:8384,默认设置,syncthing只允许localhost本地登录,但是我们为了⽅便配置,已经给它改了监听0.0.0.0,任意地址都可以访问,貌似不安全啊。

那么我们就配置⼀下web登录密码:
访问web页⾯后在右上⾓,操作--设置--图形⽤户界⾯
图形管理界⾯⽤户名
图形管理界⾯密码
这两项就可以设置图形界⾯登录账户密码了。

使⽤加密连接到图形管理页⾯
如果你怕被监听到,开启加密也可以。

每个运⾏syncthing的机器(WORKER NUC)都要单独设置。

4.配置设备名称
访问web页⾯后在右上⾓,操作--设置--常规--设备名
为了⽅便使⽤,还是设个设备名吧,不然貌似是使⽤ID前⼏位的随机字符串做设备名,机器多了,可真不⽅便。

还是每个设备设置。

五:添加远程设备
1.获取远程设备ID
在WORKER上添加NUC。

你时去NUC抄,还是远程登录看?当然时远程登录看了,安装的时候,我都设置了任意IP监听登录。

访问NUCweb页⾯后在右上⾓,操作--显⽰ID,
BTQMGH2-JBPTQGX-HQWBLLW-EBEQJUC-NMZOUMQ-3TLYVSV--
这⼀长串就是远程设备的ID。

下⾯的⼆维码时⽅便android⼿机端使⽤的扫码添加。

2.本地设备添加远程设备
访问WORKERweb页⾯(或SyncTrayzor窗⼝)后在右下⾓,添加远程设备
在设备ID,填上刚复制过来的远程设备ID。

下⾯有两个选项介绍⼀下:
作为中介,syncthing使⽤了P2P技术来实现⽂件同步,现在我们实验的时候时2台设备,同步⼀个⽂件夹,如果加⼊新设备,是要分别给这两台设备配置⼀个新的远程设备。

如果开启作为中介,那么,WORKER,会⾃动添加,或称为同步NUC的远程设备(新设备)。

⾃动接受,如果在NUC创建了⼀个共享⽂件夹,并共享给WORKER,⽆需WORKER选择接受,即在默认⽬录,创建共享⽂件夹,并同步。

根据⾃⼰的需要来选择开启吧。

我都没开启,因为我实验2台设备,部署也就3-4个设备。

3.等待
因为默认使⽤全球发现服务器,受⽹速影响,还是要等等的。

注意NUC的web界⾯。

出现新设备,就是已经连上了,选择添加设备,就会⾃动把WORKER,作为远程设备,连接到NUC。

此时两台设备web页⾯,右下⾓部分,都会出现远程设备(即对⽅)
六:添加同步⽂件夹
1.删除默认⽂件夹
貌似新装,管理页左边都会出现 default ***
点击⽂件夹名--下拉框右下部分--选项--移除--确认
删除是因为路径问题,它们分别⽣成在每台设备的默认共享⽬录下,基本不是我们需要的路径。

2.本地设备添加⽂件夹
管理页中间部分,添加⽂件夹。

⽂件夹路径,估计要你⾃⼰写⼀下了(D:\PythonTest\flasktest ),到资源管理器去复制也可以的。

关键设置⽂件夹ID(app),说明在所有从设备上必须⼀致,也就是在我们这多个设备同步时,都⽤这个ID,来同步这个⽂件夹。

下⾯还有共享给远程设备(NUC),勾选远程设备的名字就好了。

其中的⾼级设置,看⼀下也能明⽩。

最后保存即可。

七:给远程设备添加同步⽂件夹
1.还是等待,我们使⽤的是全球发现服务器
直到这个在NUC的管理页⾯出现,点击添加即可。

2.配置远程设备共享⽂件夹路径
/var/syncthing/temp/app
这个应该时前期就决定好的,这时填⼀下就可以了,记得勾选下⾯的共享给WORKER。

不勾选的时候是单向同步?
3.配置⽂件夹 ID
app
这个也是在本地设备配置⽂件夹时给定的ID
4.查看同步状态
看下⾯两个图,区别是远程设备是否显⽰同步完成,因为使⽤P2P 分布式技术,所以没有中⼼服务器,那么每台设备,都即是客户端,⼜是服务器。

⽂件夹上的同步完成,仅代表本地客户端已经和本地服务器同步了。

(两台设备没完成完全同步)
远程设备上的同步完成,代表本地客户端和这个远程服务器同步了。

(两台设备完成完全同步)
有的时候那个同步完成,会显⽰同步中。

⼋:内部⽹络使⽤(固定IP),⽆法连接全球发现服务器
1.简介
当我们在内部⽹络使⽤syncthing时,因为没有办法连接全球发现服务器,那么我们该如何配置呢?这章节说明⼀下在固定IP的情况下,我们可以使⽤IP地址来配置互相发现。

只要能互相ping通,跨⽹段也没关系的。

我们在官⽅的DOCKER运⾏命令中可以看出映射两个端⼝出来,8384和22000,8384是我们⽤来web控制的,那么22000就是syncthing的监听端⼝了。

2.配置
看下⾯两图,这时编辑已经建⽴连接的远程设备,新建设备时也⼀样,我在地址列表中填⼊了远程设备的协议,IP,端⼝。

看说明,host计算机名字也可以,域名应该也可以。

dynamic,就是⾃动发现,也是默认值,难道时⾃动扫描么?删除也可以。

3.验证连通
下⾯两图,都是连接断开的状态,不过,我这两台设备,都能连接互联⽹,估计获取了发现服务器记录的地址。

但这并不影响我们做测试。

第⼆张图看出地址多了⼀⾏我们配置的tcp://192.168.1.4:22000
下⾯两图是使⽤dynamic时的连通状态,真不知道时什么IP地址。

下⾯两图就是都配置对⽅地址后的连通状态了。

使⽤对⽅的⽹络地址连接。

九:内部⽹络使⽤(动态IP),⽆法连接全球发现服务器
1.简介
上⼀章节我们使⽤固定ip,可以通过填写对⽅的⽹络连接参数来配置远程设备。

如果同⽹段动态IP,应该也可以⽤host计算机名来配置远程设备。

那么另⼀个⿇烦⼜跳出来了,如果是不同⽹段,⼜是动态IP,怎么办?连接参数中IP是变动的,计算机名时⽆法⼴播解析的。

或许可以建个DNS服务器来实现。

太扯了。

⼜可能影响原来的DNS解析。

Syncthing Discovery Server---syncting发现服务器来解救你,你这么复杂的运⾏环境,相信会有⼀个⼩型服务器的,只要有⼀个固定IP,就可以了。

⼏⼗台设备,⼏百台设备,都可以注册到这个发现服务器,替代全球发现服务器。

2.命令参考
stdiscosrv [-cert=] [-db-dir=] [-debug] [-http] [-key=] [-listen=
] [-metrics-listen=
] [-replicate=] [-replication-listen=
]
-cert=
证书⽂件(default “./cert.pem”).
-db-dir=
数据存储⽬录 (default “./discovery.db”).
-debug
debug模式输出
-http
使⽤http协议还要求在https代理后⾯ (behind an HTTPS proxy).
-key=
key⽂件 (default “./key.pem”).
-listen=
监听端⼝ (default “:8443”).
-metrics-listen=
不知道是什么意思 (default disabled).
-replicate=
复制另⼀台发现服务器?
-replication-listen=
另⼀台发现服务器监听端⼝?
3.运⾏
syncthing真是良⼼,也不⽤复杂的安装,linux下也不⽤编译,不论linux还是windows,都是⼀个⽂件,直接运⾏。

⽽且这个发现服务器,看着挺多的运⾏参数,其实⼀个也不⽤写。

它和单⽂件的客户端⼀样,直接运⾏就可以了,⾃动⽣成各个⽬录和⽂件。

windows下是这样
linux下是这样
如果你有⾃⼰的证书,那么可以这样运⾏,把证书路径作为参数,启动发现服务器。

stdiscosrv -cert=/path/to/cert.pem -key=/path/to/key.pem
4.⽣成节点配置URL
如果您使⽤的是⾮CA签名证书,则必须将该设备ID(指纹)交给使⽤发现服务器URL的客户机。

这个客户机的意思时对发现服务器,所有运⾏syncthing的节点都是发现服务器的客户机。

⾮CA签名的证书,⾃动⽣成的⼀定时⾮CA签名证书。

官⽅给的⽰例是这样的
看到那串像序列号的东西,就是设备ID,启动发现服务器的时候,它也显⽰出来了。

记下来,⽤来组合我们⾃⼰的发现服务器地址。

本来就内⽹了,域名就算了,可以使⽤IP地址。

对应上⾯启动的两个发现服务器。

windows:IP 192.168.1.4
linux: IP 192.168.1.3
如果你有CA签名的证书,那么URL就不需要ID参数了。

4.给节点配置URL
管理界⾯,右上⾓操作--设置--连接
全球发现服务器,删除原来的default,填上我们⽣成的节点配置URL。

提⽰重启syncthing,重启⼀下就可以了。

5.关闭⼿动指定的远程设备地址
远程设备--选项--地址列表
原来的:tcp://192.168.1.4:22000,dynamic
改为:dynamic
6.测试
其实就是看远程设备的地址,原来我们使⽤defalut全球发现服务器的时候,远程设备地址,反正是我不认识的地址。

当我们配置了远程设备IP地址之后,远程设备地址,是我们配置的远程设备地址。

现在我们取消了远程设备地址,使⽤了我们⾃⼰的发现服务器地址。

也就是syncthing,把⾃⼰注册到我们⾃⼰的发现服务器上,并根据ID从我们⾃⼰的发现服务器地址,查找远程设备地址。

如果远程设备地址,是我们的内部⽹IP地址,并可以显⽰同步完成。

那就⼀切OK了。

结语:
syncthing,使⽤⽅便,配置⽅便,在各⼤⽹盘纷纷关停,收费,限速………………因素下。

⾃⼰搭建⼀个,也挺好。

或者百度搜索5T onedriver已失效。

我的⽤途呢,其实是在进⾏软件开发的时候。

worker编写了源代码,server⽣成docker,以前⽤ftp,sftp上传,然后docker build。

⽂件少的时候还好,⽂件多的时候,⼜覆盖,那是⼀个慢啊。

都在⼀个局域⽹,⼜没必要使⽤github的⾃动构建,⽤⾃动构建,还要等docker hub 服务器空暇。

现在是把woker的源码⽂件夹,同步到server的docker build⽬录。

docker build的时候把源码copy进镜像。

编译前还可以到web管理界⾯扫描同步⼀下。

尤其时源码只改⼏个⽂件的时候,同步很快。

⽅便了我这个伪全栈的开发过程。

个⼈现在⽐较喜欢在服务器上使⽤docker作为服务。

官⽅提供了linux_syncthing的dockre镜像。

我还需要⼀个linux_stdiscosrv的镜像。

这⼏天写好了,把地址给⼤家。

写着也挺快,但这篇教程,⼜臭⼜长,让我休息⼀下吧。

更新docker-compose
更新⼀个docker-compose⽂件,⽤来使⽤docker-compose启动。

同时包含syncthing 和 discosrv。

不需要discosrv的可以删掉。

version: '2'
services:
syncthing:
image: syncthing/syncthing
container_name: syncthing
volumes:
- syncthing_con=/var/syncthing/config
- /opt/data=/var/syncthing"]
ports :
- "8384:8384"
- "22000:22000"
- "21027:21027/udp"
networks:
- sync_net
restart: always
discosrv:
image: syncthing/discosrv
container_name: discosrv
volumes:
- discosrv_con=/var/stdiscosrv
ports :
- "19200:19200"
- "8443:8443"
networks:
- sync_net
restart: always
networks:
sync_net:
volumes:
syncthing_con:
discosrv_con:
本⼈补充⼀点,window 下syncthing应该是不能⾃动更新的,所以有新版本的时候会打不开可以先关闭然后软件,管理员运⾏就可以⾃动更新了。

相关文档
最新文档