为什么要用 Syncthing?
试想一个场景:你在阿里云服务器上跑着博客、小程序后端、各种 Docker 容器,每次改了代码都要 scp 上传,或者写个备份脚本定期 rsync。麻烦不说,还容易忘了备份,真到服务器挂了那天欲哭无泪。
Syncthing 解决了这个问题:文件在哪改,瞬间同步到另一台设备。不需要手动操作,不需要定时任务,完全静默运行。而且它是开源、免费、端到端加密的,文件不经过任何第三方服务器。
核心概念
Syncthing 的精髓就三个词:设备 → 文件夹 → 共享。
- 设备:每台安装了 Syncthing 的电脑/手机都有一个唯一的设备 ID,像一个身份证号。
- 文件夹:你指定哪些目录要同步,每个文件夹可以独立配置。
- 共享:一个文件夹可以只和部分设备共享,A↔B 同步的项目,C 完全看不到。
这意味着你可以灵活控制:公司文件只同步到笔记本,个人照片同步到家里 NAS,互不干扰。
安装 Syncthing
Linux 服务器(Debian/Ubuntu)
# 下载最新版本(以 v2.1.2 为例)
curl -sL "https://github.com/syncthing/syncthing/releases/download/v2.1.2/syncthing-linux-amd64-v2.1.2.tar.gz" -o /tmp/st.tar.gz
tar xzf /tmp/st.tar.gz -C /tmp
cp /tmp/syncthing-linux-amd64-v2.1.2/syncthing /usr/bin/syncthing
# 创建 systemd 服务实现开机自启
cat > /etc/systemd/system/syncthing.service << 'EOF'
[Unit]
Description=Syncthing
After=network.target
[Service]
ExecStart=/usr/bin/syncthing serve --no-browser --no-restart --home=/var/lib/syncthing
Restart=on-failure
User=root
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable syncthing --now注意:国内服务器可能无法直连 GitHub,可以先把安装包下载到本地再用 scp 传上去,或者用镜像站。
macOS
# 下载并解压到 ~/bin/
curl -sL "https://github.com/syncthing/syncthing/releases/download/v2.1.2/syncthing-macos-arm64-v2.1.2.zip" -o /tmp/st.zip
unzip /tmp/st.zip -d ~/bin/
# 创建 LaunchAgent 实现开机自启
cat > ~/Library/LaunchAgents/com.syncthing.plist << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "...">
<plist version="1.0">
<dict>
<key>Label</key><string>com.syncthing</string>
<key>ProgramArguments</key>
<array>
<string>/Users/你的用户名/bin/syncthing</string>
<string>serve</string>
<string>--no-browser</string>
<string>--no-restart</string>
</array>
<key>RunAtLoad</key><true/>
<key>KeepAlive</key><true/>
</dict>
</plist>
EOF
launchctl load ~/Library/LaunchAgents/com.syncthing.plistAndroid
Google Play 搜索「Syncthing-Fork」安装即可,Material Design 界面,操作直观。
配置设备互联
第一步:获取设备 ID
每台设备启动后都会生成一个唯一 ID。查看方式:
- Linux/macOS:打开 Web 管理界面(默认
http://127.0.0.1:8384),右上角「操作 → 显示 ID」 - Android:App 首页直接显示设备 ID 和二维码
第二步:添加远程设备
在 Mac 的 Web 界面中,点击右下角「添加远程设备」,输入服务器的设备 ID,设备名随便填。服务器端会自动弹出一个确认框,点「添加设备」即可。
注意:两端都要互相添加对方。Mac 上加服务器,服务器上加 Mac。
第三步:创建共享文件夹
比如要把服务器的 /var/www 同步到 Mac 的 /Volumes/298G/server-sync:
- 服务器端:点「添加文件夹」→ 路径填
/var/www→ 在「共享」标签里勾上 Mac 设备 - Mac 端:会自动弹出提示「xxx 想和你共享文件夹 server-sync」→ 点「添加」,路径填你本地想存的目录
配置完成后,Syncthing 会立即开始扫描和同步。你可以在 Web 界面实时看到传输进度。
实战案例:我的博客服务器同步方案
我的博客跑在阿里云上(Typecho + SQLite),之前靠 crontab 定时 rsync 备份到本地硬盘,有两个问题:
- 不是实时的:间隔太短浪费资源,太长可能丢失数据
- 单向的:本地改了文件还得手动上传
换成 Syncthing 后:
- 服务器上改了主题 CSS,保存后1-2 秒内自动同步到本地
- 本地下好了一个新插件文件夹,拖进去瞬间出现在服务器上
- 手机装 Syncthing-Fork 后,可以新建一个独立文件夹只跟电脑同步,服务器完全不知道
关机重启也不用管,两端都设了开机自启,完全无感。
常见问题
Q: 连接不上怎么办?
检查几点:①两端 Syncthing 版本是否一致(大版本号必须相同);②防火墙/安全组是否放了 Syncthing 端口(默认 22000/TCP + 21027/UDP);③国内服务器如果连不上全球发现服务器,可以通过 relay 中继连接,Syncthing 会自动处理。
Q: 对网络要求高吗?
不高。Syncthing 是 P2P 传输,文件直接从 A 到 B,不经过中转服务器。局域网内走内网速度,跨网络走 relay 中继。带宽取决于你的网络。
Q: 手机同步耗电吗?
Syncthing-Fork 默认只在充电 + WiFi 时同步,可以按需调整。日常使用几乎无感。
Q: 有文件冲突怎么办?
如果两台设备同时改了同一个文件,Syncthing 会保留一份冲突副本,文件名后面加 .sync-conflict-日期-时间,不会静默覆盖。
写在最后
Syncthing 属于那种「装了就忘不掉」的工具。它不会弹通知、不需要你手动操作、不占用注意力,但它确确实实在帮你做事。从此服务器文件随时能丢——因为你本地永远有一份实时同步的副本。
开源地址:github.com/syncthing/syncthing: