Syncthing:开源去中心化文件同步,替代 Resilio Sync 和网盘

前言

文件在多台设备之间同步,最省事的方案是网盘 ——iCloud、OneDrive、Google Drive。但有几个问题:存在别人服务器上、有容量限制、大文件同步慢。

Resilio Sync(以前的 BitTorrent Sync)是个好方案 ——P2P 直传,不经过中心服务器。但它闭源收费了。

Syncthing 是开源替代。纯 P2P、去中心化、端到端加密。没有中心服务器收集你的数据,设备之间直接用 TLS 加密传输。

Syncthing 怎么工作的

每台设备生成一个唯一设备 ID,互相添加好友之后自动发现对方。在同一局域网内走 LAN 直连,不在同一网络时通过全球发现服务器(或中继服务器)建立连接。

关键概念:

  • 设备 ID:每台设备的身份证,添加设备时需要
  • 文件夹 ID:同步单元的标识,两台设备上一个文件夹 ID 相同就是同一个同步任务
  • 中继:P2P 直连失败时的兜底方案,数据仍然端到端加密

Debian 安装

Terminal window
# 添加官方 APT 源
curl -fsSL https://syncthing.net/release-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/syncthing-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list
sudo apt update && sudo apt install syncthing -y

以用户服务方式运行(不占 root):

Terminal window
systemctl --user enable --now syncthing

默认监听 http://127.0.0.1:8384。如果要远程访问管理界面,编辑 ~/.config/syncthing/config.xml,把 <address>127.0.0.1:8384</address> 改成 0.0.0.0:8384

Docker 部署

services:
syncthing:
image: syncthing/syncthing:latest
container_name: syncthing
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
volumes:
- ./config:/config
- ./data:/data
ports:
- "8384:8384" # Web GUI
- "22000:22000" # TCP 文件传输
- "22000:22000/udp" # QUIC 传输
1 collapsed line
restart: unless-stopped

使用流程

  1. 在设备 A 打开 http://IP:8384,记下「设备标识」
  2. 在设备 B 同样打开,点「添加远程设备」,输入设备 A 的 ID
  3. 设备 A 收到请求后确认
  4. 在设备 A 添加共享文件夹,设备 B 自动收到同步邀请
  5. 开始同步

之后两台设备上的共享文件夹会实时保持同步。修改文件、新增文件、删除文件 —— 所有操作都会同步到对方。

冲突处理

两台设备同时修改了同一个文件怎么办?Syncthing 不会静默覆盖 —— 它会保留冲突版本,文件名加 .sync-conflict-日期-时间 后缀。你手动对比后决定保留哪个。

忽略特定文件

编辑文件夹的「忽略模式」:

*.tmp
.DS_Store
Thumbs.db
node_modules

这些文件不会被同步。对开发项目来说,node_modules.git 是必加的。

版本控制(回收站)

Syncthing 支持文件版本管理。在文件夹设置里选:

  • 简易版本控制:保留最近 N 个版本
  • 回收站式:删除的文件移到 .stversions 目录,N 天后真正删除

这个功能救过我一次 —— 不小心删了一个配置文件,从 .stversions 里捡回来了。

常见问题

「设备未连接」:检查双方防火墙是否放行 22000 端口(TCP + UDP),同一局域网优先走直连。

同步很慢:检查是不是在走中继服务器(设置里可以看到)。中继带宽有限,局域网内不走中继才是正常的。

Docker 容器时间不对:加 TZ=Asia/Shanghai 环境变量。

总结

Syncthing 解决了一个很朴素的需求:把自己的文件在多台设备之间同步,不经过任何第三方服务器。

开源、P2P、加密、去中心化 —— 这几个词放在一起就是 Syncthing 的核心价值。Docker 一条命令部署,Web GUI 管理直观,日常使用几乎无感。

如果你在用网盘同步文件,试试 Syncthing。省下订阅费的同时,数据也真正握在自己手里。