Syncthing 部署实战:3 套系统手把手完成设备间文件直传
【免费下载链接】syncthingOpen Source Continuous File Synchronization项目地址: https://gitcode.com/GitHub_Trending/sy/syncthing
Syncthing(开源连续文件同步工具)让多台设备在不上云的前提下自动保持文件一致。这篇 Syncthing 部署指南覆盖 Windows、macOS、Linux 三个平台:从装前自检、首次配置、两台设备配对,到服务化常驻与"连不上/不同步"的排查,跟着做完即可跑通第一组双向同步。
先搞懂它凭什么替代网盘:原理与前置清单
设备直传:Syncthing 的同步机制
设备之间通过 P2P(Peer-to-Peer,对等网络,双方不经第三方直接互传)建立连接,全程使用 TLS(Transport Layer Security,传输层安全协议,负责加密与双向身份核验)加密。文件内容按块比对,走 BEP(Block Exchange Protocol,块交换协议,只传缺失的块而不是整个文件),所以大文件二次同步几乎不耗流量。
| 维度 | 云端同步 | Syncthing 直传 |
|---|---|---|
| 流量成本 | 上传+下载双向计费 | 局域网近乎零成本 |
| 隐私 | 数据落在服务商 | 仅存在于你自己的设备 |
| 离线可用性 | 依赖云端 | 设备在线即可,断网可走中继 |
| 冲突处理 | 云端裁决 | 本地生成冲突副本,不丢数据 |
两台设备完成一次同步的完整过程:
装前自检:版本、端口与配置目录
| 检查项 | 要求 |
|---|---|
| 操作系统 | Windows 7 SP1+ / macOS 10.13+ / 主流发行版 Linux |
| 内存与磁盘 | 4GB 内存起步;同步目录所在盘预留出文件总量的空间 |
| 配置位置 | Windows:%LOCALAPPDATA%\Syncthing;macOS:~/.config/syncthing;Linux:~/.config/syncthing |
提示:日志默认写在配置目录下(Windows 为
%LOCALAPPDATA%\Syncthing\synchronisation.log,Unix 系为~/.local/state/syncthing/logs/syncthing.log)。排查"不同步"时先看这里,比翻服务日志快。
3 种系统最快的 Syncthing 安装方式
Linux 安装(二进制 + CLI 验证)
- 从发行版仓库或官方发布页取得压缩包(下文以版本
vX.Y.Z为占位,替换为实际值)并放入 PATH:
tar -xzf syncthing-linux-amd64-vX.Y.Z.tar.gz sudo cp syncthing-linux-amd64-vX.Y.Z/syncthing /usr/local/bin/- 验证安装:
syncthing --version成功标志:打印出版本号(如v2.1.0)。
macOS 安装(Homebrew 或手动)
- 用 Homebrew 安装:
brew install syncthing成功标志:命令静默完成后,which syncthing返回路径。没有 Homebrew 的话,把官网下载的二进制放入~/bin/syncthing并chmod +x也可以,后续 LaunchAgent 会直接引用该路径。
Windows 安装(解压即用)
- 把官网 ZIP 解压到
C:\Program Files\Syncthing(目录可自定,占位符INSTALL_DIR替换为实际路径)。 - 首次用命令行生成默认配置:
syncthing.exe generate成功标志:控制台打印出 Web 界面地址http://127.0.0.1:8384/,浏览器随后自动弹出该页面。
提示:仓库自带 命令行子命令清单,装好后可先跑
syncthing cli --help熟悉show connections、show discovery等排查命令,后文排障会用到。
Syncthing 首次配置:GUI 认证、设备配对与共享文件夹
给 Web 界面上一把锁
- 浏览器打开
http://127.0.0.1:8384,点顶部 Actions → Edit Configuration → GUI。 - 勾选 Enable Authentication,填入用户名与密码,保存后服务自动重启。
成功标志:刷新页面出现登录框,用刚设置的凭据能进入。
注意:GUI 默认只监听本机回环地址,这是正确状态。除非你有明确的远程管理需求并确认设置了强密码,否则不要把它暴露到公网。
两台设备互认:56 位 ID 是怎么交换的
- 在 A 的 Web 界面 Devices 页复制本机 Device ID(形如
ABC12-...-...,共 56 位,中间用连字符分组)。 - 在 B 的 Devices 页点 Add Remote Device,粘贴该 ID 并起个备注名。
- A 端的 Devices 页会出现一条 Pending Devices 记录,点 Accept。
成功标志:双方 Devices 列表里对端设备图标变为绿色在线状态。
共享文件夹:类型怎么选
- A 端在 Folders 页 Add Folder,选择本地目录路径。
- 在共享设置里勾选要参与同步的对端设备。
- 按需求选择文件夹类型:
| 类型 | 行为 | 典型用途 |
|---|---|---|
| Send & Receive | 双向自动对齐 | 日常主力同步 |
| Send Only | 只向外推送,本地改动不生效 | 发布服务器、模板分发 |
| Receive Only | 只接收,本地不主动推送 | 备份接收端 |
成功标志:B 端 Folders 页出现 Pending Folders 提示,接受后开始扫描。
提示:目录根部放一个
.stignore文件,按 Git 忽略规则排除日志、临时文件等,能明显减少无效扫描。格式示例见 man/syncthing-stignore.5。
放行端口:Syncthing 防火墙配置
三台设备要互通,本地防火墙至少要放行下表端口:
| 端口 | 协议 | 用途 |
|---|---|---|
| 22000 | TCP | 设备直连传输 |
| 22000 | UDP | QUIC 传输(NAT 穿透更稳) |
| 21027 | UDP | 局域网内自动发现 |
| 8384 | TCP | Web 管理界面(仅限本机访问) |
Ubuntu/Debian(UFW)一条命令放行同步相关端口:
sudo ufw allow 22000/tcp && sudo ufw allow 22000/udp && sudo ufw allow 21027/udp成功标志:sudo ufw status列出三条 ALLOW 规则。Windows 在管理员 PowerShell 中放行本进程:
New-NetFirewallRule -DisplayName "Syncthing" -Direction Inbound -Program "$env:ProgramFiles\Syncthing\syncthing.exe" -Action Allow成功标志:Get-NetFirewallRule -DisplayName "Syncthing"返回 Enabled 状态的规则。macOS 默认不拦入站;若开启过防火墙,弹出"是否允许传入连接"时点允许即可。
注意:8384 只应在确需远程管理时才放行,且务必先完成上一步的 GUI 认证。
Syncthing 服务化:登录系统即自动拉起
配置完成后,先在 GUI 设置里取消"启动时打开浏览器",再按系统注册常驻服务。
Windows:注册为系统服务
- 管理员 PowerShell 创建服务(
INSTALL_DIR替换为实际安装路径):
sc.exe create Syncthing binPath= "`"C:\Program Files\Syncthing\syncthing.exe`" --no-browser --no-restart" start= auto sc.exe start Syncthing- 验证:
sc.exe query Syncthing显示RUNNING即成功。
macOS:LaunchAgent 自动拉起
- 仓库已备好现成模板 etc/macos-launchd/syncthing.plist,先复制再修改:
cp etc/macos-launchd/syncthing.plist ~/Library/LaunchAgents/syncthing.plist- 打开该文件,把两处
USERNAME全部替换为你的账户名(/Users/USERNAME、程序路径按实际安装位置调整)。 - 加载并验证:
launchctl load ~/Library/LaunchAgents/syncthing.plist launchctl list | grep syncthing成功标志:grep 出一行,第一列为 PID(非-),表示进程在跑。
Linux:systemd 用户级服务
- 写入服务单元(内容如下,
/usr/local/bin/syncthing按实际位置调整):
cat > ~/.config/systemd/user/syncthing.service <<'EOF' [Unit] Description=Syncthing - Open Source Continuous File Synchronization After=network-online.target [Service] ExecStart=/usr/local/bin/syncthing serve --no-browser --no-restart Restart=on-failure RestartSec=1 [Install] WantedBy=default.target EOF- 加载、启动并设为登录自启:
systemctl --user daemon-reload systemctl --user enable --now syncthing- 验证:
systemctl --user status syncthing显示active (running)即成功。
提示:想让服务在开机(无人登录)时就运行,执行
sudo loginctl enable-linger $USER。系统级模板 etc/linux-systemd/system/syncthing@.service 内置了完整沙箱加固项,需要更强隔离时可参考它,自定义改动建议用 drop-in 覆盖而非改原文件。
验证与排障:Syncthing 连不上/不同步怎么办
端到端验证
- 在 A 的同步目录新建
test.txt,写入任意内容。 - 等 1~2 分钟,看 B 的同一目录。
成功标志:B 端出现test.txt,Web 界面中该文件夹状态为绿色 Up to Date,对端设备在线。
状态自查命令
syncthing cli show connections # 看对端是否已连上及其地址 syncthing cli show system # 看服务整体状态成功标志:connections 输出里能看到对端 ID 与 IP 段(直连为对端真实 IP,走中继则带dynamic+前缀)。Linux 下若服务异常,用journalctl --user -u syncthing查最近日志。
常见坑速查
| 现象 | 最可能原因 | 处置 |
|---|---|---|
| 对端一直离线 | 防火墙没放行、端口写错 | 对照端口表复查,show connections看是否只剩dynamic+地址 |
| 跨网段时断时续 | NAT 下直连失败 | 确认 GUI 里 Relay 处于启用状态,让它兜底走中继 |
| 同步慢、大文件卡 | 走了中继,或 21027/UDP 没放行 | 局域网先补齐 UDP 规则;检查是否全部dynamic+ |
| 某些文件始终不动 | .stignore误伤、权限不足 | 删掉忽略规则重试;服务账号需有目录读写权限 |
| Web 界面打不开 | 服务没起来 / 凭据输错 | 确认 8384 端口在监听,用 GUI 认证凭据登录 |
| Linux 服务起不来 | 单元文件语法或路径错误 | journalctl --user -u syncthing读最后 20 行定位 |
🎉 到这里,三台设备已全部进入自动同步状态:文件改动、删除会持续对齐,登录系统即自动拉起进程。后续新增设备只需重复"互认 ID → 接受 Pending → 共享文件夹"三步即可。
【免费下载链接】syncthingOpen Source Continuous File Synchronization项目地址: https://gitcode.com/GitHub_Trending/sy/syncthing
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考