Syncthing:开源去中心化文件同步神器,打造真正的私有云盘

5 阅读8分钟

Syncthing:开源去中心化文件同步神器,打造真正的私有云盘

背景

文件同步是日常刚需,但现有方案存在诸多问题:

  • Dropbox、百度网盘等需要上传文件到第三方服务器
  • 云盘服务价格高昂,免费空间有限
  • 隐私数据存储在别人服务器,安全性无法保障
  • 网络连接不稳定时同步失败
  • 多设备同步需要手动操作
  • 企业文件同步方案复杂且昂贵
  • 跨地区跨国同步速度慢

今天介绍一款开源文件同步利器——Syncthing,它是 Dropbox 的去中心化开源替代方案。

什么是 Syncthing?

Syncthing 是一款开源、跨平台、去中心化的连续文件同步工具,采用 Go 语言编写,不经过任何中央服务器,直接在设备之间建立加密通道,实现实时、双向、增量的文件同步。

核心理念: "Open Source Continuous File Synchronization"——开源连续文件同步。

核心特性:

特性说明
P2P 去中心化无需服务器,设备直连
端到端加密数据全程加密传输
实时同步文件变更自动同步
增量同步只同步变化的部分
跨平台Windows/macOS/Linux/Android
开源免费MPL 2.0 许可证
断点续传网络中断后自动续传
版本控制支持文件历史版本

GitHub 地址: github.com/syncthing/s…

Star 数量: 60K+

Syncthing vs Dropbox vs Nextcloud

对比项SyncthingDropboxNextcloud
同步方式P2P 直连云端中转云端中转
服务器无需服务器需要云端需要自建服务器
数据存储设备本地云端服务器自己的服务器
隐私完全自主数据在云端数据在自有服务器
离线同步✅ 支持❌ 不支持❌ 不支持
同步速度取决于网络受限于云端受限于服务器
搭建成本免费订阅费服务器成本

Syncthing 的独特优势:

  • 无需任何服务器,零成本运行
  • P2P 直连,数据不经过第三方
  • 端到端加密,数据完全自主
  • 实时同步,文件变更自动同步
  • 增量同步,只传变化的部分
  • 离线同步,设备随时同步
  • 跨平台支持,所有主流系统

工作原理

Syncthing 采用 P2P 去中心化架构:

┌─────────────────────────────────────────────────────────────────┐
│                         P2P 网络                                 │
│                                                                 │
│  ┌─────────┐                ┌─────────┐                         │
│  │  电脑 A  │◀══════════════▶│  电脑 B  │                         │
│  │ (Windows) │   P2P 直连    │ (Linux)  │                         │
│  └─────────┘                └─────────┘                         │
│        │                           │                            │
│        │     NAT 穿透 / 中继       │                            │
│        │                           │                            │
│  ┌─────────┐                ┌─────────┐                         │
│  │  手机    │◀══════════════▶│  平板    │                         │
│  │(Android) │   P2P 直连    │(iPad)    │                         │
│  └─────────┘                └─────────┘                         │
│                                                                 │
│  所有设备实时同步,数据完全自主                                   │
└─────────────────────────────────────────────────────────────────┘

同步流程:

  1. 设备发现:使用 local discovery 和 global discovery
  2. 连接建立:通过 NAT 穿透或中继服务器
  3. 加密传输:使用 TLS 加密所有数据
  4. 增量同步:对比文件哈希,只传变化部分
  5. 冲突处理:检测冲突文件并提示用户

快速上手

Docker 部署(推荐)

创建 docker-compose.yml:

version: '3'

services:
  syncthing:
    image: syncthing/syncthing:latest
    container_name: syncthing
    restart: unless-stopped
    ports:
      - "8384:8384"      # Web UI
      - "22000:22000/tcp" # TCP 传输
      - "22000:22000/udp" # QUIC 传输
      - "21027:21027/udp" # 发现协议
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Shanghai
    volumes:
      - ./config:/config
      - ./data:/data
    hostname: my-syncthing

启动服务:

# 启动服务
docker-compose up -d

# 查看运行状态
docker-compose ps

# 查看日志
docker-compose logs -f

访问 Web 界面:

http://your-server-ip:8384

首次访问需要设置管理员用户名和密码

桌面客户端安装

Windows:

1. 下载安装包
   https://github.com/syncthing/syncthing/releases

2. 运行安装程序

3. 系统托盘出现 Syncthing 图标

4. 点击图标打开 Web 界面

macOS:

# 使用 Homebrew 安装
brew install syncthing

# 启动 Syncthing
syncthing serve

# 或安装 GUI 版本
brew install --cask syncthing

Linux:

# Ubuntu/Debian
sudo apt install syncthing

# 启动 Syncthing
syncthing serve

# 设置开机自启
sudo systemctl enable syncthing@username

Android 客户端

安装 Syncthing:

1. Google Play 搜索 "Syncthing"
2. 或使用 F-Droid 安装
3. 安装后添加设备
4. 配置同步文件夹

核心功能详解

1. 设备管理

添加设备:

添加步骤:
1. 打开 Web 界面 → Actions → Show ID
2. 复制设备 ID
3. 在另一台设备输入该 ID
4. 设备连接后自动同步

设备 ID 示例:
XHPST-CTRB-HHHRR-MVCGS-EOKCL-EIFJB-SRXKL-EOKBS

设备设置:

设备选项:
- 设备名称:自定义设备名称
- 压缩传输:可选择压缩级别
- 自定义证书:使用自定义 TLS 证书
- 引入忽略列表:忽略特定文件

2. 文件夹同步

创建同步文件夹:

1. Web 界面 → Add Folder
2. 配置文件夹:
   - Folder Label:文件夹名称
   - Folder Path:本地路径
   - Folder ID:自动生成
3. 设置共享设备
4. 配置同步选项

文件夹配置示例:

Folder Configuration:
- Folder Label: "Documents"
- Folder Path: /home/user/Documents
- Folder ID: abc-def-ghi (自动生成)
- Sharing:
  - Share with device: [电脑, 手机]
- Sync Options:
  - Pull Order: Normal
  - Ignore Permissions: false
  - Ignore Patterns: false

3. 同步选项

高级同步配置:

同步模式:
- 发送 & 接收:双向同步
- 发送只读:只上传不下载
- 接收只读:只下载不上传

文件版本控制:
- 无版本控制
- 简单版本控制(保留 N 个版本)
- 外置版本控制(使用外部工具)
- 垃圾桶模式(删除后保留一段时间)

版本控制配置:

# 简单版本控制
<folder id="abc">
    <versioning type="simple">
        <param name="keep">5</param>
    </versioning>
</folder>

# 垃圾桶模式(30天后删除)
<folder id="abc">
    <versioning type="trashcan">
        <param name="cleanoutDays">30</param>
    </versioning>
</folder>

4. 忽略规则

忽略模式语法:

语法规则:
(?i)          # 大小写不敏感
(?d)          # 排除隐藏文件
(?l)          # 符号链接
*             # 匹配任意字符
**            # 匹配路径中的任意目录
?             # 匹配单个字符

示例:
(?i).*         # 忽略所有隐藏文件
*.tmp          # 忽略所有 tmp 文件
(?d).*         # 不忽略隐藏文件
**/.DS_Store   # 忽略所有平台的 DS_Store
**/node_modules # 忽略 node_modules 目录
**/Thumbs.db   # 忽略 Windows 缩略图

常用忽略规则:

(?i).ds_store
(?i).thumbs.db
(?i)thumbs.db
(?i)desktop.ini
*.tmp
*.temp
*.log
**/node_modules
**/.git
**/.svn

5. NAT 穿透与中继

连接方式:

方式说明适用场景
P2P 直连设备直接建立连接同一网络或公网
NAT 穿透UDP 打洞建立连接不同 NAT 后
中继转发通过中继服务器无法穿透时
两者都行自动选择最优默认选项

配置中继服务器:

# 配置自定义中继服务器
relays:
  - address: relay.example.com:443
    listenAddress: 0.0.0.0:22000

6. 通知与日志

通知设置:

通知类型:
- 同步完成通知
- 同步错误通知
- 设备连接/断开通知
- 文件冲突通知
- 外部版本变更通知

日志查看:

日志级别:
- Fatal
- Error
- Warning
- Notice
- Informational
- Debug

查看位置:
Web 界面 → Actions → Logs

高级配置

反向代理配置

Nginx 配置:

server {
    listen 443 ssl;
    server_name sync.example.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://localhost:8384;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location /rest {
        proxy_pass http://localhost:8384;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location /nevents {
        proxy_pass http://localhost:8384;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

配置最大传输速度

# 全局限速
<options>
    <maxSendKbps>1000</maxSendKbps>
    <maxRecvKbps>1000</maxRecvKbps>
</options>

# 定时限速
<options>
    <bandwidthLimits>
        <device id="ABCDEF-GHIJKL">
            <send>1000</send>
            <recv>2000</recv>
        </device>
    </bandwidthLimits>
</options>

用户认证配置

启用 API 密钥认证:

# 生成 API 密钥
syncthing generate-api-key

# 配置到 config.xml
<api>your-api-key-here</api>

使用用户名密码:

<gui enabled="true" TLS="false">
    <address>127.0.0.1:8384</address>
    <user>admin</user>
    <password>your-hashed-password</password>
</gui>

HTTPS 配置

自签名证书:

# 生成自签名证书
syncthing generate-cert

# 证书位置
~/.config/syncthing/https-cert.pem
~/.config/syncthing/https-key.pem

Let's Encrypt 证书:

<gui enabled="true" TLS="true">
    <address>0.0.0.0:8384</address>
    <certFile>/etc/letsencrypt/live/sync.example.com/fullchain.pem</certFile>
    <keyFile>/etc/letsencrypt/live/sync.example.com/privkey.pem</keyFile>
</gui>

常见问题

Q:Syncthing 和 Nextcloud 有什么区别?

A:

  • Syncthing 是 P2P 直连,无需服务器
  • Nextcloud 需要自建服务器
  • Syncthing 数据不经过任何第三方
  • Nextcloud 提供更多功能(协作、分享等)
  • Syncthing 更适合个人/小团队快速同步

Q:如何加速同步速度?

A:

  • 确保设备在同一个局域网
  • 配置端口转发提升 NAT 穿透
  • 使用有线网络代替 WiFi
  • 调整带宽限制设置
  • 启用 QUIC 协议(UDP)

Q:数据安全性如何保障?

A:

  • 所有传输使用 TLS 加密
  • 设备之间端到端加密
  • 可选设置设备密码
  • 支持自定义证书
  • 文件可设置只读权限

Q:同步失败怎么办?

A:

  • 检查网络连接状态
  • 确认设备 ID 正确
  • 查看 Syncthing 日志
  • 尝试重启 Syncthing
  • 检查防火墙端口
  • 查看中继服务器状态

Q:支持多设备同步吗?

A:

  • 支持无限设备同步
  • 最多支持几十个设备
  • 所有设备两两互联
  • 数据自动分发

Q:如何更新 Syncthing?

A:

# Docker 更新
docker-compose pull
docker-compose up -d

# Linux 更新
sudo apt update && sudo apt upgrade syncthing

# 或下载新版本替换
sudo systemctl stop syncthing
wget https://github.com/syncthing/syncthing/releases/latest/...
sudo systemctl start syncthing

适用场景

推荐使用:

  • 个人多设备文件同步
  • 家庭照片自动备份
  • 团队文档实时同步
  • 替代 Dropbox 同步
  • NAS 与电脑同步
  • 隐私敏感的数据同步
  • 无公网服务器的同步需求

不推荐使用:

  • 需要文件分享给别人的场景
  • 需要在线协作编辑
  • 超大规模企业文件管理
  • 需要中心化存储审计

总结

Syncthing 以"P2P 直连 + 端到端加密 + 实时同步 + 零成本"的组合,成为了文件同步领域的最佳开源选择。

核心优势回顾:

  • P2P 去中心化:无需服务器,设备直连
  • 端到端加密:数据全程加密,完全自主
  • 实时同步:文件变更自动同步
  • 增量同步:只传变化部分,高效省流量
  • 跨平台支持:覆盖所有主流系统
  • 开源免费:无任何功能限制

对于追求数据自主、隐私安全、零成本同步的个人和团队,Syncthing 是最佳选择。


本文由无边界科技技术团队分享,专注软件开发与技术解决方案。

官网:wubianj.com

© 版权归无边界科技所有,版权所有。