VPS文件同步选Syncthing还是Nextcloud?
Syncthing是点对点同步,不保留服务器权威副本;Nextcloud提供账户、Web访问和共享链接,但需要PHP、数据库与Web服务器。了解1 GB VPS如何选择,以及为什么两者都不是备份。
Syncthing 与 Nextcloud:决定两者差异的关键
Syncthing 与 Nextcloud 的差异归根结底只有一个结构性区别,其他差异都由此产生。Syncthing 采用点对点模式。每台设备都保存完整文件夹,而且没有任何副本是权威副本。Nextcloud 是服务器。文件集中存放在一台机器上,用户账户位于文件之前,客户端从服务器拉取副本。
因此,Syncthing 没有共享链接,也无法通过 Web 查看文档。系统中没有可供提供服务的中心副本,因此浏览器没有可请求的内容。Nextcloud 同时提供这两项功能,但需要 PHP 运行时、数据库服务器、Web 服务器和用于 TLS(传输层安全)的反向代理。
所有相关设备都属于您时,选择 Syncthing。需要通过浏览器或让其他人访问文件时,选择 Nextcloud。
每种方案中 VPS 实际负责什么
运行 Nextcloud 的 VPS 是数据的存放位置。即使删除笔记本上的本地副本,文件仍保留在服务器上,因为服务器始终是原始数据所在的位置。
运行 Syncthing 的 VPS 负责不同的工作:它是一个始终在线的对等节点。Syncthing 只会在两台设备同时在线时直接传输数据。因此,两台从不同时开机的笔记本永远无法完成同步,无论等待多久。添加一个永不休眠的 VPS 作为第三个对等节点后,问题就解决了。笔记本 A 在 09:00 推送数据,笔记本 B 在 22:00 拉取数据,VPS 在这段时间内保存该文件夹。
这是一个真正有用的用途,但它的能力范围小于“Dropbox 替代方案”。Syncthing 不会生成可发送给客户的链接。如果这是您的需求,请在此停止,并改为阅读自托管 Dropbox 替代方案汇总。
小型 VPS 上各自的资源成本
Syncthing 是一个单独的 Go 二进制文件。它监听套接字,将文件索引保存在本地数据库中,整个软件栈就只有这些。自 2.0 版本起,该索引使用 SQLite,而不再使用 LevelDB,因此从 1.x 安装升级时,首次启动会执行一次性迁移。文件夹数量较多时,迁移可能需要很长时间。请等待迁移完成。无需安装其他组件,也无需为其他组件打补丁。
Nextcloud 需要更多组件。截至 2026 年 8 月,Nextcloud 35 支持 PHP 8.3 至 8.5,后端使用 MariaDB 或 PostgreSQL,并通过 Apache 2.4 或带 php-fpm 的 nginx 提供服务。管理手册建议“每个进程至少使用 512MB RAM”,而 php-fpm 会同时运行多个工作进程。
在 1 GB VPS 上,Syncthing 运行宽裕,而 Nextcloud 的资源余量较小。这并不意味着 Nextcloud 是错误的选择,而是意味着需要投入更多维护成本:需要保持最新的组件从一个增加到四个。这篇介绍 Docker、TLS 和备份的 VPS 上部署 Nextcloud 指南中的容器方案,是承担这些组件成本时最省事的方式。在此基础上添加基于浏览器的文档编辑功能,还会进一步提高最低资源要求;OnlyOffice 与 Collabora 对比针对 2 到 4 GB 的服务器详细讨论了这一点。
在 VPS 上安装 Syncthing
Ubuntu 提供 syncthing 软件包,但它远远落后于上游版本。请使用项目自己的软件仓库。
sudo mkdir -p /etc/apt/keyrings
sudo curl -L -o /etc/apt/keyrings/syncthing-archive-keyring.gpg https://syncthing.net/release-key.gpg
echo "deb [signed-by=/etc/apt/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable-v2" | sudo tee /etc/apt/sources.list.d/syncthing.list
sudo apt-get update
sudo apt-get install syncthing
syncthing --versionsyncthing --version 的输出应包含以 syncthing v2 开头的行。如果其中显示 v1,说明 apt 仍优先选择发行版软件包。请将上游软件仓库的优先级设为更高,然后重新安装。
printf "Package: *\nPin: origin apt.syncthing.net\nPin-Priority: 990\n" | sudo tee /etc/apt/preferences.d/syncthing.pref请让它以普通用户账户运行 systemd 服务。这样即使没有用户登录,服务也会在启动时自动运行。
sudo systemctl enable --now syncthing@youruser.service
systemctl status syncthing@youruser.servicesystemctl status 的输出应为 active (running)。配置文件和索引文件会保存到 /home/youruser/.local/state/syncthing,配置文件为 config.xml。在 Syncthing 1.27 之前创建的安装会将这些文件保存在 ~/.config/syncthing,因此在不同机器之间复制文件前,请检查这两个路径。
然后开放端口。Syncthing 使用 22000/TCP 传输同步协议,使用 22000/UDP 传输 QUIC,并使用 21027/UDP 进行本地发现。本地发现依赖广播和多播,无法跨越互联网,因此在 VPS 上只需开放前两个端口。
sudo ufw allow 22000/tcp
sudo ufw allow 22000/udp
sudo ufw statusufw status 应列出这两条规则。如果输出 Status: inactive,说明 ufw 没有过滤任何流量,当前只有服务商的网络防火墙在生效。也请检查服务商控制面板,因为大多数主机将其作为独立的控制项。服务正在运行,但远程设备停留在 Disconnected,通常表示这两个防火墙中的某一个仍未开放相应端口。
不公开发布也能访问 Syncthing GUI
Web GUI(图形用户界面)默认监听 127.0.0.1:8384,因此只响应来自服务器本机的请求。这个默认设置可以降低风险,因为 GUI 包含 API(应用程序编程接口)密钥,利用该密钥可以修改服务器上的所有文件夹路径。
不要首先将其开放到公网。文档明确说明了将服务绑定到网络地址的后果:“指定计算机的 LAN 地址并不能将访问限制为仅本地网络中的设备!”请改为从笔记本电脑通过 SSH 转发该端口。
ssh -L 8384:127.0.0.1:8384 youruser@your.vps.example在该会话保持连接期间,通过本地浏览器打开 http://127.0.0.1:8384。SSH 会话结束时,隧道也会关闭,之后不会留下监听端口。
如果确实需要直接访问 GUI,请先设置凭据。服务器上没有浏览器,因此需要从命令行完成设置。
sudo systemctl stop syncthing@youruser.service
sudo -H -u youruser syncthing generate --gui-user=admin --gui-password=-
sudo systemctl start syncthing@youruser.service-H 很重要,因为没有它,sudo 会保留 root 的主目录,而您编辑的会是错误的 config.xml。将单个短横线作为密码值时,syncthing generate 会从标准输入读取密码。这样密码不会出现在 shell 历史记录中,并且写入文件前会先进行哈希处理。登录后,在 GUI 设置中启用 HTTPS。
为什么 Syncthing 会传播您的错误
Syncthing 的 FAQ 直接回答了备份问题:“Syncthing 不是理想的备份应用,因为您对文件所做的所有更改(修改、删除等)都会传播到您的所有设备。”
如果您误删了笔记本电脑上的文件夹,Syncthing 会完全按照设计运行。它会在几秒内将该文件夹从所有设备上删除。同步意味着保持一致,而保持一致也包括一致认为某个文件已经不存在。
文件版本控制可以缓解这个问题,但除非手动启用,否则默认处于关闭状态。文档说明,版本控制“默认设置为‘不保留文件版本’,也就是说不会保留文件的旧副本”。每个文件夹都可以选择 4 种策略。Trash Can 会保留每个因远程更改而被删除或替换的文件的 1 个副本。Simple 会为每个文件保留指定数量的旧版本。Staggered 会随着版本变旧逐步减少历史记录:保留 1 天内的每小时副本、1 个月内的每日副本,依此类推。External 会将每个决定交给您编写的命令。旧副本会存放在共享文件夹中的 .stversions 目录内。
在 VPS 对等设备上设置 Staggered,并让笔记本电脑保持关闭版本控制。这样,始终在线的对等设备会保存历史版本,而笔记本电脑可以保持精简。
Nextcloud 在这方面处理得更好,但仍然不是备份工具。删除的文件会进入回收站,编辑历史由 Versions 应用保存,但磁盘空间不足时,这两者都会自动清理。笔记本电脑上的进程如果对文件进行加密,Syncthing 会将这些加密后的版本同步上去,而原始的可用副本会按照自身的清理计划逐渐过期。
无论使用哪种工具,底层都需要真正的备份:由独立程序创建快照,将快照写入同步客户端无法访问的位置,并至少恢复 1 次,以确认恢复过程有效。restic 与 BorgBackup 对比介绍了应将哪一种工具用于数据目录。
两者处理冲突的区别
如果双方在两次同步之间修改了同一个文件,两个工具都会生成冲突文件。区别在于谁能看到这个文件。
Syncthing 会将未获胜的副本重命名为 <filename>.sync-conflict-<date>-<time>-<modifiedBy>.<ext>。修改时间较早的副本会失败。时间相同时,设备 ID 的前 63 位中数值较大的设备会失败。这个规则虽然是任意的,但所有对等设备都会得出相同结果。接下来是容易被忽略的一点:这些文件“创建后会按普通文件处理,因此会在设备之间传播”。每个对等设备都会收到冲突副本。清理冲突只需删除一次,该删除操作会同步到其他设备,但在此之前,您会先在所有机器上看到它。
Nextcloud 桌面客户端会写入 <name> (conflicted copy YYYY-MM-DD HHMMSS).<ext>,例如 mydata (conflicted copy 2018-04-10 093612).txt;默认情况下,它不会上传该文件。客户端手册的解释是:由作出修改的人解决冲突最合适,而向其他用户显示冲突只会造成混淆。如果希望采用相反的行为,请在客户端环境中设置 OWNCLOUD_UPLOAD_CONFLICT_FILES=1。
因此,Syncthing 冲突是整个集群范围内的事件,而 Nextcloud 冲突只会保留在一台桌面设备上。
服务器上的文件夹类型可提高 Syncthing 的安全性
Syncthing 有三种文件夹类型。在 VPS 上选择正确的类型,可以避免一大类误操作。
- Send & Receive 是默认类型。更改会在两个方向同步。
- Send Only 会忽略集群发送的所有内容。设备只需要发布数据时使用此类型。发生同步偏差时,GUI 会显示红色的 “Override Changes” 按钮。点击后,会将本地状态推送到所有设备。
- Receive Only 会应用集群中的更改,但不会将本地编辑内容传回。VPS 作为归档设备时使用此类型。在该设备上进行本地编辑时,会显示红色的 “Revert Local Changes” 按钮。
在 VPS 上使用启用 Staggered versioning 的 Receive Only 文件夹,可以创建带版本的镜像。笔记本上的删除操作仍会同步,因为删除是合法的集群更改;但旧副本会保存到 .stversions,而不会直接消失。
应选择哪一个
下面的 7 行涵盖了人们实际提出这个问题的原因。
The data behind this chart
[
{
"label": "Keep two of my own laptops in sync",
"pick": "Syncthing",
"notes": "No accounts to manage. The VPS is the peer that is always awake."
},
{
"label": "Send a download link to a client",
"pick": "Nextcloud",
"notes": "Syncthing has no public link sharing at all."
},
{
"label": "Open a file from a borrowed browser",
"pick": "Nextcloud",
"notes": "The Syncthing GUI shows sync state, never file contents."
},
{
"label": "Sync 200 GB between machines I own",
"pick": "Syncthing",
"notes": "Peers transfer directly. The VPS copy is optional."
},
{
"label": "Phone photo upload with a store app",
"pick": "Nextcloud",
"notes": "The official Syncthing Android app ended in December 2024."
},
{
"label": "Calendar and contacts alongside files",
"pick": "Nextcloud",
"notes": "Syncthing syncs files. That is the entire feature set."
},
{
"label": "1 GB VPS with nothing else to spare",
"pick": "Syncthing",
"notes": "One Go binary against PHP plus a database plus a web server."
}
]先看第一行。在两台自己的笔记本电脑之间保持同步,指向 Syncthing。这正是 VPS 作为永不休眠的对等端发挥作用的场景。凡是涉及浏览器、链接或其他人的行,都指向另一种选择。
如果 Nextcloud 一直胜出,但您担心它的资源占用,请继续阅读Seafile 与 Nextcloud 的比较。Seafile 仍采用服务器模型,但底层使用了不同的同步引擎。
在同一台 VPS 上同时运行
两者并不互斥。使用 Syncthing 在自己的设备之间传输文件,同时由 Nextcloud 处理共享和日历,是一种常见的部署方式。
如果同时使用两者,请遵守一条规则:不要让 Syncthing 指向 Nextcloud 的数据目录。Nextcloud 会在数据库中跟踪每个文件,因此,从外部出现在磁盘上的文件,在数据库完成同步前不会显示在 Web 界面中。在 Nextcloud 安装目录中执行:
sudo -u www-data php occ files:scan --all该命令会输出它扫描到的文件和目录数量。通过定时任务运行它只能作为临时解决方案,不能算合理的设计。请为每个工具分配独立的目录。如果您还在决定这台服务器到底应托管哪些内容,那么先阅读2026 年适合自行托管的内容指南,比先选择同步工具更合适。
FAQ
Syncthing 可以替代 Dropbox 吗?
只能替代您自己的设备保持同步这一部分。Syncthing 没有公开共享链接,也没有用户账户;其 Web 界面不会显示文件内容,因为不存在可供浏览器请求的集中副本。官方 Android 应用在 2024 年 12 月发布后停止维护,并已从 Play Store 下架,因此现在的手机支持取决于社区分支。如果您需要向他人发送链接,就需要服务器,也就是 Nextcloud 或类似工具。
Syncthing 是备份工具吗?
不是,项目方对此有明确说明。删除和修改会传播到所有设备,因此误删文件后,几秒内所有设备上的副本都会消失。为每个文件夹启用文件版本控制,尤其是在一台始终在线的对等设备上使用 Staggered 版本控制,可以通过 .stversions 目录提供恢复窗口。但它不能替代由独立工具将快照保存到独立存储上的备份方案。
为什么我在 Syncthing Web GUI 中看不到文件?
因为 GUI 是用于管理同步状态的控制面板,不是文件浏览器。它会显示文件夹、设备、传输进度和冲突数量,但不会列出或打开文件内容。这是点对点设计的结果:文件存储在您的设备上,VPS 上的 GUI 只负责管理文件传输过程。
Syncthing 在 VPS 上需要开放哪些端口?
同步协议使用 22000/TCP,QUIC 传输使用 22000/UDP。端口 21027/UDP 用于通过广播和多播进行本地发现,这些流量不会跨越互联网,因此应在公网服务器上保持关闭。将 8384 上的 GUI 绑定到 127.0.0.1,并通过 SSH 隧道访问。还要检查服务商的网络防火墙和 ufw,因为它们是独立的控制项。
我可以在同一台 VPS 上运行 Syncthing 和 Nextcloud 吗?
可以。在内存为 2 GB 或更高的服务器上这样部署通常是合理的。请将两者的目录分开。Nextcloud 会在其数据库中建立文件索引,因此 Syncthing 写入 Nextcloud 存储目录的内容,只有在 occ files:scan 运行后才会显示在 Web 界面中。两个工具同时写入同一目录还会生成双方都无法按预期处理的冲突文件。