同步云是个好东西。例如在电脑和手机上设置了同步,那么在家的时候用电脑写东西,出门打开手机就能看,或者手机上拍照片,电脑上也直接能看到,典型的例子就是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
标识,
另一个是正式版,带有绿色的Latest release
标识,
建议下载正式版,也就是绿色标识的版本。
复制下载链接之后,运行下列命令:
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登录账户密码,在设置
中添加账户密码即可
syncthing运行的时候会占用终端,此时如果关闭终端,syncthing也会停止运行,可以将syncthing放在后台:
1nohup syncthing &
本地客户端
还是在GitHub下载页面下载相应的客户端,这里用Windows举例:
在syncthing的releases页面下载Windows的客户端:
直接运行即可,不过syncthing在后台运行的时候会一直打开一个命令行窗口,关掉窗口syncthing就停止运行,所以可以改为使用SyncTrayzor
作为客户端,免除这个麻烦。
可以从SyncTrayzor的releases页面下载客户端,直接下载.exe
文件就可以了:
下载完直接安装安装打开。
配置
添加同步设备
在同步之前需要进行配置,已确认是和哪个设备进行同步。
两个设备间进行同步,syncthing采用设备标识进行识别,所以先登陆刚才配置的服务端syncthing,点击操作
-显示ID
:
复制上面长长的设备标识,然后打开本地的syncthing客户端,点击右下角的+添加远程设备
,将设备标识填入设备ID
,然后设备名
下面填入一个能让自己认得的名字,因为我的服务器在东京,所以填的是Tokyo
,也可以填server
由于之前已经添加过这个设备,所以显示的界面可能不一样,这里只是打开来做个例子。
输入之后,在高级
选项卡可以勾选作为中介
和自动接受
,这样以后添加其他同步设备,比如手机,或者添加一个同步文件,就不用在每个设备上都要确认一遍了。如果没有勾选,那么在电脑添加一个同步文件之后,会在服务器端看到是否添加XX文件夹的提示。
输入之后需要在服务器端进行确认添加设备,然后两个服务器就可以同步了。
添加同步文件夹
首先在电脑上加入一个需要同步的文件夹,或者使用现有的文件夹,例如我经常在手机和电脑之间传输文件,那么就新建一个文件夹文件传输
,然后进入电脑客户端,点击左边的+添加文件夹
,输入刚才新建的文件夹
需要注意的是文件夹路径
是存放文件夹的目录,而文件夹标签
是在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
就表示运行成功了
使用域名访问
syncthing默认使用http://ip:8384
进行访问,而我比较倾向于使用域名访问,而且通过https的方式更安全,因为设置完成之后就可以使用https://域名
进行访问了,有兴趣的可以看这篇文章:syncthing使用nginx反代理,绑定域名访问
更新
如果syncthing有新版本的话,webUI是会提示的,不过除非是以root用户运行,否则通过网页版是升级不成功的,因为权限不够,这个时候要么就是下载syncthing的二进制文件,然后手动复制过去,要么就通过终端使用命令行升级
1sudo syncthing --upgrade
升级完重启syncthing就行。
其他
托盘图标
github上面有个项目QSyncthingTray,可以为syncthing配置一个托盘图标,Windows
、Mac
、Linux
均可以使用,不过只有Windows
和Mac
有打包好的二进制文件,而Liunx
需要自己打包。
具体怎么做我也没试过,有兴趣的可以按照教程试试。
- 参考:
syncthing官方文档:
- 1.1. Getting Started — Syncthing v0.14 documentation
- 2.18. Starting Syncthing Automatically — Syncthing v0.14 documentation
- 2.19. Community Contributions — Syncthing v0.14 documentation
GitHub:
- syncthing/syncthing: Open Source Continuous File Synchronization
- syncthing/syncthing@.service at master · syncthing/syncthing
其他: