官方网站:https://syncthing.net
github项目地址:https://github.com/syncthing/syncthing
docker镜像地址:https://hub.docker.com/r/linuxserver/syncthing
Syncthing是一个免费开源的文件同步工具,可以帮助你在不同的电脑、手机等之间同步文件/文件夹。安装好了Syncthing后,会生成一个唯一的ID,在另一台安装了Syncthing上添加这个ID就可以同步了。
Syncthing所有的信息通讯都使用TLS进行加密,加上Syncthing同步文件不像网盘那样还是经过中转服务器,所以安全性是非常好的。Syncthing还有强大的版本控制:回收站式版本控制、简易版本控制、阶段版本控制、外部版本控制 。这四种版本控制基本上可以满足绝大数人的数据恢复需要。
Syncthing支持Linux 、Windows 、Mac OS X、Android等,PC、手机等可以安装Syncthing,加上Syncthing使用的方便快捷,所以如果我们有一台24小时保持开机的电脑或者是VPS主机,那么我们就可以利用Syncthing轻松搭建一个私人云存储了。
Docker部署
docker pull syncthing/syncthing
docker run -p 8384:8384 -p 22000:22000/tcp -p 22000:22000/udp -p 21027:21027/udp \
-v /wherever/st-sync:/var/syncthing \
--hostname=my-syncthing \
syncthing/syncthing:latest
docker-compose部署
把要同步的资料夹挂载到volumes。此处Syncthing的顶层资料夹是/var/syncthing。Network mode使用host mode。
version: "3"
services:
syncthing:
image: syncthing/syncthing
container_name: syncthing
hostname: my-syncthing
environment:
- PUID=1000
- PGID=1000
volumes:
- /home/user/Syncthing:/var/syncthing
network_mode: host
restart: unless-stopped
手机版APP
Android到 F-Droid 或 Google Play下載
iOS目前沒有官方APP,仅有第三方开发的付费软件 Möbius Sync
客户端其他下载地址
安卓客户端下载:
https://github.com/syncthing/syncthing-android
Windows客户端下载:
https://github.com/Martchus/syncthingtray
Windows客户端下载(推荐):
https://github.com/Martchus/syncthingtray/releases/download/v1.4.13/syncthingtray-qt5-1.4.13-i686-w64-mingw32.exe.zip
“我不是咕咕鸽”的syncthing搭建操作视频:
https://youtu.be/DUC0wGQMnJs?si=JwwtY3biGSKC6Y0V
Syncthing初始化设置
Syncthing预设同步模式是双向的,只要二台装置在线上,一边新增的档案就会马上传送到另外一边。删除的话两边都会同时删除。
让我们先设定电脑上的Snycthing程序,再设定手机上的,测试二者同步情况。
请让二个装置处于同一个Wifi环境,确认Linux电脑上的Snycthing已经运行,浏览器登录http://localhost:8384
首先按照指示到设定 → GUI,给Syncthing设定一组帐号密码
点选储存后页面会重新载入,以刚刚新增的帐号密码登入网页界面。
现在是什么都没有设定的状态。Syncthing左边的面板是电脑要分享的资料夹,右上角的面板是本机上传的状态,右下角远端装置的状态。
点选左边 Default Folder,按编辑,你会看到它用于同步的资料夹路径是为/home/user/Sync,Sync就是用于存放同步档案的资料夹。
你可以自行新增其他同步资料夹,比方说新增~/Root路径,即指向/home/user/下面的资料夹Root。
另外,Syncthing服务器的设定档和log会存在/home/user/.local/share/state
Syncthing在同步的时候若遇到同样名称的文件会直接盖掉,你可以启用“文件版本控制”让文件不会马上被删除。
开启文件管理员,切换到要同步的/home/user/Sync资料夹,先放个文件进去
接著开放电脑防火牆通讯端口
sudo ufw allow 22000/tcp
sudo ufw allow 22000/udp
sudo ufw allow 21027/udp
sudo ufw reload
在手机上开启Syncthing APP,左边滑进来,点选“显示装置识别码”,复制下来
在Syncthing网页介面点选右下角的“新增远端装置”,填入手机上显示的识别码
点选 Default Folder,点编辑,切换到“正在共享”,勾选跟手机分享资料夹。
点选Syncthing网页左边的“全部重新扫描”尝试同步到远端装置
手机应该会收到通知,点选同意连线
手机会收到新增资料夹的请求
给资料夹取名,再点选资料夹图示(红框处),设定手机上用于存放同步的资料夹。请在手机内部储存空间建立Syncthing/Sync结构的资料夹,再点选确定。
几秒后文件就会同步到手机上了。网页界面显示“最新”代表双方都已完成同步。
日后你想新增第三个装置,同样也是到电脑上的Syncthing点选“新增远端装置”。电脑的话记得开启防火牆。
- Syncthing的同步连线方式
本节介绍Syncthing的同步原理和连线方式。每个Syncthing装置都有一组随机产生的识别码。Syncthing在传输资料的时候会使用TLS加密连线。
首先是Wifi连线,Syncthing 预设会启用探索模式,二个的装置在同一个Wifi下就能互相发现对方,进行P2P。
但若是位于不同网路(比方说手机连4G,电脑位于NAT后面),那就不可能P2P。这时连线高机率走官方中继伺服器。尽管可以连线但速度会很慢。
官方文件推荐的做法是端口转发(port forwarding),再让你的电脑取得公网IP,使其能从外网存取。这样就不需要走走官方中继服务器也可以让二个装置P2P,速度比较快。
而我是使用内网穿透的方式,来让二个装置P2P。
- 内网穿透软体搭配Syncthing使用
我希望Syncthing不只是可以在内网传输,在外网也可以使用。甚至不需要Wifi也能连线。
就像使用BT软件一样,要让不同网路的二个装置P2P,你就得将装置暴露到公开网路。
但是把电脑暴露给公网很危险,而且若有人可以整天扫我的通讯端口也怪可怕的,我不想让装置上的Syncthing服务器可以被任意探索。
要解决以上问题,可以用内网穿透软件TailScale或ZeroTier,用VPN的机制让所有装置处于虚拟内网,就不需要把电脑暴露给公共网路了,也不需要让Syncthing开自动探索,加强安全性。
在装好内网穿透软件后,回到Syncthing网页介面,点选右上角操作 → 设定 → 连线,关闭所有自动探索选项。
刚刚设定的手机同步资料夹应该不会断掉,只不过你得点选远端装置,编辑 → 进阶,把“位址”改成tcp://装置的虚拟区域IP才可以继续同步。
- 设定Syncthing单向同步
跟双向同步不同,“单向同步”就是指定一个资料夹,将其做单向传输。
比方说电脑新增一个~/Backup资料夹,点选编辑 → 进阶,将资料夹类型设为“仅接收”。这样在手机新增该资料夹之后,就只会接收手机传过来的档案,而不会把电脑端的文件也同步到手机上。