如何在Ubuntu14.04上安装和配置Syncthing以同步目录

来自菜鸟教程
跳转至:导航、​搜索

介绍

有许多程序能够在不同计算机之间保持文件同步。 Syncthing 是一个引人注目的新选项,它是跨平台的、完全开源的、非常灵活且易于使用。

在本指南中,我们将向您展示如何开始使用 Syncthing 在两个 Ubuntu 14.04 服务器实例之间同步数据。 这将允许您基于配置的“监视”目录在这些服务器之间无缝同步文件。

先决条件和目标

要完成本指南,您需要访问两个 Ubuntu 14.04 服务器实例。

出于本指南的目的,我们将这些服务器称为:

  • 服务器一
  • 服务器二

这些将是平等的合作伙伴,因此不存在主要/次要关系。 您应该在每个帐户上配置一个常规用户帐户(您可以在此处了解如何按照我们的 Ubuntu 14.04 初始服务器设置指南中的步骤 1-4 进行操作)。

本指南中的普通用户帐户将称为 demouser,但您应该使用您喜欢的任何用户名。 这不必与您的常规非 root 帐户分开。

我们将在每台机器上安装和配置 Syncthing,以便在它们之间共享文件。 完成本指南中概述的过程后,您应该拥有两台服务器,每台服务器都有一个目录,可以将更改镜像到另一台计算机。

我们将安装 Syncthing 作为系统级应用程序并创建一个 Upstart 脚本。 这将允许我们的 Syncthing 实例在启动时启动并正确重启,而不是像默认情况下那样每次都生成新实例。

初始下载和安装

我们需要做的第一件事就是将 Syncthing 二进制文件下载到我们的每台服务器上。

要查找最新的打包版本,您可以前往 GitHub 上的 发布页面。 底部有每种操作系统类型的按钮。

如果您的 Linux 系统是 32 位,请选择以“syncthing-linux-386-...”开头的选项。 如果您使用的服务器是 64 位的,请选择标有“syncthing-linux-amd64-...”的服务器。 不要将文件下载到本地计算机上。 相反,右键单击相应的文件并选择“复制链接地址”或您拥有的任何类似选项。

我们将在每台服务器上使用 wget 命令下载这些文件。 在您的服务器上,键入 wget 后跟一个空格,然后粘贴您复制的链接。 版本和系统架构可能对您不同:

cd ~
wget https://github.com/calmh/syncthing/releases/download/v0.8.15/syncthing-linux-amd64-v0.8.15.tar.gz

现在,我们可以通过键入以下内容来解压缩 tarball:

tar xzvf syncthing*.tar.gz

进入新创建的目录:

cd syncthing*

在这里,我们有一个名为 syncthing 的可执行文件,我们可以使用它来启动服务。 我们想将它复制到我们的 PATH 中的一个位置,以便我们可以像普通应用程序一样调用它。

通过键入以下命令使用 sudo 权限执行此操作:

sudo cp syncthing /usr/local/bin

现在,我们可以回到我们的主目录并安全地删除所有剩余的 Syncthing 文件和目录。

cd ~
rm -rf syncthing*

在您的两台服务器上完成上述所有步骤。

该应用程序现在已安装,但在它可以使用之前我们还需要做一些事情。

将 GUI 选项更改为允许远程查看

默认情况下,Syncthing Web 界面仅适用于来自同一台计算机的连接。 这对我们的目的不起作用,因为我们正在使用远程服务器。

为了解决这个问题,我们需要在 Syncthing 配置文件中编辑一行。 但是,尚未创建配置文件。

要自动创建文件,我们可以简单地启动服务。 键入 syncthing 命令以启动并运行它:

syncthing

syncthing 进程不是守护进程,这意味着它在当前的 shell 会话中运行(我们将通过暂时执行 Upstart 脚本来解决这个问题)。 它将启动该过程并创建一些必要的文件。

片刻之后,您将看到一条关于您的节点 ID 的信息性消息,如下所示:

[2EQK3] 15:47:15 OK: Ready to synchronize default (read-write)
[2EQK3] 15:47:15 INFO: Node 2EQK3ZR77PTBQGM44KE7VQIQG7ICXJDEOK34TO3SWOVMUL4QFBHA is "server1" at [dynamic]

当您看到这一点时,这意味着该进程已正确初始化。 我们现在可以通过键入以下内容来停止该过程:

CTRL-C

这将停止该过程并让我们再次控制终端。

我们现在可以编辑创建的配置文件。 在文本编辑器中打开文件:

nano ~/.config/syncthing/config.xml

查找处理 GUI 的部分。 它应该如下所示:

<gui enabled="true" tls="false">
    <address>127.0.0.1:8080</address>
</gui>

我们需要做的唯一更改是将本地主机地址(127.0.0.1)替换为代表所有网络接口的0.0.0.0。 完成后,此部分将如下所示:

<gui enabled="true" tls="false">
    <address>0.0.0.0:8080</address>
</gui>

完成后保存并关闭文件。 稍后我们将通过 Web 界面进行更广泛的配置。

同样,在您正在配置的两台服务器上完成这些过程。

创建一个 Upstart 脚本来处理服务状态

接下来,我们将实现一个 Upstart 脚本来管理我们的流程。 这将允许我们在服务器启动时自动启动 Syncthing 进程。 它还将让我们将其作为服务运行,而无需控制我们的会话。

我们将使用的 Upstart 脚本取自 Syncthing 讨论板 上的 帖子。 通过键入以下内容,在编辑器中创建并以 root 权限打开 Upstart 文件:

sudo nano /etc/init/syncthing.conf

在内部,我们将使用以下几行来控制我们的 Upstart 进程:

description "Syncthing P2P sync service"

start on (local-filesystems and net-device-up IFACE!=lo)
stop on runlevel [!2345]

env STNORESTART=yes
env HOME=/home/demouser
setuid "demouser"
setgid "demouser"

exec /usr/local/bin/syncthing

respawn

让我们来看看这意味着什么。

我们从服务的一般描述开始。 接下来,我们定义服务应该何时启动和停止。 在这里,我们告诉系统它应该在文件系统和非本地网络接口启动后启动。 只要系统离开正常运行级别之一,它就会停止。

接下来,我们将设置一个环境变量,告诉 Syncthing 不要使用自己的机制重新启动。 这是因为它实际上每次都会产生一个新进程,而不会清理旧进程。 为避免这种情况,我们稍后将在此 Upstart 脚本中实现重新启动的功能。

下一个环境变量设置 Syncthing 将使用的主目录。 这将用于在 GUI 中查找正确的配置文件和预填充字段。 我们还将分别使用 setuid 和 setgid 参数指定用户和组。 修改所有这三个值以指向您的用户信息。

接下来,我们将路径设置为我们要执行的实际命令。 最后,我们使用 respawn 告诉 Upstart 如果进程过早停止,则自动重启进程。 这用于在 Syncthing 进程尝试在内部重新启动自身时自动重新启动进程(干净地)。

完成后,保存并关闭文件。

您现在可以通过键入以下内容来启动服务:

sudo initctl start syncthing

在您的两台服务器上完成上述步骤。

在 Web UI 中设置安全性

我们终于准备好通过 Web 用户界面配置我们的实例了。

通过访问它们的公共 IP 地址和端口 8080 登录到每个服务器的 Syncthing 接口:

http://server1_public_IP:8080
http://server2_public_IP:8080

您将看到主 Syncthing 屏幕:

我们需要做的第一件事是为我们的界面添加一些安全性。 转到右上角的“编辑”菜单,然后单击“设置”选项:

在右侧,我们需要为 Web 界面设置用户名和密码。 我们还希望为我们的会话启用 TLS 加密,这样我们的流量就不会在传输过程中被拦截,方法是选中“HTTPS”框:

完成后,单击底部的“保存”按钮。

您将看到一条消息,提示您重新启动服务以使更改生效:

单击“重新启动”按钮。

您可能需要刷新页面才能正确重新加载更改。 当您这样做时,您很可能会遇到如下所示的 SSL 警告:

这只是让您知道签署 SSL 证书的实体不在浏览器的受信任证书颁发机构列表中。 这是预期的,因为证书是自签名的。 单击“继续”继续是安全的。

然后,您将收到您配置的用户名和密码的身份验证提示:

填写适当的值并登录。 您的界面现在更安全,不受外部流量的影响。

在两台服务器上完成这些步骤。

连接两台服务器并共享目录

为了共享内容,Syncthing 要求连接的两端将另一个服务器添加到它们的节点列表中。 然后,双方还必须添加一个存储库(目录)进行同步。

要添加节点,您将需要同伴节点的 ID。 您可以通过转到右上角的“编辑”菜单并选择“显示 ID”选项来获取此 ID。

这将显示一个带有长 ID 的叠加层,您可以复制它。 如果您正在配置智能手机应用程序,它还会为您提供 QR 码。 复制第一个节点的 ID。

在第二台服务器上,单击“编辑”菜单并选择“添加节点”。

将出现一个覆盖,其中包含您必须配置以添加其他服务器的字段。 在“节点 ID”字段中,粘贴您从第一台服务器复制的 ID。 在“节点名称”字段中,选择您希望用于其他服务器的任何描述性名称。 将“地址”保留为“动态”:

完成后,单击“保存”以添加新节点。

以相反的顺序运行相同的过程,以便两台服务器在其配置中都有相反的服务器。 目前,请忽略任何重新启动服务的请求,因为我们将首先进行一些额外的更改。

在 Web 界面中,您连接的节点显示在右侧。 您共享的存储库列在左侧。 默认情况下,将在您的主目录中创建一个名为 Sync 的文件夹作为默认存储库。 如果菜单已压缩,请单击名称以展开列表:

单击“编辑”按钮以配置存储库。 在底部,您可以选择与您配置的任何节点共享此存储库。 选中与对面节点关联的框,然后单击“保存”按钮:

现在,您可以单击“重新启动”按钮来实施您的更改:

现在,在 ~/Sync 目录中所做的任何更改都将镜像到对面的服务器。 默认情况下,这将每 60 秒同步一次,但可以在“设置”菜单中更改。

您可以通过从“编辑”菜单中选择“添加存储库”选项来添加要镜像的其他目录。 要关联的目录,每台服务器上的“存储库 ID”必须相同。

结论

此时,您应该有两台服务器连接并同步单个目录的内容。 您可以通过添加额外的存储库(目录)或添加额外的节点来同步来轻松扩展它。

如果您计划将系统文件同步到普通用户没有写入权限的目录,您可能需要修改 Upstart 文件以使用 root 帐户或执行所需操作所需的任何其他用户帐户.