电脑关机以后,另一台电脑就拿不到刚整理的资料,这类问题可以用一台常在线的 VPS 解决。把它作为 Syncthing 的一个节点,工作电脑先把文件传过去,家里的电脑上线后再接收。不需要搭一套网盘,也不需要每次打开网页上传。
VPS 是加入同步的设备,不会自动成为所有传输必经的中心。两台电脑能直连时,可以直接交换文件;服务器的用途是保留一份持续在线的副本。它也不是历史备份库。误删文件会向其他设备传播,所以在开始同步前,要先决定哪些目录共享、哪台设备可以修改、在哪里保留旧版本。
下面用 Linux VPS 和官方 Docker 镜像部署,管理页面通过 SSH 打开,不把后台放在公网。示例固定使用 syncthing/syncthing:2.1.5,这是本文核对时官方发布页列出的版本。以后升级应先阅读对应版本说明,不必为了追随新版本改掉已经稳定的目录配置。
先选一个普通文件夹,别从整个硬盘开始
适合先同步的是文档、已经导出的照片、设计素材、离线资料,或者自己维护的 Markdown 文件。目录里的文件应当能单独复制,打开它们不依赖一个正在运行的数据库。
不要直接把 PostgreSQL、MySQL 的数据目录,或者正在使用的应用 SQLite 数据库放进去。文件能传过去,并不表示远端那一组文件构成一致的数据库备份。需要同步数据库备份时,应先通过数据库工具生成可恢复的备份文件,再同步这些文件。虚拟机磁盘和不断变化的大型容器数据目录也不适合作为第一次尝试的对象。
给测试目录起个明确的名字,比如 Documents-Sync,里面先放几份没有敏感内容的小文件。首次共享前,确认接收目录里没有同名的重要文件。已有资料先独立留一份,再考虑合并;不要把“反正会自动同步”当成处理冲突的方法。
VPS 的磁盘要容纳当前文件、保留的历史版本和传输中的临时文件。假设同步目录本身已经有几十 GB,不能只按这几十 GB 买磁盘。如果几个大文件频繁改动,版本目录也会持续增长。CPU 和内存并没有一个适合所有目录的配置:小文件数量、扫描频率和首次建立索引都会影响开销。官方说明初次扫描需要对文件计算哈希,首次启动的负载不能用来代表长期空闲状态。
购买前还应核对服务器的上行带宽、流量计费和磁盘扩容方式。对于每天交换文档的用途,选型的重点是容量和持续在线;如果经常从 VPS 拉大型素材,上行带宽就会影响等待时间。需要云服务器时,可以查看雨云的机型和可选地域,优惠码 KuZhuJi。先按文件量与实际传输方向选套餐,不要仅因为写着大端口就忽略月流量或持续带宽限制。
用 Docker 部署,管理页面留在服务器本机
本文假定 VPS 已安装 Docker Engine 和 Compose 插件,SSH 已能正常登录。先查看版本和端口使用情况:
docker version
docker compose version
sudo ss -lntup | grep -E ':(8384|22000|21027)\b' || true
如果现有应用已经占用了这些端口,先处理冲突,不要直接复制配置启动。以下示例采用 Linux 的 host 网络,因此容器使用宿主机网络,Compose 中不再写 ports。这也意味着监听地址必须在 Syncthing 本身设置,不能指望一条 Docker 端口映射限制管理页面。
准备一个独立目录:
sudo mkdir -p /opt/syncthing/data
sudo chown -R 1000:1000 /opt/syncthing/data
cd /opt/syncthing
1000:1000 对应下面配置里的容器运行 UID 和 GID,不保证就是你当前 SSH 用户的身份。可以用 id 查看本机用户,但不要只改目录所有者而忘记同步修改 PUID、PGID。应用要能读写数据目录,依赖的是数字身份和文件权限,不是用户名恰好一样。
保存 compose.yaml:
services:
syncthing:
image: syncthing/syncthing:2.1.5
container_name: syncthing
hostname: vps-sync
network_mode: host
environment:
PUID: "1000"
PGID: "1000"
STGUIADDRESS: "127.0.0.1:8384"
volumes:
- ./data:/var/syncthing
restart: unless-stopped
官方镜像将 /var/syncthing 作为持久化目录。这里把它完整映射到宿主机 /opt/syncthing/data,服务器重建容器时不会因此丢掉配置和同步文件。后台监听地址显式写成 127.0.0.1:8384,避免误用镜像默认的 0.0.0.0:8384。官方Docker 说明特别提醒了这项差异。
启动并看日志:
docker compose pull
docker compose up -d
docker compose logs --tail=100 syncthing
sudo ss -lntp | grep ':8384'
最后一个命令应当显示管理端口绑定在 127.0.0.1。如果看到 0.0.0.0 或公网地址,先核对环境变量和实际启动的容器,确认监听范围后再继续配对。docker compose ps 显示正在运行,只说明进程没有退出,不代表目录权限、设备连接和文件传输都已经正常。
如果采用 Docker 默认桥接网络,Syncthing 看到的可能是容器内部地址,局域网发现会受影响。官方建议使用 host 网络。本教程按 Linux VPS 编写,不把这份配置直接套在 Docker Desktop 的网络环境上。
从自己的电脑打开后台
在本机终端建立 SSH 转发,把本机的 9090 转到 VPS 管理端口:
ssh -N -L 127.0.0.1:9090:127.0.0.1:8384 user@YOUR_VPS_IP
把 user 和 YOUR_VPS_IP 换成已有的 SSH 用户和地址。浏览器访问 http://127.0.0.1:9090。终端保持连接时页面可用,关闭 SSH 后转发结束。如果本机 9090 已被其他服务占用,可以只改命令中第一个端口,同时修改浏览器地址。
首次进入后设置清楚的设备名称,例如 VPS-Documents,并给 GUI 设置用户名和密码。SSH 转发限制了访问路径,后台自己的认证仍值得保留,避免以后改变监听地址时遗漏这一层。当前方案不需要域名、Caddy 或公网 HTTPS,也不需要在云安全组开放 8384。

这张图来自官方入门文档,展示文件夹、当前设备和远程设备的布局;图中是旧版界面示例,不是本文部署出的 2.1.5 截图。新版按钮位置或分组可能有变化,操作时以“文件夹”和“远程设备”这两个对象为准。
页面左侧的文件夹是本机参与同步的目录,右侧的远程设备是允许连接的另一台机器。添加设备只解决“允许谁连接”,添加并共享文件夹才解决“允许交换哪些文件”。两件事都完成,数据才会开始同步。
配对设备之后,还要共享同一个文件夹
在电脑上安装 Syncthing,打开它的本地管理页面。电脑端和 VPS 端分别查看自己的 Device ID,再在另一端添加对方。名称只是便于辨认,Device ID 才是设备身份。仅知道对方 ID 不会自动获得文件,两边都需要认可连接关系。
先在电脑端添加 Documents-Sync 文件夹,路径选择刚准备的小目录。Folder ID 可以用一个稳定、容易辨认的值,例如 documents-sync。之后在共享设置中勾选 VPS。服务器收到邀请时,确认来源设备,接受文件夹,并指定服务器自己的路径:
/var/syncthing/Documents-Sync
这里填的是容器看到的路径,不是宿主机的 /opt/syncthing/data/Documents-Sync。两者通过前面的挂载对应到同一份内容。Folder ID 要一致,文件夹名称和两台设备的绝对路径却不必相同。Windows 上可以是 D:\Documents-Sync,服务器上可以是上面的 Linux 路径。
第一次不要一边导入大量旧文件,一边不停修改目录设置。先确认两端设备状态已连接,再确认两端文件夹都识别为同一份共享,然后放入一个小文件。等它在服务器端出现后,再让第三台设备加入。这样遇到问题时,可以判断是设备没有连接,还是文件夹没有被共享,而不是同时排查三台机器。
如果只是交换普通资料,可以采用默认“发送与接收”。各设备的新增、修改、删除都可能进入同一份同步状态;这适合两台电脑都需要编辑,但也要求使用者知道操作会影响其他设备。
让 VPS 只收文件,为什么仍然会收到删除
如果工作电脑保存权威副本,VPS 只保留镜像,可以把电脑端设置为“仅发送”,VPS 设置为“仅接收”。电脑不接收其他设备对这个目录的修改;VPS 接收远端变化,服务器本地自行改动的内容不会向外传播。
“仅接收”并不表示永不删除。电脑端删除文件属于远端变化,仍会发送到 VPS。也不要把这个设置理解成文件系统只读权限:Syncthing 需要写目录才能落地接收的文件,其他有权限的程序仍可能修改它。
后台出现红色修复按钮时,应先读清它要执行什么。“覆盖更改”会让仅发送设备的当前状态覆盖其他节点;“撤销本地更改”会把仅接收设备恢复为同步集群里的状态。它们不是普通的重试按钮。服务器本地新增的文件可能被删除,旧内容也可能被覆盖。要留存的资料先复制到同步目录之外,再决定是否执行。
官方文件夹类型说明解释了这些操作的范围。日常工作如果还需要从 VPS 把文件主动发回电脑,就不能简单选择仅接收;应调整工作方式或另建一个用途明确的目录,别靠反复切换模式处理来回传输。
开启版本保留,再另外安排备份
在 VPS 的文件夹设置里打开文件版本控制。第一次使用可以选简单版本控制,并根据文件变化频率设置保留数量。旧文件通常放在该共享目录里的 .stversions,它会占用实际磁盘空间,不是存到一个免费的远端仓库。
本机版本归档只处理其他设备传来的修改或删除。如果直接在 VPS 本地改了文件,Syncthing 不会替这次本地改动保留旧副本。版本功能也按设备、按文件夹分别配置;VPS 开启,不意味着另外两台电脑同步开启。
版本保留能帮助恢复一些误改文件,但如果服务器磁盘损坏,同一个磁盘上的 .stversions 也可能一起丢失;如果设置了清理期限,过期版本会被清理。真正需要长时间保留的资料,应另有一份放在同步关系之外的备份,并检查它能否恢复。不要让同步任务继续管理这份历史副本。
遇到误删时,先暂停相关文件夹的同步,确认哪台机器发生了删除,检查版本记录。恢复之前保存当前仍存在的副本,再选择所需的历史文件。如果没有开启版本保留,且所有节点已经应用删除,不能假定 Syncthing 自带另一个隐藏回收站。官方版本控制文档说明了各种保留策略和适用范围。
显示已连接,但传输速度很慢
先查看远程设备详情里的连接类型。如果显示 Relay,说明连接使用中继,不能直接据此推断 VPS 的公网带宽有问题。中继能让无法直连的设备交换数据,但可用吞吐还受到中继路径影响。改善直连条件,通常比反复重启容器更值得先做。
默认同步通信使用 22000/TCP,以及用于 QUIC 的 22000/UDP。VPS 的云安全组和主机防火墙需要允许计划使用的同步协议,后台 8384 则继续保持本机监听。21027/UDP 用于局域网发现,不需要为了两台公网设备通信就把它随意开放给整个互联网。
如果想先让电脑明确连接 VPS,可以在电脑端远程设备的 Addresses 中保留动态发现,并添加固定地址:
tcp://YOUR_VPS_IP:22000, dynamic
它让电脑知道一个可以尝试的直接地址,并不绕过设备配对,也不保证每条网络都能连通。服务器换 IP 后记得更新这个值。没有公网入口、只能映射端口的 NAT 套餐,还需要按实际映射规则检查可达性,不能把普通独立公网 VPS 的设置原样照搬。
直连已经建立却仍然慢,再分开看两端网络和本机负载。大量小文件与单个大文件的传输不是同一种负载;扫描、计算哈希、慢磁盘和剩余空间不足都可能造成等待。一次完整初始同步期间,网页显示的速度也不代表文件内容只做了网络传输。可以先用一个大小已知的普通文件观察现象,不要为了测速在正式资料目录反复生成、删除大量文件。
防火墙规则和协议说明可以查官方网络配置文档。按自己的 Linux 发行版、云平台和现有防火墙配置调整,别为了排查一个端口把整套防火墙关闭。
保留配置,升级时别重新生成一个设备
除了共享文件,持久化目录还包含设备配置、身份材料和索引状态。恢复时如果只拿回文档,重新启动出的实例可能不是之前已经配对的设备。备份部署配置时,应把 /opt/syncthing/compose.yaml 和整个 /opt/syncthing/data 一起考虑,并保护其中的身份材料,不把配置包公开上传。
需要完整复制这一目录时,先停止 Syncthing,再用备份工具保存完整目录及权限,完成后启动。不要直接热拷贝不断变化的配置数据库,却把得到的文件包称为一定可恢复。这里也不建议把这个运行目录再交给另一组 Syncthing 实时同步。
cd /opt/syncthing
docker compose stop syncthing
# 在此使用自己的备份工具保存 compose.yaml 和 data 目录
docker compose start syncthing
停机期间这台 VPS 不参与同步,其他已连接设备仍按各自的连接情况工作。备份应放到另一块存储或另一台机器,恢复时先在隔离环境核对身份和目录,再接回正式设备,避免两个实例同时拿着同一套身份运行。
更新镜像前保存当前配置和完整数据,阅读目标版本说明,再改 Compose 中的固定版本并拉取。不要直接用更旧的程序打开已经升级的索引数据库;旧版回退需要与旧配置、旧数据状态配套处理。对于现有 1.x 实例,还要额外查看 2.0 的数据库迁移说明,不能因为本文用的是新安装就忽略旧实例的升级过程。
正式共享资料前,确认这些结果:电脑新增的小文件能到 VPS;另一台电脑上线后能收到它;文件修改和删除的行为符合所选模式;VPS 上能找到预期的历史版本;公网无法直接打开管理页面。确认这些之后,再扩大目录范围。单纯看到“已连接”或“已同步”,并不能替代对自己文件修改、删除和恢复流程的理解。











