如何在 Linux 上使用syncthing在不同设备之间保持文件和目录同步
Syncthing被定义为一个连续的文件同步程序:它可以用来保持文件和目录在不同设备或“节点”之间同步。该应用程序使用 TLS 作为加密方法,它及其协议是免费和开源软件。使用 Syncthing 时,我们的数据保留在我们的设备上,并直接传输到目的地,而无需中继中央服务器(点对点)。在本教程中,我们将了解如何在 Linux 上安装、配置和使用 Syncthing。
在本教程中您将学习:
如何在最常用的 Linux 发行版上安装 Syncthing
如何设置防火墙以使 Syncthing 正常工作
如何在两个设备之间共享和保持目录同步
如何在用户登录时自动启动 Syncthing 守护进程
软件要求
安装
基本上,我们可以使用两种方法在我们最喜欢的 Linux 发行版中安装 Syncthing:我们可以使用本机存储库中打包的版本,或者我们可以从官方 Syncthing 网站下载 tarball。此外,仅当使用 Debian 或 Ubuntu 时,我们才可以添加官方 Syncthing 存储库作为附加软件源并从中安装软件包。
安装本机版本
Syncthing 在最常用的 Linux 发行版的本机存储库中可用,例如 Fedora、Debian/Ubuntu 和 Archlinux,因此我们可以使用我们最喜欢的包管理器轻松安装它。这始终是获取软件的推荐方式;唯一的问题是,尤其是在 Debian “stable” 等发行版上,存储库可能包含过时版本的软件包。要在 Fedora 上安装 Syncthing,我们可以使用 dnf 包管理器,并发出以下命令:
$ sudo dnf install syncthing
相反,在 Debian 及其许多衍生版本上,我们可以运行:
$ sudo apt install syncthing
在 Archlinux 上,我们可以使用 pacman 来安装syncthing包,它是“Community”存储库的一部分。获取该软件只需启动我们的终端模拟器并运行:
$ sudo pacman -Sy syncthing
下载 tarball
安装 Syncthing 的第二种方法是从官方网站的下载部分下载专用的 Linux tarball。我们应该下载包含与我们系统架构兼容的版本的存档。如果我们使用的是Debian或Ubuntu,我们还可以将官方存储库添加到我们的软件源中,然后使用apt
进行安装。
设置防火墙
在运行 Syncthing 之前,为了使其正常工作,我们必须设置一些防火墙规则,以允许传入流量通过某些端口。 Firewalld 和 Ufw 防火墙管理器的最新版本已经附带了 Syncthing 的预配置服务(这里的“服务”一词是指一组已定义的规则)。如果使用 Firewalld,要激活服务,从而启用通过所需端口的流量),我们应该运行:
$ sudo firewall-cmd --permanent --add-service=syncthing && sudo firewall-cmd --reload
请注意,使用上面的命令,由于未指定区域,因此服务将添加到“默认”区域。如果我们想将服务添加到特定区域,我们应该使用 --zone
选项指定它,并将区域名称作为参数传递。要收集有关该服务的信息,并查看其中包含哪些端口,我们可以运行:
$ sudo firewall-cmd --info-service=custom
上述命令的输出如下:
syncthing
ports: 22000/tcp 21027/udp
protocols:
source-ports:
modules:
destination:
includes:
helpers:
我们可以看到,服务中“涉及”的端口是22000/tcp
和21027/udp
。如果我们使用 Ufw(简单防火墙),为了激活该服务,我们应该运行:
$ sudo ufw allow syncthing
使用Syncthing
要启动 Syncthing 守护进程,我们所要做的就是从终端调用 Syncthing 二进制文件:
$ syncthing
Syncthing 附带一个 Web 界面,可用于管理应用程序、添加共享目录和远程设备。一旦我们运行上面的命令,Syncthing 守护进程就会启动,并且 Web 浏览器选项卡会自动打开到 127.0.0.1:8384
地址,这是可以访问该界面的地方。
默认的Syncthing共享目录是~/Sync
;它和所有其他应该同步的内容都显示在界面的左栏中。相反,在右列中,我们可以看到有关运行 Syncthing 的设备的信息以及关联的远程设备的列表。在我们的例子中,列表仍然是空的:
Syncthing 网络界面
要添加远程机器并与其共享目录,我们需要做的是交换设备ID。要检查设备ID,我们可以单击Web界面右上角的“操作”按钮,然后单击“显示ID”。当前设备ID将与对应的QRCode一起显示:
为了使应用程序正常工作,两个(或更多设备)应该知道它们各自的 ID。在下一节中,我们将了解如何添加远程设备。
添加设备
要开始同步目录,我们需要将远程设备添加到我们的配置中。在本教程中,我将使用安装了 Syncthing 的 Linux 计算机作为同步“源”,而远程系统将是 Android 设备(Syncthing 可以从 Google Play 商店轻松安装);两台设备必须连接到同一 LAN。
我们点击Web界面右下角的“添加远程设备”按钮。在将打开的弹出窗口的第一个选项卡上,我们需要输入配套设备 ID 和可选的人类友好名称:
如您所见,如果自动发现正常工作,则应自动发现 LAN 中的其他 Syncthing 设备并在“附近设备”列表下报告。在这种情况下,我们需要做的就是单击 对应链接,ID 输入字段将自动填充。
在第二个选项卡“共享”上,我们可以选择要与配套设备共享的目录。在这种情况下,我们选择默认的:
一件方便的事情是选中“自动接受”复选框:这样系统不会提示我们确认是否要接受远程系统提供的目录同步,而是会自动创建它。
第三个选项卡包含“高级设置”。在这里,我们可以选择输入远程设备的静态地址(如果有)并且动态发现不起作用。我们还可以选择设备的传入和传出速率限制,以及应压缩哪些数据(所有数据与仅元数据 - 默认)。
完成后,我们可以点击“保存”按钮。远程设备应该出现在主页上的列表中。在另一台设备上,我们执行相同的操作(请注意,在 Android 应用程序上,通过单击“汉堡包”菜单,我们可以选择使用 Web 界面)并添加我们的“源”设备 ID。一旦两个设备正确配对,它们的状态就应该开始同步。同步过程完成后,它们将被报告为“最新”:
此时,我们的(双向)同步应该已准备就绪,并且目录将在两个设备上保持同步。
自动启动 Syncthing 守护进程
为了使 Syncthing 守护进程自动启动,我们可以使用 Systemd,它是 Linux 初始化管理器。在这种情况下,我们将其作为每用户服务启动,因此我们不需要管理权限。当以这种方式配置服务时,只有在用户登录后才会启动该服务。
我们要做的第一件事是将 systemd 服务文件复制到适当的目录中。如果我们从 Linux 发行版的本机存储库安装 Syncthing,则此类文件应为:/usr/lib/systemd/user/syncthing.service
;如果我们从官方 Syncthing 站点下载 tarball,该文件应该可以在 etc/linux-systemd/user
目录中找到。
如果 ~/.config/systemd/user
目录尚不存在,我们将创建该目录,并将文件复制到其中:
$ mkdir -p ~/.config/systemd/user && cp /usr/lib/systemd/user/syncthing.service ~/.config/systemd/user
文件就位后,我们运行以下命令来启用该服务:
$ systemctl --user enable syncthing.service
结论
在本教程中,我们学习了如何安装和配置 Syncthing,这是一个非常少的应用程序,它允许我们在多个设备之间保持一个或多个目录同步,而无需使用“中央”服务器。我们了解了如何安装应用程序、如何设置防火墙以允许流量通过所需端口、如何在两个设备之间共享目录以及如何在用户登录时自动启动 Syncthing 守护程序。