Syncthing 是一款开源和跨平台的点对点同步软件,用于在网络中的多个设备之间安全地同步文件和文件夹。Syncthing 被认为是基于云的文件同步服务(如 Google Drive、Dropbox 等)的可靠和安全的替代品。Syncthing采用去中心化架构,使设备能够直接通过加密通道相互通信,而无需中央服务器。作为用户,您可以完全完全控制您的数据,而不是依赖第三方服务来存储文件。

安装 Syncthing 时,它附带了一个基于 Web 的 GUI,该 GUI 提供有关文件同步状态的详细信息,以及用于配置高级选项(如服务启动/停止、设备发现、添加新设备以及 LDAP 集成等更多配置)的工具。Syncthing 同步工具的一些主要功能是:

  • 加密:设备之间的所有通信都使用 TLS 进行加密,以确保数据免受未经授权的访问。
  • 跨平台支持:Syncthing 可以在各种平台上运行,包括 Linux、Windows、macOS、Android 和 FreeBSD。
  • 去中心化:Syncthing在点对点架构上运行,无需中央服务器。用户可以控制他们的数据
  • 版本控制:它有一个复杂的版本控制系统,以确保对文件所做的更改在设备之间正确传播,即使同时进行多个更改也是如此。
  • 选择性同步:用户可以选择要在设备之间同步的文件夹,从而更好地控制自己的数据。
  • 基于 Web 的 GUI:Syncthing 包括一个用户友好的基于 Web 的 GUI。

安装 Syncthing

以下是在 Rocky 9、CentOS 9 或 AlmaLinux 9 系统上安装和配置 Syncthing 的步骤。

第 1 步:下载并安装 Syncthing

您可以从 Github 发布页面查看 Syncthing 的最新稳定版本。使用 wget 或 curl 下载它

curl -s https://api.github.com/repos/syncthing/syncthing/releases/latest | grep browser_download_url | grep linux-amd64 | cut -d '"' -f 4 | wget -qi -

接下来,我们使用tar

tar xvf syncthing-linux-amd64*.tar.gz

接下来,我们将二进制文件复制到目录中/usr/bin

sudo cp syncthing-linux-amd64-*/syncthing /usr/bin/

通过检查版本确认安装成功。

$ syncthing  --version
syncthing v1.27.3 "Gold Grasshopper" (go1.21.6 linux-amd64) builder@github.syncthing.net 2024-01-15 03:45:19 UTC

第 2 步:创建 Syncthing systemd 单元文件

可以在支持同步服务的系统上使用 systemd 来管理 Syncthing 服务。我们需要为它创建一个服务单元。

创建名为 syncthing 的用户帐户

sudo useradd -m syncthing

您可以将用户添加到车轮组。

sudo usermod -aG wheel syncthing

给它一个强密码。

$ sudo passwd syncthing
Changing password for user syncthing.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

创建 systemd 单元文件。

$  sudo vi /etc/systemd/system/syncthing@.service
[Unit]
Description=Syncthing - Open Source Continuous File Synchronization for %I
Documentation=man:syncthing(1)
After=network.target
StartLimitIntervalSec=60
StartLimitBurst=4

[Service]
User=%i
ExecStart=/usr/bin/syncthing serve --no-browser --no-restart --logflags=0
Restart=on-failure
RestartSec=1
SuccessExitStatus=3 4
RestartForceExitStatus=3 4

# Hardening
ProtectSystem=full
PrivateTmp=true
SystemCallArchitectures=native
MemoryDenyWriteExecute=true
NoNewPrivileges=true

# Elevated permissions to sync ownership (disabled by default),
# see https://docs.syncthing.net/advanced/folder-sync-ownership
#AmbientCapabilities=CAP_CHOWN CAP_FOWNER

[Install]
WantedBy=multi-user.target

重新加载 systemd 以使更改生效。

sudo systemctl daemon-reload

启动并启用该服务。

sudo systemctl start syncthing@syncthing
sudo systemctl enable syncthing@syncthing

检查其状态以确认其正在运行。

$ systemctl status  syncthing@syncthing
● syncthing@root.service - Syncthing - Open Source Continuous File Synchronization for syncthing
     Loaded: loaded (/etc/systemd/system/syncthing@.service; disabled; vendor preset: disabled)
     Active: active (running) since Thu 2023-03-02 17:41:05 UTC; 15s ago
       Docs: man:syncthing(1)
   Main PID: 10605 (syncthing)
      Tasks: 16 (limit: 24167)
     Memory: 28.3M
        CPU: 1.682s
     CGroup: /system.slice/system-syncthing.slice/syncthing@syncthing.service
             ├─10605 /usr/bin/syncthing serve --no-browser --no-restart --logflags=0
             └─10612 /usr/bin/syncthing serve --no-browser --no-restart --logflags=0

Mar 02 17:41:06 rocky9.mylab.io syncthing[10605]: [7N43J] INFO: Loading HTTPS certificate: open /root/.config/syncthing/https-cert.pem: no such file or directory
Mar 02 17:41:06 rocky9.mylab.io syncthing[10605]: [7N43J] INFO: Creating new HTTPS certificate
Mar 02 17:41:06 rocky9.mylab.io syncthing[10605]: [7N43J] INFO: GUI and API listening on 127.0.0.1:8384
Mar 02 17:41:06 rocky9.mylab.io syncthing[10605]: [7N43J] INFO: Access the GUI via the following URL: http://127.0.0.1:8384/
Mar 02 17:41:06 rocky9.mylab.io syncthing[10605]: [7N43J] INFO: My name is "rocky9.mylab.io"
Mar 02 17:41:06 rocky9.mylab.io syncthing[10605]: [7N43J] WARNING: Syncthing should not run as a privileged or system user. Please consider using a normal user account.
Mar 02 17:41:06 rocky9.mylab.io syncthing[10605]: [7N43J] INFO: Completed initial scan of sendreceive folder "Default Folder" (default)
Mar 02 17:41:07 rocky9.mylab.io syncthing[10605]: [7N43J] INFO: quic://0.0.0.0:22000 detected NAT type: Not behind a NAT
Mar 02 17:41:07 rocky9.mylab.io syncthing[10605]: [7N43J] INFO: quic://0.0.0.0:22000 resolved external address quic://65.108.59.32:22000 (via stun.syncthing.net:3478)
Mar 02 17:41:16 rocky9.mylab.io syncthing[10605]: [7N43J] INFO: Detected 0 NAT services

要允许侦听所有接口,请使用:

ExecStart=/usr/bin/syncthing --no-browser --gui-address="0.0.0.0:8384" --no-restart --logflags=0

步骤 3:对 Syncthing 数据使用单独的分区

我将为文件同步配置 /dev/sdb

$ lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda           8:0    0   50G  0 disk
├─sda1        8:1    0  600M  0 part /boot/efi
├─sda2        8:2    0    1G  0 part /boot
└─sda3        8:3    0 48.4G  0 part
  ├─rl-root 253:0    0 43.4G  0 lvm  /
  └─rl-swap 253:1    0    5G  0 lvm  [SWAP]
sdb           8:16   0  200G  0 disk

在原始磁盘上创建分区表/dev/sdX

sudo parted -s -a optimal -- /dev/sdX mklabel gpt
sudo parted -s -a optimal -- /dev/sdX mkpart primary 0% 100%
sudo parted -s -- /dev/sdX align-check optimal 1

在其上创建文件系统。在此示例中,我们使用的是 LVM。

sudo pvcreate /dev/sdX1
sudo vgcreate data /dev/sdX1
sudo lvcreate -n syncthing -l  +100%FREE data
sudo mkfs.xfs /dev/data/syncthing
echo "/dev/data/syncthing /home/syncthing/data xfs defaults 0 0" | sudo tee -a /etc/fstab

创建挂载点

sudo mkdir /home/syncthing/data

在运行时挂载分区以验证其是否正常工作。

sudo mount -a

确认安装工作。

$ df -hT /home/syncthing/data
Filesystem                 Type  Size  Used Avail Use% Mounted on
/dev/mapper/data-syncthing xfs   200G   44G  157G  22% /home/syncthing/data

为数据目录设置正确的权限。

sudo chown syncthing:syncthing /home/syncthing/data

确认它有效。

$ ls -lhd /home/syncthing/*
drwxr-xr-x. 2 syncthing syncthing  6 Feb 28 00:49 /home/syncthing/data
drwxr-xr-x. 3 syncthing syncthing 23 Feb 28 00:28 /home/syncthing/Sync

步骤 4:允许 firewalld 中的所需端口

如果 firewalld 处于活动状态,请允许TCP双方端口838422000.

sudo firewall-cmd --add-port={8384,22000}/tcp --zone=public --permanent
sudo firewall-cmd --reload

您可以使用以下方式列出允许的所有端口

firewall-cmd --list-all

第 5 步:访问 Syncthing Web UI

服务启动后,可在端口 8384 上访问同步管理 GUI。打开链接https://localhost_or_ServerIP:8384/

如何在 Rocky 9 / CentOS 9 / Alma 9 上安装 Syncthing_去中心化

单击“设置”为管理员用户设置密码。

如何在 Rocky 9 / CentOS 9 / Alma 9 上安装 Syncthing_文件同步_02

使用上面设置的用户名 admin 和密码登录进行测试。

如何在 Rocky 9 / CentOS 9 / Alma 9 上安装 Syncthing_文件同步工具_03

Syncthing 是一款功能强大且用途广泛的文件同步工具,旨在实现安全和去中心化。Syncthing 是需要订阅和 Internet 访问才能使用的基于云的文件同步服务的良好替代方案。凭借其跨平台支持、复杂的版本控制系统和用户友好的基于 Web 的 GUI,Syncthing 是希望在多个设备之间同步文件同时保持对数据的控制的用户的绝佳选择。