如何在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 中查找正确的配置文件和预填充字段。 我们还将分别使用 setuidsetgid 参数指定用户和组。 修改所有这三个值以指向您的用户信息。

接下来,我们将路径设置为我们要执行的实际命令。 最后,我们使用 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 帐户或执行所需操作所需的任何其他用户帐户.