同步云是个好东西。例如在电脑和手机上设置了同步,那么在家的时候用电脑写东西,出门打开手机就能看,或者手机上拍照片,电脑上也直接能看到,典型的例子就是iphone的icloud,不过icloud不支持安卓,所以需要另辟蹊径。之前搭建过nextcloud云网盘,作为网盘使用确实不错,不过同步功能实在是鸡肋,因为我的同步文件需求通常发生在电脑和手机之间,但是nextcloud安卓端的文件不能直接同步,需要手动一个个下载不说,电脑端发生文件更改之后很长一段时间手机都不同步,手动同步都没用,最后直接弃用。

为了补全这个必需的同步功能,找了一圈之后发现坚果云还不错,不过流量限制一个月只有1G,而且我也更倾向于把文件放在自己的服务器,一是自己的服务器自己说了算,流量空间都没有限制,二是隐私数据放在自己的服务器上面也更放心,找了一圈,发现syncthing很合意。

syncthing是一个开源的文件同步客户端与服务器软件,采用Go语言编写。同步速度快,且同步的数据是加密的,同时也不会将所同步的数据放在自己所用设备的其他地方,可以说是很安全了,在配置上也很简单。

syncthing在GitHub上开源,开源地址:https://github.com/syncthing/syncthing

安装syncthing很简单,可以在手机和电脑上直接安装软件,这样两个设备就可以直接同步,不过,如果有一台自己的服务器,那么可以在服务器上也配置syncthing,就可以实现真正的云同步了。

安装

服务器端

syncthing的安装很简单,直接下载二进制文件运行即可,可以在syncthing的releases页面看一下目前的最新版本,然后复制下载链接,不过需要注意的是,syncthing的releases页面有两个版本,一个是测试版,带有红色的Pre-release标识,

syncthing测试版.png

另一个是正式版,带有绿色的Latest release标识,

syncthing正式版.png

建议下载正式版,也就是绿色标识的版本。

复制下载链接之后,运行下列命令:

 1# 进入tmp临时存放文件夹
 2cd /tmp
 3
 4# 下载syncthing,可以暂时不用管版本,等安装好打开之后会自动检查更新
 5wget https://github.com/syncthing/syncthing/releases/download/v0.14.47/syncthing-linux-amd64-v0.14.51.tar.gz
 6
 7# 解压下载下来的压缩包
 8tar xzvf syncthing-linux-amd64-v0.14.47.tar.gz
 9
10# 进入解压出来的文件夹
11cd syncthing-linux-amd64-v0.14.47
12
13# 将syncthing二进制程序复制到/usr/local/bin目录,然后就可以通过“syncthing”命令运行syncthing了
14cp syncthing /usr/local/bin

然后直接运行syncthing

1syncthing

然后Ctrl + C关闭syncthing进行配置修改。

初次运行syncthing会在当前用户的用户目录下生成配置文件,比如现在使用的是root用户:

1vim /root/.config/syncthing/config.xml

大概在第72行找到

1<address>127.0.0.1:8384</address>

改成

1<address>0.0.0.0:8384</address>

之后重启syncthing

1syncthing

现在通过浏览器访问服务器IP地址就可以看到syncthing了:IP:8384

登陆syncthing.png

第一次登陆会提示设置syncthing登录账户密码,在设置中添加账户密码即可

syncthing更改密码.png

syncthing运行的时候会占用终端,此时如果关闭终端,syncthing也会停止运行,可以将syncthing放在后台:

1nohup syncthing &

本地客户端

还是在GitHub下载页面下载相应的客户端,这里用Windows举例:

syncthing的releases页面下载Windows的客户端:

syncthing下载Windows客户端.png

直接运行即可,不过syncthing在后台运行的时候会一直打开一个命令行窗口,关掉窗口syncthing就停止运行,所以可以改为使用SyncTrayzor作为客户端,免除这个麻烦。

可以从SyncTrayzor的releases页面下载客户端,直接下载.exe文件就可以了:

下载synctrayzor.png

下载完直接安装安装打开。

配置

添加同步设备

在同步之前需要进行配置,已确认是和哪个设备进行同步。

两个设备间进行同步,syncthing采用设备标识进行识别,所以先登陆刚才配置的服务端syncthing,点击操作-显示ID

syncthing设备标识.png

复制上面长长的设备标识,然后打开本地的syncthing客户端,点击右下角的+添加远程设备,将设备标识填入设备ID,然后设备名下面填入一个能让自己认得的名字,因为我的服务器在东京,所以填的是Tokyo,也可以填server

syncthing填入设备ID.png

由于之前已经添加过这个设备,所以显示的界面可能不一样,这里只是打开来做个例子。

输入之后,在高级选项卡可以勾选作为中介自动接受,这样以后添加其他同步设备,比如手机,或者添加一个同步文件,就不用在每个设备上都要确认一遍了。如果没有勾选,那么在电脑添加一个同步文件之后,会在服务器端看到是否添加XX文件夹的提示。

输入之后需要在服务器端进行确认添加设备,然后两个服务器就可以同步了。

添加同步文件夹

首先在电脑上加入一个需要同步的文件夹,或者使用现有的文件夹,例如我经常在手机和电脑之间传输文件,那么就新建一个文件夹文件传输,然后进入电脑客户端,点击左边的+添加文件夹,输入刚才新建的文件夹

syncthing添加文件夹.png

需要注意的是文件夹路径是存放文件夹的目录,而文件夹标签是在syncthing上显示的名字,如果不设文件夹标签,那么在右下角的远程设备就会显示成一串字母,同步的设备如果较多,就会变得难以区分,所以为了方便区分还是建议设置好标签。

添加完文件夹之后,打开服务器端的网页就可以看到多了个文件夹,此时文件已经开始同步。

进阶

使用systemd的方式启动

syncthing默认的命令行启动方式会一直占用着终端进行输出,如果使用nohup把syncthing放到后台又不方便管理,一个比较好的解决办法是让systemd接管,systemd是Linux的守护进程,是启动系统时第一个运行的进程,也是关机时最后一个结束的进程,让systemd接管也可以让syncthing实现开机自启。

添加systemd很简单,直接添加一个配置文件:

1vim /usr/lib/systemd/system/syncthing@.service

加入以下内容

 1[Unit]
 2Description=Syncthing - Open Source Continuous File Synchronization for %I
 3Documentation=man:syncthing(1)
 4After=network.target
 5
 6[Service]
 7User=%i
 8ExecStart=/usr/local/bin/syncthing -no-browser -no-restart -logflags=0
 9Restart=on-failure
10SuccessExitStatus=3 4
11RestartForceExitStatus=3 4
12
13[Install]
14WantedBy=multi-user.target

然后保存退出,之后就可以通过systemd进行启动和管理了,不过要注意syncthing的启动命令稍微有点不一样,注意把命令里面的wenjinyu替换成自己的用户名:

 1# 启动syncthing
 2systemctl start syncthing@wenjinyu.service
 3
 4# 查看syncthing运行状态
 5systemctl status syncthing@wenjinyu.service
 6
 7# 停止syncthing
 8systemctl stop syncthing@wenjinyu.service
 9
10# 设置syncthing开机自启
11systemctl enable syncthing@wenjinyu.service
12
13# 关闭syncthing开机自启
14systemctl disable syncthing@wenjinyu.service

或者可以用--user参数来运行

1systemctl --wenjinyu start syncthing

运行状态如果是绿色的active就表示运行成功了

syncting的systemd运行状态.png

使用域名访问

syncthing默认使用http://ip:8384进行访问,而我比较倾向于使用域名访问,而且通过https的方式更安全,因为设置完成之后就可以使用https://域名进行访问了,有兴趣的可以看这篇文章:syncthing使用nginx反代理,绑定域名访问

更新

如果syncthing有新版本的话,webUI是会提示的,不过除非是以root用户运行,否则通过网页版是升级不成功的,因为权限不够,这个时候要么就是下载syncthing的二进制文件,然后手动复制过去,要么就通过终端使用命令行升级

1sudo syncthing --upgrade

升级完重启syncthing就行。

其他

托盘图标

github上面有个项目QSyncthingTray,可以为syncthing配置一个托盘图标,WindowsMacLinux均可以使用,不过只有WindowsMac有打包好的二进制文件,而Liunx需要自己打包。

具体怎么做我也没试过,有兴趣的可以按照教程试试。

  • 参考:

syncthing官方文档:

GitHub:

其他: