如何在 Ubuntu 14.04 中使用 BitTorrent Sync 同步目录

介绍

在处理网络计算机时,在服务器和本地机器之间同步文件和目录是一个非常常见的要求。自动同步目录内容的一种方法是使用称为 BitTorrent Sync的技术。

通过BitTorrent Sync进行的通信基于一个独特的共享秘密进行端到端加密,而BitTorrent作为文件共享机制是一种公共服务,但BitTorrent Sync使用该协议的方式是私密的,这意味着文件可以安全地传输。

在本指南中,我们将展示如何在两个 Ubuntu 14.04 服务器上安装和使用 BitTorrent Sync. 我们将向您展示如何设置共享目录,以及如何为 Web 接口设置 SSL 加密,以安全地管理您的服务器。

安装 BitTorrent 同步

我们需要开始的第一步是将BitTorrent Sync软件安装在我们的服务器实例上,本指南中的许多程序将反映在两台机器上,所以请确保您对每个机器重复您的命令。

在Ubuntu的默认存储库中没有官方的BitTorrent Sync包,但是,有一个由Leo Moll(称为tuxpoldo)创建的保养良好的PPA(个人包档案),我们可以使用它来更新包。

在您的两个服务器上,添加此PPA,以便我们的系统可以下载包:

1sudo add-apt-repository ppa:tuxpoldo/btsync

现在,我们需要更新我们的本地包索引,以便我们的系统知道新的软件,然后我们会安装BitTorrent Sync,以及nginx,以便在稍后将SSL加密添加到我们的Web界面:

1sudo apt-get update
2sudo apt-get install btsync nginx

当你尝试安装时,你会被问到几个提示的问题。 现在,请通过所有提示来按 Enter。 我们将以更深入的方式重新配置我们的服务。

配置 BitTorrent 同步

现在软件已安装,我们实际上将运行配置脚本,请我们第二次寻找值,但这一次,我们将可以访问我们为我们的目的所需的其他选项。

要再次运行脚本,这一次选择我们的设置,在每个服务器上输入:

1sudo dpkg-reconfigure btsync

这将使您通过甚至 more 提示,而不是在初始安装期间. 大多数情况下,我们将与默认值,你可以只是按 Enter。

下面,我概述了您需要配置的值:

  • Web Interface Bind IP Address: 127.0.0.1
  • 访问 Web 接口的用户名: [选择任何您想要的。我们将在本示例中保留 admin 帐户。

正如您所看到的,对于绝大多数设置,我们可以接受默认设置,但上述选项非常重要。

配置 SSL 前端到 BitTorrent 同步 Web 接口

现在,我们已经设置了BitTorrent Sync的大部分部分,我们会稍微设置我们的同步目录,但目前我们需要使用SSL来设置我们的nginx网络服务器。

您可能已经注意到,我们将我们的 Web 界面配置为仅在本地 loopback 界面(127.0.0.1)上可用,这通常意味着在远程服务器上运行 BitTorrent Sync 时,我们将无法访问。

我们限制了这样的访问,因为虽然BitTorrent Sync流量本身是加密的,但到Web接口的流量是以简单的文本传输的,这可以让任何观看我们服务器和本地计算机之间的流量的人看到我们机器之间发送的任何通信。

我们将使用 SSL 设置 nginx 来通过 SSL 连接到我们的 BitTorrent Web 接口,这将使我们能够远程安全地管理我们的 BitTorrent 同步实例。

再次,我们将需要在我们的两个主机上完成所有这些步骤。

生成SSL证书和密钥

取得此设置的第一步是创建一个目录,以保留我们的SSL证书和密钥,我们将在nginx配置目录层次下做到这一点:

1sudo mkdir /etc/nginx/ssl

现在,我们可以通过发出这个命令,在一个单一的动作中创建我们的SSL证书和密钥:

1sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt

您将被要求填写您的证书的一些信息. 尽可能地填写这些字段. 唯一真正重要的是这个:

1Common Name (e.g. server FQDN or YOUR name) []:

在此框中,输入您的服务器的域名或公共IP地址。

配置 Nginx 以使用 SSL 加密流量并转到 BitTorrent 同步

现在,我们可以配置我们的 nginx 服务器块,以便在与远程客户端通信时使用我们的 SSL 证书。

由于BitTorrent Sync在默认情况下在端口8888上运行,我们也将使用它作为前端SSL端口。

通过在您的编辑器中打开具有 sudo 权限的新文件创建新的服务器封锁文件:

1sudo nano /etc/nginx/sites-available/btsync

内部,我们需要添加以下几行:

server {
    listen server_domain_or_IP:8888 ssl;
    server_name server_domain_or_IP;

    access_log /var/log/nginx/access.log;

    ssl_certificate /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;

    location / {
        proxy_pass http://127.0.0.1:8888;
    }
}

请确保您将红色文本更改为您的服务器的域名或公共IP地址。这将告诉nginx将连接到BitTorrent Sync Web接口在本地接口上使用的相同端口。

它将使用我们创建的SSL证书来加密流量到客户端,然后将其传输到BitTorrent Sync接口,以这种方式,服务器和客户端之间的流量将被加密,但BitTorrent Sync接口将像我们从服务器本身访问它一样运作。

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

现在,我们只需要链接文件,以便它被启用:

1sudo ln -s /etc/nginx/sites-available/btsync /etc/nginx/sites-enabled/

现在我们可以重新启动服务以实现我们的更改:

1sudo service nginx restart

请确保您在您的两个服务器上通过这些程序。

创建一个共享目录

我们现在已经配置了BitTorrent Sync,并设置了SSL和nginx来使用Web界面加密我们的会话。

在我们开始使用 Web 界面之前,我们应该设置我们想要同步的目录. 由于 BitTorrent Sync 创建从远程主机镜像的文件的方式,我们对这个部分的配置非常重要。

首先,在本指南中,我们将在两个服务器上同步位于 `/shared 的目录. 让我们现在创建这些目录:

1sudo mkdir /shared

一旦你有目录,我们会给我们的 root 帐户用户对目录的所有权. 同时,我们会给btsync组(这是在安装过程中创建的)组对目录的所有权:

1sudo chown root:btsync /shared

您可以通过多种不同的方式来配置此访问,每个都有其影响。我们在这里展示了一种相当灵活的系统,可以最大限度地减少权限和所有权冲突。 若要查找其他替代方案,以及它们的妥协,请参阅 [本文] 的共享文件夹配置(https://digitalocean.com/community/articles/how-to-use-bittorrent-sync-to-synchronize-directories-in-ubuntu-12-04#HowToConfigureSharedFolders)。

在我们分配所有权后,我们应该调整权限。我们将在目录上设置setgid位,以便对目录中创建的任何文件获得btsync组所有权。

1sudo chmod 2775 /shared

最后,由于我们的常规系统帐户不是目录的用户所有者或组所有者,我们将需要将我们的常规帐户添加到btsync组。

sudo usermod -a -G btsync your_user

** 注意**:此时,您必须退出并重新登录,以便这些更改能够在当前环境中注册。

1exit

现在再登录了。

使用 BitTorrent Sync Web 接口

现在我们已经设置了一切,我们可以开始看看管理网页接口,将这些部分拉在一起。

首先,您需要在端口8888上访问网页浏览器中的两个服务器,使用https协议。

https://server_domain_or_IP:8888

您很可能會看到顯示的警告,看起來像這樣:

SSL non-trust warning

这是一个警告,告诉你,你的浏览器无法识别签署你的SSL证书的当事人,因为我们生成了自签名的SSL证书,这很有道理,我们可以安全地点击无论如何继续或您的浏览器给你的任何类似按钮。

您将被提示在配置 BitTorrent Sync 时选择的用户名和密码. 在我们的示例中,凭证是admin密码,但您的(特别是密码)可能不同。

一旦您验证,您应该看到主要的BitTorrent Sync Web接口:

BitTorrent Sync main web interface

将共享目录添加到您的第一个服务器

我们无法开始将我们配置的目录添加到 Web 界面。

点击右上角的添加文件夹按钮,您将得到一个对话框来添加一个目录到BitTorrent Sync界面:

Add folder interface

滚动到我们创建的/shared目录并点击它,它应该填充正确值的Path字段。

秘密字段旁边,点击生成按钮来创建目录的秘密密密钥:

Generate secret

点击右下角的添加按钮,您的目录将被添加到BitTorrent Sync Web UI。

现在,我们有一个新的按钮可用. 点击与您刚刚添加的 /shared 目录相关的秘密/QR按钮:

secret button

您将收到一个对话框,为您提供该目录的秘密. 这是同步该目录与BitTorrent Sync的另一个实例的方式。

该软件允许您设置完整的访问目录(阅读和写入访问),或只读访问. 对于我们的指南,我们将配置完整的访问,以允许双向同步,但这只是一个偏好。

你需要从这个界面复制完全访问的秘密,以便与你的第二个服务器进行同步。

将共享目录和秘密添加到第二个服务器

现在我们已经配置了第一个服务器以共享其目录,我们需要设置我们的第二个服务器。

我们将通过大多数相同的步骤,有一些微小的变化。

再次登入 Web 接口,这次使用第二个服务器的域名或 IP 地址. 请记住使用https和端口8888:

https://second_server_domain_or_IP:8888

您将再次看到SSL警告,您将需要进行身份验证,您将进入我们之前看到的相同的空格界面。

点击添加文件夹按钮,就像我们之前一样。

在这一点上,而不是生成一个新的秘密,我们希望使用第一个服务器上生成的秘密,这将允许这两个实例进行通信,因为每个秘密都是独一无二的和随机生成的。

add secret from first

点击右下角的添加按钮,当你完成。

在几秒钟内,主界面中的连接设备和状态列将填充有关伴侣服务器的信息:

connected device display

这意味着您的服务器正在彼此通信,并可以同步内容。

测试 BitTorrent 同步

让我们来测试我们的当前设置。

在您的任何一个服务器上(如果您配置了完整访问,无论哪个服务器都无关紧要),请进入/shared目录:

1cd /shared

我们可以通过键入创建10个样本文件:

1touch file{1..10}

过了一会儿,在你的其他服务器上,你应该能够看到你创建的文件:

1# On the second server
2cd /shared
3ls -l

1total 0
2-rw-rw-r-- 1 btsync btsync 0 May 19 17:07 file1
3-rw-rw-r-- 1 btsync btsync 0 May 19 17:07 file10
4-rw-rw-r-- 1 btsync btsync 0 May 19 17:07 file2
5-rw-rw-r-- 1 btsync btsync 0 May 19 17:07 file3
6. . .

正如你可以看到的,我们的文件被同步了,如果你看的是网页界面,但这个同步没有注册,这是因为这些文件不包含任何实际数据。

我们将测试它是否可以通过从我们的第二个服务器写入数据来检测我们传输内容的文件时,这也将使我们能够测试我们是否可以将更改同步回第一个服务器。

在第二个服务器上,您可以将某些内容的短语写入您通过键入创建的每个文件:

1for item in /shared/file{1..10}; do echo "some content" > $item; done

几秒钟后,第一个服务器上的文件应该显示您添加的内容:

1# On first server
2cat /shared/file1

1some content

您还应该看到,网页界面也被更新,以反映在服务器之间同步的文件数量和空间量:

BitTorrent Sync size info

如果这是有效的,您已经成功配置了BitTorrent Sync来反映服务器之间的更改。

结论

您现在应该有一个灵活的设置,允许您安全地将文件传输到远程服务器之间。

该应用程序本身非常灵活,可以以各种方式使用。一些有用的功能包括在您的移动设备上扫描秘密的QR代码的能力,配置只读内容的访问的能力,以及提供客户端一次性使用的秘密的能力。

BitTorrent Sync 服务还提供了一个简单的版本控制系统,它在共享目录中使用一个隐藏的 `./SyncArchive’ 目录,以保持旧版本的文件。

By Justin Ellingwood
Published At
Categories with 技术
comments powered by Disqus