搬瓦工 VPS 部署 Syncthing P2P 文件同步高级配置教程
Syncthing 是一款开源的去中心化文件同步工具,无需依赖第三方云服务,通过 P2P 协议在多台设备之间直接同步文件。所有传输数据均通过 TLS 加密,且源代码完全开源可审计。将搬瓦工 VPS 作为 Syncthing 的常驻节点,可以确保文件在任何时候都有一个在线设备可以同步。本教程将介绍 Syncthing 的高级配置方法,包括多设备组网、版本控制和安全设置。部署前请确保已安装好 Docker 和 Docker Compose。
一、Syncthing 核心概念
- 设备 ID:每个 Syncthing 实例的唯一标识符,基于 TLS 证书生成。
- 共享文件夹:在设备间同步的目录,每个文件夹可选择与不同的设备共享。
- 发现服务器:帮助设备相互发现对方的 IP 地址和端口。
- 中继服务器:当设备间无法直接连接时,通过中继服务器传输数据。
二、Docker 部署
mkdir -p /opt/syncthing && cd /opt/syncthing
cat > docker-compose.yml <<'EOF'
version: '3.8'
services:
syncthing:
image: syncthing/syncthing:latest
container_name: syncthing
restart: always
hostname: vps-syncthing
environment:
PUID: 1000
PGID: 1000
volumes:
- syncthing_config:/var/syncthing/config
- /opt/sync-data:/var/syncthing/data
ports:
- "127.0.0.1:8384:8384"
- "22000:22000/tcp"
- "22000:22000/udp"
- "21027:21027/udp"
volumes:
syncthing_config:
EOF
docker compose up -d
三、初始配置与安全
# 通过 SSH 隧道访问 Web 界面
ssh -L 8384:127.0.0.1:8384 root@your-server-ip
首次访问 http://localhost:8384 时,立即设置 GUI 密码。然后在"设置 > 连接"中配置监听地址和发现服务器。
3.1 获取设备 ID
# 通过 API 获取设备 ID
curl -s -H "X-API-Key: YOUR_API_KEY" http://localhost:8384/rest/system/status | python3 -m json.tool | grep myID
3.2 添加远程设备
在 Web 界面中点击"添加远程设备",输入另一台设备的设备 ID。在两台设备上互相添加对方后,即可开始配置共享文件夹。
四、高级同步配置
4.1 忽略规则
# 在共享文件夹根目录创建 .stignore 文件
cat > /opt/sync-data/project/.stignore <<'EOF'
// 忽略日志文件
*.log
*.log.*
// 忽略临时文件
*.tmp
*.swp
*~
// 忽略编译产物
node_modules
__pycache__
.git
vendor
dist
build
// 忽略大文件
(?d)*.iso
(?d)*.zip
EOF
4.2 版本控制
Syncthing 支持多种文件版本控制策略,在文件夹设置的"版本控制"选项卡中配置:
- 回收站式:删除和覆盖的文件保留在 .stversions 目录中。
- 简单版本控制:保留指定数量的旧版本。
- 阶梯式版本控制:按时间间隔保留版本(如最近 1 小时每 30 秒一个版本,之后每天一个版本)。
- 外部版本控制:调用自定义脚本处理旧版本。
4.3 单向同步(仅发送/仅接收)
在文件夹高级设置中,可以将 VPS 设置为"仅发送"(作为主节点)或"仅接收"(作为备份节点),实现单向同步。
五、API 自动化管理
# 获取 API Key
docker exec syncthing cat /var/syncthing/config/config.xml | grep apikey
# 获取同步状态
curl -s -H "X-API-Key: YOUR_KEY" http://localhost:8384/rest/db/status?folder=default | python3 -m json.tool
# 强制重新扫描
curl -X POST -H "X-API-Key: YOUR_KEY" http://localhost:8384/rest/db/scan?folder=default
# 获取连接信息
curl -s -H "X-API-Key: YOUR_KEY" http://localhost:8384/rest/system/connections | python3 -m json.tool
六、性能优化
# 在配置文件中调整扫描间隔(减少磁盘 IO)
# 通过 Web 界面:文件夹设置 > 高级 > 文件系统监控间隔
# 推荐设置 300 秒(5 分钟)
# 限制带宽使用
# 设置 > 连接 > 限速
# 入站/出站限速,防止同步占满 VPS 带宽
七、防火墙配置
# Syncthing 需要以下端口
# 22000/TCP+UDP - 同步协议
# 21027/UDP - 本地发现
# UFW 配置
ufw allow 22000/tcp
ufw allow 22000/udp
ufw allow 21027/udp
八、监控同步状态
# 监控脚本
cat > /opt/syncthing/check-sync.sh <<'EOF'
#!/bin/bash
API_KEY="YOUR_API_KEY"
STATUS=$(curl -s -H "X-API-Key: $API_KEY" http://localhost:8384/rest/db/status?folder=default)
NEED_FILES=$(echo "$STATUS" | python3 -c "import sys,json;print(json.load(sys.stdin).get('needFiles',0))")
if [ "$NEED_FILES" -gt 0 ]; then
echo "警告:有 $NEED_FILES 个文件需要同步"
fi
EOF
chmod +x /opt/syncthing/check-sync.sh
九、常见问题
设备离线无法同步
VPS 作为常驻在线节点的优势就在于此。确保 VPS 上的 Syncthing 保持运行,其他设备上线后会自动从 VPS 获取最新文件。
同步冲突
当同一文件在多台设备上同时修改时,Syncthing 会生成冲突副本(文件名包含 .sync-conflict)。建议配置版本控制以便恢复。
总结
Syncthing 是不依赖第三方服务的去中心化同步方案,搬瓦工 VPS 作为常驻节点确保了同步的可靠性。如果需要实时单向同步,可以参考 Lsyncd 实时同步教程;需要传统的文件同步备份,可以参考 Rsync 教程。选购搬瓦工 VPS 请参考 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣,购买链接:bwh81.net。