如何在Ubuntu14.04中使用BitTorrentSync同步目录
介绍
在处理联网计算机时,在服务器和本地计算机之间同步文件和目录是非常常见的要求。 自动同步目录内容的一种方法是使用称为 BitTorrent Sync 的技术。 该软件利用通常用于文件共享的 BitTorrent 协议作为同步工具。
通过 BitTorrent Sync 进行的通信基于自动生成的唯一共享秘密进行端到端加密。 虽然 BitTorrent 作为文件共享机制是一项公共服务,但 BitTorrent Sync 使用该协议的方式是私有的,这意味着文件可以安全地传输。
在本指南中,我们将演示如何在两台 Ubuntu 14.04 服务器上安装和使用 BitTorrent Sync。 我们将向您展示如何设置共享目录,以及如何为 Web 界面设置 SSL 加密以安全地管理您的服务器。
安装 BitTorrent 同步
我们需要开始的第一步是在我们的两个服务器实例上安装 BitTorrent Sync 软件。 本指南中的许多过程将在两台机器上进行镜像,因此请确保为每台机器复制您的命令。
Ubuntu 的默认存储库中没有可用的官方 BitTorrent Sync 软件包。 但是,有一个由 Leo Moll(称为 tuxpoldo)创建的维护良好的 PPA(个人包存档),我们可以使用它来获取最新的包。
在您的两台服务器上,添加此 PPA,以便我们的系统可以下载软件包:
sudo add-apt-repository ppa:tuxpoldo/btsync
现在,我们需要更新本地包索引,以便我们的系统知道新可用的软件。 然后,我们将安装 BitTorrent Sync 以及 nginx,以便稍后将 SSL 加密添加到我们的 Web 界面:
sudo apt-get update sudo apt-get install btsync nginx
当您尝试安装时,系统会在提示中询问您很多问题。 现在,在所有提示中按 ENTER。 我们将立即以更深入的方式重新配置我们的服务。
配置 BitTorrent 同步
现在软件已安装,我们实际上将运行配置脚本,它会再次提示我们输入值。 但是,这一次,我们将可以访问我们需要的其他选项。
要再次运行脚本,这次选择我们的设置,在每台服务器上键入:
sudo dpkg-reconfigure btsync
与初始安装相比,这将使您通过 更多 提示。 在大多数情况下,我们将使用默认值,您只需按 ENTER。
下面,我概述了 需要 配置的值:
- Web界面绑定IP地址:
127.0.0.1
- 访问网页界面的用户名:[随便选。 在本例中,我们将保留
admin
帐户。] - 访问网页界面的密码:[随便选。 我们将使用
password
进行演示。] - 为守护进程设置的Umask值:
002
如您所见,对于绝大多数设置,我们可以接受默认值。 上述选择虽然非常重要。 如果您错误地配置了这些,请再次运行该命令以更正您的选择。
将 SSL 前端配置到 BitTorrent 同步 Web 界面
现在,我们大部分都设置了 BitTorrent Sync。 稍后我们将设置我们的同步目录。 但是现在,我们需要使用 SSL 设置我们的 nginx Web 服务器。
您可能已经注意到,我们将 Web 界面配置为仅在本地环回界面 (127.0.0.1
) 上可用。 这通常意味着我们在远程服务器上运行 BitTorrent Sync 时将无权访问它。
我们这样限制访问是因为,虽然 BitTorrent Sync 流量本身是加密的,但到 Web 界面的流量是以纯文本形式传输的。 这可以让任何观看我们服务器和本地计算机之间流量的人看到我们机器之间发送的任何通信。
我们将使用 SSL 设置 nginx,以通过 SSL 代理连接到我们的 BitTorrent Web 界面。 这将使我们能够安全地远程管理我们的 BitTorrent Sync 实例。
同样,我们需要在我们的两个主机上执行所有这些步骤。
生成 SSL 证书和密钥
进行此设置的第一步是创建一个目录来保存我们的 SSL 证书和密钥。 我们将在 nginx 配置目录层次结构下执行此操作:
sudo mkdir /etc/nginx/ssl
现在,我们可以通过发出以下命令一次性创建 SSL 证书和密钥:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt
您将被要求为您的证书填写一些信息。 尽可能填写这些字段。 真正 唯一重要的是这个:
Common Name (e.g. server FQDN or YOUR name) []:
在此字段中,输入您的服务器的域名或公共 IP 地址。
配置 Nginx 以使用 SSL 加密流量并传递给 BitTorrent Sync
现在,我们可以将我们的 nginx 服务器块配置为在与远程客户端通信时使用我们的 SSL 证书。 然后它将信息发送到我们的 BitTorrent Sync Web 界面,在本地界面上监听。
我们将保留默认的 nginx 服务器块文件,以防您将来需要使用它。 由于 BitTorrent Sync 默认在端口“8888”上运行,因此我们也将其用作前端 SSL 端口。
通过在编辑器中打开具有 sudo 权限的新文件来创建新的服务器块文件:
sudo nano /etc/nginx/sites-available/btsync
在里面,我们需要添加以下几行:
服务器 { 监听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 界面在本地界面上使用的相同端口。 不同之处在于 nginx 将使用公共地址并需要 SSL。
它将使用我们创建的 SSL 证书来加密到客户端的流量。 然后它将它传递给 BitTorrent Sync 接口。 这样,服务器和客户端之间的流量将被加密,但 BitTorrent Sync 界面将像我们从服务器本身访问它一样运行。
完成后,保存并关闭文件。
现在,我们只需要链接文件以便启用它:
sudo ln -s /etc/nginx/sites-available/btsync /etc/nginx/sites-enabled/
我们现在可以重新启动服务以实现我们的更改:
sudo service nginx restart
确保您在两台服务器上都完成了这些程序。
创建共享目录
我们现在配置了 BitTorrent Sync,并设置了 SSL 和 nginx 来加密我们与 Web 界面的会话。
在开始使用 Web 界面之前,我们应该设置要同步的目录。 由于 BitTorrent Sync 创建从远程主机镜像的文件的方式,我们对此部分的配置非常重要。
首先,在本指南中,我们将在两台服务器上同步位于 /shared
的目录。 现在让我们创建这些目录:
sudo mkdir /shared
获得目录后,我们将授予根帐户用户对该目录的所有权。 同时,我们将赋予“btsync”组(这是在安装过程中创建的)组对目录的所有权:
sudo chown root:btsync /shared
您可以通过多种不同的方式配置此访问权限,每种方式都有其含义。 我们在这里展示了一个相当灵活的系统,它将最大限度地减少权限和所有权冲突。 要了解其他替代方案及其权衡取舍,请查看 这篇文章 的共享文件夹配置。
分配所有权后,我们应该调整权限。 我们将在目录上设置 setgid
位,以便 btsync
组将获得目录中创建的任何文件的组所有权。 为了使其正常工作,我们还需要授予组写入权限:
sudo chmod 2775 /shared
最后,由于我们的常规系统帐户不是目录的用户所有者或组所有者,我们需要将我们的常规帐户添加到 btsync
组。 这将允许我们以普通用户身份访问此目录中的内容并与之交互:
sudo usermod -a -G btsync your_user
注意:此时,您必须注销并重新登录才能在当前环境中注册这些更改。 通过键入退出:
exit
现在重新登录。
访问 BitTorrent 同步 Web 界面
现在我们已经完成了所有设置,我们可以开始查看管理 Web 界面以将各个部分组合在一起。
首先,您需要使用“https”协议在端口“8888”上的 Web 浏览器中访问这两个服务器。 这应该看起来像这样:
https:// server_domain_or_IP :8888
您很可能会看到如下所示的警告:
这只是一个警告,告诉您您的浏览器无法识别签署您的 SSL 证书的一方。 由于我们生成了自签名 SSL 证书,这非常有意义并且是意料之中的,我们可以安全地单击“继续”或您的浏览器为您提供的任何类似按钮。
系统将提示您输入您在配置 BitTorrent Sync 时选择的用户名和密码。 在我们的示例中,凭据为 admin
和 password
,但您的(尤其是密码)可能不同。
进行身份验证后,您应该会看到主要的 BitTorrent Sync Web 界面:
将共享目录添加到您的第一台服务器
我们无法开始将我们配置的目录添加到 Web 界面。
单击右上角的“添加文件夹”按钮。 您将看到一个对话框,用于将目录添加到 BitTorrent 同步界面:
滚动到我们创建的 /shared
目录并单击它。 它应该使用正确的值填充“路径”字段。
在“Secret”字段旁边,单击“Generate”按钮为目录创建一个密钥:
单击右下角的“添加”按钮。 您的目录将被添加到 BitTorrent Sync Web UI。
现在,我们有一个可用的新按钮。 点击刚才添加的/shared
目录关联的“Secret/QR”按钮:
您将看到一个对话框,为您提供该目录的秘密。 这是将此目录与另一个 BitTorrent Sync 实例同步的方法。
该软件允许您设置对目录的完全访问(读写访问)或只读访问。 对于我们的指南,我们将配置完全访问权限以允许双向同步,但这只是一个偏好。
您将需要从该界面复制“完全访问”密码以设置与您的第二台服务器的同步。
将共享目录和机密添加到第二个服务器
现在我们已经将第一台服务器配置为共享其目录,我们需要设置第二台服务器。
我们将完成大部分相同的步骤,但会有一些细微的变化。
再次登录 Web 界面,这次使用第二台服务器的域名或 IP 地址。 请记住使用“https”和端口“8888”:
https:// second_server_domain_or_IP :8888
您将再次看到 SSL 警告,并且您需要进行身份验证。 您将来到我们之前看到的相同的空界面。
和我们之前一样,单击“添加文件夹”按钮。 选择我们创建的/shared
目录。
此时,不是 生成 一个新的秘密,我们想使用在第一台服务器上生成的秘密。 这将允许这两个实例进行通信,因为每个秘密都是唯一的并且是随机生成的。 输入来自第一台服务器的密码:
完成后点击右下角的“添加”按钮。
稍后,主界面中的“已连接设备和状态”列将填充有关配套服务器的信息:
这意味着您的服务器正在相互通信并且可以同步内容。
测试 BitTorrent 同步
让我们测试一下我们当前的设置。
在您的任一服务器上(如果您配置了完全访问权限,则无关紧要),移动到 /shared
目录:
cd /shared
我们可以通过键入以下内容创建 10 个示例文件:
touch file{1..10}
片刻之后,在您的另一台服务器上,您应该能够看到您创建的文件:
# On the second server cd /shared ls -l
total 0 -rw-rw-r-- 1 btsync btsync 0 May 19 17:07 file1 -rw-rw-r-- 1 btsync btsync 0 May 19 17:07 file10 -rw-rw-r-- 1 btsync btsync 0 May 19 17:07 file2 -rw-rw-r-- 1 btsync btsync 0 May 19 17:07 file3 . . .
如您所见,我们的文件已同步完毕。 但是,如果您查看 Web 界面,则此同步尚未注册。 这是因为这些文件不包含任何实际数据。
我们将通过将数据从我们的第二个服务器写入这些文件来测试它是否可以检测到我们何时传输带有内容的文件。 这也将允许我们测试我们是否可以将更改同步回第一台服务器。
在第二台服务器上,您可以通过键入以下内容将短语“一些内容”写入您创建的每个文件:
for item in /shared/file{1..10}; do echo "some content" > $item; done
几秒钟后,第一台服务器上的文件应该会显示您添加的内容:
# On first server cat /shared/file1
some content
您还应该看到 Web 界面也已更新,以反映文件数量和已在服务器之间同步的空间量:
如果这正常工作,您已成功配置 BitTorrent Sync 以在服务器之间镜像您的更改。
结论
您现在应该有一个灵活的设置,允许您在远程服务器之间安全地传输文件。 此外,此配置允许您通过利用 SSL 的安全连接来管理服务。
该应用程序本身非常灵活,可以以多种方式使用。 一些有用的功能是能够在移动设备上将机密扫描为二维码、配置对内容的只读访问权限以及为客户提供一次性使用机密的能力。 您还可以将服务器配置为仅与某些主机通信。
BitTorrent Sync 服务还提供了一个简单的版本控制系统,它利用共享目录中隐藏的 ./SyncArchive
目录来保存旧版本的文件。 如果您想确保文件同步而不影响其他服务,您还可以实施速率限制等限制。