用 Syncthing 在电脑和 VPS 之间同步文件

让常在线的 VPS 保存 Syncthing 文件副本,测试修改与删除。仅接收也会接收远端删除,历史备份要另外安排。

工作电脑关机后,其他设备还想取到最新文件,可以让常在线的 VPS 加入 Syncthing。两台电脑能直连时也能直接交换文件,并不需要让所有传输绕过服务器。

开始前先明确一个条件:同步会传播修改与删除。服务器多保存一份当前文件,并不等于已经有历史备份。“仅接收”也会接收远端删除,这一点要在正式资料加入前验证。

从一个测试目录开始

用几份普通文档建立测试目录,另存已有重要资料。不要拿正在运行的 PostgreSQL、MySQL 数据目录或应用 SQLite 文件做实时同步对象;需要同步数据库备份时,先生成一致、可恢复的导出文件。

目录大小只是容量的一部分。扫描索引、临时文件与版本保留也占空间,频繁修改大文件还会增加历史版本体积。计划存储较大资料库时,比较存储 VPS 的容量、流量和扩容条件,按当前体积与增长安排;少量文件可以先用现有机器试运行。

同步节点先按共享文件、版本目录和后续增长选择磁盘,再看大量小文件索引时的内存。可比较 雨云 RCS 的同步节点与云盘,或查看 ECS 的实例与数据盘组合;公网入口需能满足所用同步协议,NAT 商品另核对映射。先试小目录扫描和直连,再检查版本保留并试恢复,之后才扩大容量。

下面适用于普通 Linux Docker Engine,采用 host 网络。Docker Desktop 的网络行为不同,不直接套用这份配置。

sudo mkdir -p /opt/syncthing/data
sudo chown 1000:1000 /opt/syncthing/data
cd /opt/syncthing

1000:1000 对应下面容器 UID、GID。若换数字身份,目录所有者与两项环境变量一起调整。compose.yaml:

services:
  syncthing:
    image: syncthing/syncthing:2.1.5
    hostname: vps-sync
    network_mode: host
    restart: unless-stopped
    environment:
      PUID: "1000"
      PGID: "1000"
      STGUIADDRESS: "127.0.0.1:8384"
    volumes:
      - ./data:/var/syncthing

这是固定版本的新安装示例,升级已有实例先读目标版本说明,尤其不要忽略 1.x 到 2.x 的数据迁移。host 网络没有 ports 限制,应用自己决定监听范围,所以显式设置 GUI 为本机地址。

docker compose config --quiet
docker compose pull
docker compose up -d
docker compose logs --tail=100 syncthing
sudo ss -lntp | grep ':8384'

检查 GUI 确实绑定 127.0.0.1,再从自己的电脑建立转发,打开 http://127.0.0.1:9090:

ssh -N -L 127.0.0.1:9090:127.0.0.1:8384 user@YOUR_VPS_IP

首次进入设置 GUI 用户名和密码。当前访问方式不需要开放公网 8384,也不需要域名。镜像、挂载与网络说明见 官方 Docker 文档。

认可设备后,再共享同一个 Folder ID

电脑与 VPS 分别查看自己的 Device ID,在另一端添加并认可对方。设备名称只是便于辨认,真正身份是 Device ID;两端认可连接后,还要共享同一个 Folder ID。

先在电脑创建测试文件夹,指定稳定的 Folder ID,例如 documents-sync,共享给 VPS。服务器接受邀请时,选择容器内路径 /var/syncthing/Documents-Sync,它对应宿主机 data/Documents-Sync。设备上的绝对路径可以不同,Folder ID 必须对应。

放入一个小文件,确认服务器收到,再修改它、删除它,观察实际模式。最后让第三台设备接入,验证电脑关机后它仍能从 VPS 收到文件。只看到“已连接”,不能代替共享目录和传输检查。

仅接收仍然会执行远端删除

两台电脑都要编辑时,可以使用发送与接收;它们的修改与删除都可能进入同步状态。若电脑是权威来源、VPS 只留镜像,可使用电脑仅发送、VPS 仅接收。VPS 本地改动不会主动传播,但来自电脑的删除仍会应用。

出现“覆盖更改”或“撤销本地更改”时,先读清操作方向,再把需保留的文件复制到同步目录之外。它们改变当前状态,不能作为不明故障的普通重试按钮。

在服务器文件夹设置中开启版本控制,按文件变化频率设置保留策略。版本归档处理其他设备传来的修改或删除,不为服务器本地改动自动保存旧版本;设置也不会自动同步到每台设备。.stversions 占用本地磁盘,磁盘损坏时同样会丢失。

需要长期历史副本时,再安排同步关系外的备份。发生误删先暂停相关同步,保存仍存在的文件,核对版本记录,再决定恢复;所有节点已删除且没有版本副本时,不能假定还有隐藏回收站。

连接正常,速度慢先看路径

远程设备详情显示 Relay 时,数据经过中继,吞吐还取决于中继路径。需要直连时,检查 VPS 主机防火墙与云安全组的 22000/TCP、22000/UDP;21027/UDP 用于局域网发现,不是两台公网设备直连必需的开放入口。

如果直连仍慢,再检查扫描、哈希、磁盘与两端网络。首次索引大量小文件时的负载,不能作为长期空闲资源需求;NAT 套餐还需按实际端口映射判断,不能照搬独立公网 IP 的规则。

完整备份应包括 Compose 与整个持久化目录,保护其中设备身份材料。取得一致副本时先停止应用,备份后启动。恢复实例先在隔离环境检查,不要让两台机器同时拿相同身份接回同步网络;重新生成身份则需要重新认可设备。