「TMV」- syncthing | 文件同步工具 | P2P File Synchronization

认识

Like many of the other projects in this category, Syncthing offers an alternative to Dropbox. It keeps data completely private with encryption and authentication requirements. Operating System: Windows, Linux, macOS

syncthing,文件同步工具,我们使用该工具进行数据备份。

构造

—— 该部分将介绍如何获得 Syncthing 服务。我们更加关注与“通过 Syncthing 服务来解决问题”,而非“从零构造 Syncthing 服务”。

服务安装

Syncthing/Debian/Ubuntu Packages

Ubuntu 自带 Version 1.1.4~ds1-4ubuntu1 版本,过旧,所以我们采用 syncthing 官方安装:

wget https://syncthing.net/release-key.gpg
apt-key add ./release-key.gpg

# Add the "stable" channel to your APT sources:
echo "deb https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list

# Update and install syncthing:
sudo apt-get update
sudo apt-get install syncthing

# syncthing --version
syncthing v1.18.5 "Fermium Flea" (go1.17.3 linux-amd64) deb@build.syncthing.net 2021-11-22 09:11:00 UTC [noupgrade]

补充说明:
1)为了同步文件,需要在远程主机与本地主机都安装 syncthing 服务;

服务运行

syncthing/Starting Syncthing Automatically

鉴于 syncthing 不建议 ROOT 用户运行,所以我们遵循官方建议,以非 ROOT 用户运行:

# 本地启动服务
k4nz@localhost # systemctl --user enable syncthing.service
k4nz@localhost # systemctl --user start  syncthing.service

# 远程启动服务
user@remotesvc # systemctl enable syncthing@user.service
user@remotesvc # systemctl start  syncthing@user.service

补充说明:
1)用户必须存在 $HOME 目录,否则 syncthing 无法写入配置文件,而导致启动失败;
2)通过两种 systemd 方式来启动 syncthing 服务;

syncthing 带有 Web 界面,我们配置 Nginx 反向代理来访问:

server {
    server_name syncthing.example.com;
    listen 80;

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_pass http://127.0.0.1:8384/;

        proxy_read_timeout 600s;
        proxy_send_timeout 600s;
    }
}

应用

—— 在 Linux 中如何通过 syncthing 完成文件同步,及常见问题解决方案。

补充说明:

  • 鉴于 syncthing 的功能较多及网络环境千差万别,我们这里记录的笔记并不适用于每种环境。建议阅读官方文档,以了解更多细节。

配置使用

参考 Syncthing/Getting Started 文档,以获取详细的配置过程。如下为大致配置过程:

对于远程服务,我们使用内置的 Web 管理界面 http://127.0.0.1:8384
对于桌面环境,我们使用 Syncthing-GTK 桌面程序

1)添加设备:远程和本地,都需要通过 Device ID 添加对方;
—- Top Right ⇒ Actions ⇒ Show ID
—- Right Column ⇒ Add Remote Device
2)文件同步:添加需要同步的目录;
—- 在本地添加需要同步的目录,此时远程将收到文件同步的提示;
—- 另外:远程设备可以自动发现;或者手动添加远程设备地址;

忽略文件或目录

Ignoring Files — Syncthing v1.19.1-8-gaf93ba9 documentation

[WIP] 同步目录消失(非数据丢失)

问题描述:在 syncthing 中,当添加需要同步的目录后,某天我们发现我们我们添加的目录消失了(注意,这并非数据目录消失,而是在 Web 界面中创建的同步目录消失)。

原因分析:我们推测是因为重启之后,systemd 管理的 syncthing 启动较快,而此时数据盘还没有挂载,导致 syncthing 无法找到 $HOME/.config/syncthing 配置。

解决方案:在 After= 中,添加 local-fs.target 目标

# systemctl edit syncthing@.service --full
...
[Unit]
...
After=network.target local-fs.target
...

参考

Syncthing/Getting Started
Syncthing/Reverse Proxy Setup
Syncthing – 免费开源替代 Resilio/BT Sync 的文件夹同步工具神器(搭建同步网盘)