golang,go,博客,开源,编程

golang p2p同步神器Syncthing

Updated on with 0 views and 0 comments

Syncthing 是一个 开源、点对点(P2P)实时文件同步程序,用于在多台设备(如 Windows、macOS、Linux、Android、BSD、Solaris 等)之间同步文件,无需依赖中央服务器或第三方云存储

一句话介绍

Syncthing = 开源 + 去中心化 + 实时同步 + 本地掌控数据 + 高度自动化

你可以把它理解为一个跨设备、跨平台的“私有云同步工具”,但它不依赖任何云,也没有中心服务器,全靠设备之间自己搞定。


核心理念

数据归你所有(Your Data Is Your Data)

官方的口号就是 “Your data is your data”——你的文件只存在你自己的设备上,不经过任何第三方服务器。对,就是去中心化 + 零信任环境下的数据同步解决方案

这意味着:

  • 不用担心隐私问题。
  • 不用担心第三方公司倒闭、服务中断。
  • 不用付月费。
  • 就算断网,它也能在局域网里继续工作!

架构 & 技术细节

  • 编程语言:Go
  • 通信协议:自研的 BEP(Block Exchange Protocol)
  • 传输层安全:TLS + 设备签名验证
  • 同步机制:基于文件哈希 + 分块传输
  • 数据库:旧版用 LevelDB,2.0 起改用 SQLite
  • 发现机制:
    • 局域网自动发现
    • 全球中继服务器
    • 支持 NAT 穿透

Syncthing 的使用场景

示例一:笔记同步替代 iCloud / Git

你有个 Obsidian 或 Typora 的 Markdown 笔记库,在家里电脑上写,在公司也写,用 Git 管理太麻烦了?Syncthing 一装,设置文件夹共享,自动增量同步 + 冲突标记。你可以边写边同步,不再担心“版本冲突”或“忘记 commit”。

/home/user/obsidian-notes/
   ├── 2025-读书笔记.md
   └── 人类简史笔记.md

→ 配置为同步文件夹,在笔记设备 A 与设备 B 之间自动同步。


示例二:多台服务器部署代码共享目录

你手头有几台云服务器或者树莓派,在上面跑不同的微服务或脚本,但某些目录必须共享(如配置、字典表、模型文件等)?别再 SCP、rsync 来回了,用 Syncthing 搭个 mesh 网,每台机器自动同步对应目录,文件一改,秒同步到位。

比如:

机器 A: /app/config/
机器 B: /data/config/
机器 C: /mnt/shared-config/

→ 三者之间同步同一份 config,不再担心配置不同步问题。


示例三:家庭照片同步 + 备份

你有一部 Android 手机和一个 NAS,拍的照片想自动同步到家里的存储服务器?用 Syncthing-Fork(手机端),和你家 NAS 上部署的 Syncthing 连接,一拍照就开始后台同步。

可选搭配:

  • 设置为“发送者”(手机)+ “接收者”(NAS)
  • 开启版本控制,保留历史版本
  • 设置移动数据下不同步

核心功能

功能说明
文件实时同步文件一变更(如新增、删除、改名),立刻检测到并同步。基于文件监控 API。
多设备同步支持不限数量的设备,互相之间形成 mesh 网络。
TLS 加密 + 签名验证每台设备有自己的设备 ID(基于证书指纹),通信全程加密。
可视化 Web UI网页界面可配置设备、文件夹、权限等。
文件版本控制每个文件支持保留多个历史版本,支持按时间/数量清理策略。
局域网自动发现局域网内设备会广播发现彼此,自动建立连接。
NAT 穿透 + 中继即使设备都在 NAT 后面也能连上;支持配置公网中继。
文件夹权限控制每个文件夹可设置发送/接收者角色,控制单向同步或双向同步。
忽略规则 .stignore类似 .gitignore,可自定义同步时排除哪些文件/目录。

安装部署

桌面端

  • Windows/macOS/Linux 均有官方二进制包。
  • 解压、运行即可启动,有托盘图标和网页 UI(默认监听 127.0.0.1:8384)。

移动端

  • 安卓推荐安装 Syncthing-Fork,更活跃更稳定。
  • 支持后台运行、电池优化、按网络类型同步。

Linux 服务器部署

# 下载并解压二进制
wget https://github.com/syncthing/syncthing/releases/download/v1.30.0/syncthing-linux-amd64-v1.30.0.tar.gz
tar -xzvf syncthing-linux-amd64-v1.30.0.tar.gz
mv syncthing /usr/local/bin/

# 创建 systemd 服务
cat > /etc/systemd/system/syncthing@youruser.service <<EOF
[Unit]
Description=Syncthing - Open Source Continuous File Synchronization
After=network.target

[Service]
User=youruser
ExecStart=/usr/local/bin/syncthing -no-browser -home="/home/youruser/.config/syncthing"
Restart=on-failure
RestartSec=10

[Install]
WantedBy=default.target
EOF

systemctl enable --now syncthing@youruser

总结

它不像 Dropbox 提供 10G 云盘,Syncthing给你无限空间、无限自由、完全掌控

对注重隐私、安全、跨平台和高可用同步的人来说,它非常好用。


标题:golang p2p同步神器Syncthing
作者:mooncakeee
地址:http://blog.dd95828.com/articles/2025/07/23/1753232654120.html
联系:scotttu@163.com