github编辑

在 FreeBSD 上部署 Syncthing

本文将向你说明怎样在 FreeBSD 系统上配置 Syncthing。

syncthing-logo.png

警告

请记住,Syncthing 配置文件实际上是 XML 文件。

就我个人的大部分备份需求,我一般使用 rsync(1),但在像手机或平板这样的有限设备上 rsync 实在很麻烦。因此,对于从这些设备自动导入照片和其他文件,我更倾向于使用 Syncthing 工具。

如果你还没听说过,我引用 Syncthing 官网 https://syncthing.net/arrow-up-right 的话:“Syncthing 替代了专有的同步和云服务,提供开源、可靠和去中心化的方案。你的数据完全属于你自己,你有权选择数据存储位置、是否与第三方共享以及在互联网上的传输方式。” ……以及 维基百科arrow-up-right 的描述:“Syncthing 是一款免费、开源的点对点文件同步应用,适用于 Windows、Mac、Linux、Android、Solaris、Darwin 和 BSD。它可以在局域网设备间同步文件,或通过互联网在远程设备间同步。数据安全和数据保护是软件设计的一部分。”

有人可能会问,它与 Nextcloud 有何不同。其实,Nextcloud 提供了几乎完整的云服务堆栈以及定制应用,而 Syncthing 仅是设备间的同步工具,仅此而已。

最初,我像设置 FreeBSD 上的 Nextcloudarrow-up-right 一样,打算在 FreeBSD Jail 中完成全部设置。问题是,我尝试了几个小时后发现 Syncthing 无法在 FreeBSD Jail 虚拟环境中正常工作。管理界面可以访问并正常工作,但 Android 手机上的 Syncthing 无法与 FreeBSD Jail 中的 Syncthing 实例连接和同步。当然,我可以从手机连接到 Syncthing 管理界面,但仍无法使用 Syncthing 协议进行任何备份。了解了这个不足后,你有三种选择:

  • 在 FreeBSD 主机上像其他服务一样设置 Syncthing。

  • 使用 FreeBSD Bhyve 虚拟化运行 Syncthing 实例。

  • 使用 VirtualBox 软件包/Port 运行 Syncthing 实例。

我选择了第一种方案。Bhyve 和 VirtualBox 实际上也是类似,但需要额外处理虚拟化层。我将以基于 Android 的手机作为 Syncthing 客户端示例,但你也可以在计算机之间同步数据。

还有一点,Syncthing 没有服务器端和客户端的区分。所有 Syncthing 实例/安装都是一样的,你只需添加或移除设备及目录来进行同步。我上文中使用“客户端”一词,只是为了说明我将自动化从手机向 FreeBSD 服务器上运行的 Syncthing 实例复制文件,仅此而已。

主机

以下是在 FreeBSD 主机上我所做的一些基本步骤,包括别名数据库、时区、DNS 以及 FreeBSD 基本设置,这些都在其 /etc/rc.conf 关键文件中配置。

……以及主要的 FreeBSD 配置文件。

安装

首先,为了获取最新的软件包,我们将从 pkg(8) 分支 quarterly 分支切换到 latest

现在我们将引导安装 pkg(8),然后将其数据库更新到最新可用版本。

……然后从 pkg(8) 软件包中安装 Syncthing。

Syncthing 软件包为我们创建了用户和用户组 syncthing

看看 Syncthing 的体积有多小,这些都是软件包 net/syncthing 安装的所有文件。

配置

如上所示,我们已经在 /etc/rc.conf 文件中添加了 syncthing_enable=YES

此外,你还可以从 Syncthing 的 rc(8) 启动脚本中查看其他启动选项。

Syncthing 需要日志文件 /var/log/syncthing.log。让我们创建该文件,并为其设置正确的所有者和权限。

由于我们将使用该日志文件,还需要管理日志轮转,我们将使用 FreeBSD 内置的守护进程 newsyslog(8) 来实现。

让我们尝试初次启动 Syncthing。

看来 rc(8) 启动 Syncthing 并不会自动创建 PID 文件,那么我们现在手动创建它。

现在让我们再次尝试启动 Syncthing。

好多了。让我们看看它使用了哪些端口。

……并查看它的日志文件。

这里有几条关于默认 /Sync 目录的 WARNING 警告信息。让我们来修复它们。

在第一次启动 Syncthing 时,rc(8) 启动脚本创建了目录及其配置文件 /usr/local/etc/syncthing

现在让我们回过头来修复 /Sync 目录的 WARNING 警告。

现在让我们为 Syncthing 实例创建专用目录,并在 /usr/local/etc/syncthing/config.xml 配置文件中进行设置。

我们还将禁用 RelayGlobal Announce Server,但保持启用 Local Announce Server

在重启 Syncthing 之前,让我们清空 /var/log/syncthing.log 文件,以清除不再需要的信息。

让我们看看现在日志中记录了哪些内容。

我们可以看到管理界面监听的是 HTTP 而非 HTTPS,因为 tls 选项被设置为 false。我们还需要将管理界面的地址从本地主机 (127.0.0.1) 切换到我们的 IP 地址 (10.0.0.100)。

现在让我们验证所做的更改。

日志现在已经“干净”了,我们可以继续在浏览器中访问 https://10.0.0.100:8384arrow-up-right 管理界面,进行 Syncthing 的剩余配置。浏览器当然会提示我们 HTTPS 证书不受信任。

syncthing-01.png

Syncthing 会询问我们是否同意共享统计数据。你可自行选择。

syncthing-02.png

Syncthing 仪表盘会显示一个大红色警告,提示远程管理允许在没有密码的情况下访问。我们稍后会修复它,点击警告中的 Settings 按钮。

syncthing-03

保持第一个 General 标签页不修改。

syncthing-04.png

GUI 标签页中,我们为 Syncthing 管理界面创建用户 admin,密码为 SYNCTHINGPASSWORD。这里可以使用更合理的密码 🙂。

syncthing-05.png

我没有修改 Connections 标签页中的设置。点击 Save 继续。

syncthing-06.png

除了设置用户及其密码,我没有更改或设置其他选项。

现在 Syncthing 已无错误。系统会提示你输入刚设置的用户和密码。接着我们将删除 Default Folder,因为不需要它。点击其 Edit 按钮。

syncthing-07.png

然后点击底部的 Remove 按钮。

syncthing-08.png

……并点击 Yes 确认。

syncthing-09.png

“空白”的 Syncthing 仪表盘。

syncthing-10.png

接下来,我们将在 Android 手机上下载、安装并配置 Syncthing。根据你的喜好,可使用 F-Droid 仓库、Google Play 仓库,或直接从任意来源 APK 文件安装。安装后的 Syncthing 应用如下图,约 50 MB。

syncthing-11

启动应用,你会看到 Syncthing 的 Welcome 欢迎界面。

syncthing-12

根据 Android 版本,手机可能会要求你授权 Syncthing 各种权限,选择同意。

syncthing-13

与之前一样,Syncthing 会询问你是否同意共享统计数据。我同样留给你选择。

syncthing-14

Syncthing 现在需要重启,点击 RESTART NOW 继续。

syncthing-15

默认情况下,Camera 目录已预配置为 /storage/emulated/0/DCIM,用于存放手机拍摄的照片和截图。我将使用它。点击 Syncthing 汉堡菜单arrow-up-right 按钮。

syncthing-19

选择 Web GUI 选项。

syncthing-20

你将看到 Android 手机上 Syncthing 的管理界面,向下滚动,在 Remote Devices 区域添加 FreeBSD 上的 blackbox.local Syncthing 实例。

syncthing-21

Remote Devices 区域点击 Add Remote Device 按钮。

syncthing-22

记住之前我们启用的 Local Announce 服务吗?此时它派上用场。FreeBSD 上的 Syncthing 实例 ID 会自动在网络中显示。

syncthing-23

点击显示的 ID,并输入 blackbox.local 主机名。

除了输入(点击)ID 和主机名,我没有设置其他选项。点击 Save

syncthing-24

blackbox.local 现在已添加到 Remote Devices 列表中。

syncthing-25

以下是 Camera 目录属性。记得选择 blackbox.local 作为允许的主机(小黄滑块)。

syncthing-26

……以及 blackbox.local 设备属性。

syncthing-27

现在返回 FreeBSD 上的 Syncthing 管理界面,你会被提示将 Android 手机上的 Syncthing(在我这里是 SM-A320FL)添加到设备列表。点击绿色 Add Device 按钮。

syncthing-28.png

无需添加其他选项,直接点击 Save

syncthing-29.png

Android 手机 SM-A320FL 设备现在在 Remote Devices 区域可见。

syncthing-30.png

系统会提示 SM-A320FL 设备想要共享 Camera 目录,点击绿色 Add 按钮。

syncthing-31.png

输入 SM-A320FL 作为文件夹标签,/syncthing/SM-A320FL 作为 FreeBSD Syncthing 实例上的目录名。确保在底部 Share With Devices 区域选择了 SM-A320FL

syncthing-32.png

现在 SM-A320FL 设备及其 SM-A320FL 文件夹已配置完成。你将首先看到 Out of Sync 状态。同步将开始,其进度可在手机和 FreeBSD Syncthing 管理界面中观察。

syncthing-33.png

SM-A320FL 文件夹状态切换为 Syncing,显示同步进度。

syncthing-34.png

在 Android 手机上也会看到类似状态。

syncthing-36

一段时间后,SM-A320FL 文件夹状态显示 Up to Date,表示 Camera 目录中的所有文件已同步到 FreeBSD Syncthing 实例。

syncthing-35

在 FreeBSD Syncthing 实例上,来自 Android 手机的已创建/同步目录如下所示。

现在,你的 Camera 文件已经同步完成,可作为备份使用。

FreeBSD 实例上的完整 Syncthing 配置文件可在此获取:/usr/local/etc/syncthing/config.xmlarrow-up-right。下载后,将文件从 .xml.key 重命名为**.xml**(WordPress 限制所致)。

更新 1

FreeBSD 上的 Syncthingarrow-up-right 文章曾在 BSD Now 262 – OpenBSD Surfacingarrow-up-right 节目中提及。

感谢分享!

最后更新于