搬瓦工 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

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。