使用 Syncthing 搭建去中心化文件同步服务

概述

Syncthing 是一款开源的去中心化文件同步工具。它不需要任何云服务器,设备之间直接通信同步数据。相比传统网盘方案,Syncthing 完全由你掌控,没有文件大小限制,也没有隐私泄露风险。

适合场景:多设备文件同步、NAS 数据备份、跨机房文件分发。

准备工作

  • 一台 Linux 服务器(推荐 Ubuntu 22.04+),至少 1GB 内存
  • 需要同步文件的电脑或手机(安装 Syncthing 客户端即可)
  • 管理员权限(sudo)

安装步骤

第一步:添加 Syncthing 官方源

sudo apt-get install -y curl ca-certificates gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://syncthing.net/debian/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/syncthing.gpg
echo "deb [signed-by=/etc/apt/keyrings/syncthing.gpg] https://syncthing.net/debian stable main" | sudo tee /etc/apt/sources.list.d/syncthing.list
sudo apt-get update

第二步:安装 Syncthing

sudo apt-get install -y syncthing

第三步:创建数据目录并初始化

mkdir -p ~/syncthing-data
cd ~/syncthing-data
syncthing

首次启动后,终端会输出类似这样的内容:

INFO: Single cluster total device count 1, P=0.0%, T=0.0%, E=0.0%
INFO: My ID: ABCDEFG-XXXXXXX-YYYYYYY-ZZZZZZZ

记下你的设备 ID(My ID: 后面那串字符),按 Ctrl+C 停止服务。

第四步:设置为 systemd 服务

# 将配置复制到标准位置
sudo mkdir -p /var/lib/syncthing
sudo cp ~/syncthing-data/config.xml /var/lib/syncthing/
sudo chown -R $USER:$USER /var/lib/syncthing

创建用户级 systemd 服务文件:

mkdir -p ~/.config/systemd/user
cat > ~/.config/systemd/user/syncthing.service << 'EOF'
[Unit]
Description=Syncthing - Open Source Continuous File Synchronization
Documentation=man:syncthing(1)
StartLimitIntervalSec=60
StartLimitBurst=4

[Service]
ExecStart=/usr/bin/syncthing serve --no-browser --no-restart --logflags=0
Restart=no
SuccessExitStatus=3 4
RestartForceExitStatus=3 4

[Install]
WantedBy=default.target
EOF

启用并启动:

systemctl --user daemon-reload
systemctl --user enable --now syncthing
systemctl --user status syncthing

如果提示 “Failed to connect to bus: No such file or directory”,先执行:

export XDG_RUNTIME_DIR=/run/user/$(id -u)
systemctl --user daemon-reload

第五步:修改监听地址

默认情况下 Syncthing 只监听 localhost:8384。从外部访问需修改:

nano ~/syncthing-data/config.xml

找到 <address>127.0.0.1:8384</address>,改为:

<address>0.0.0.0:8384</address>

重启服务使配置生效:

systemctl --user restart syncthing

第六步:配置防火墙

sudo ufw allow 8384/tcp   # Web 管理界面
sudo ufw allow 22000/tcp  # Syncthing 同步端口
sudo ufw reload

如果是云服务器(阿里云/腾讯云/AWS),记得在控制台安全组中也放行这两个端口。

第七步:访问管理界面

浏览器打开 http://你的服务器IP:8384,即可看到 Syncthing 的 Web 管理界面。

验证安装

# 检查服务状态
systemctl --user status syncthing

# 检查监听端口
ss -tlnp | grep syncthing

# 查看实时日志
journalctl --user -u syncthing -f

日志中出现 Ready to synchronize 说明服务正常运行。

连接其他设备

在 Web 管理界面中操作:

  1. 点击左侧「操作」→「显示 ID」,复制设备 ID
  2. 在其他设备(电脑/手机)上安装 Syncthing
  3. 点击「添加远程设备」,粘贴刚才的设备 ID
  4. 在远程设备上同样添加你的设备 ID(双向信任)
  5. 选择一个文件夹,勾选「共享」给远程设备
  6. 远程设备确认接收后即可开始同步

常见问题

Q: 端口 22000 连接超时怎么办?

检查服务器安全组是否放行了 TCP 22000 端口。云服务器需要在控制台额外配置安全组规则,仅配置 ufw 不够。

Q: 两台设备不在同一局域网,能同步吗?

可以。Syncthing 支持 NAT 穿透,直连失败时会自动使用全局 Relay 服务器中转。自建 relay 服务器可提升同步速度。

Q: 如何设置文件夹只读(只接收不修改)?

在 Web 界面中编辑文件夹设置,将类型改为「接收备份」,这样远程设备只能上传文件,不能删除或修改。

Q: 磁盘空间满了会怎样?

Syncthing 不会自动删除旧文件。建议在 config.xml 中设置 maxAgeminFreeDisk 参数来管理磁盘空间。

Q: 手机端怎么用?

Android 安装官方「Syncthing-Fork」或「Syncthing」应用。iOS 暂无官方客户端,可通过浏览器访问 Web UI 进行基础操作。

这篇文章对你有帮助吗?