Syncthing 部署实战指南:三步完成三平台的自启后台服务配置
2026/8/29 12:39:55 网站建设 项目流程

Syncthing 部署实战指南:三步完成三平台的自启后台服务配置

【免费下载链接】syncthingOpen Source Continuous File Synchronization项目地址: https://gitcode.com/GitHub_Trending/sy/syncthing

晚上十一点,你在办公室的电脑上改完最后一版文档,想直接回家用笔记本接着干——但不想再往网盘里传一遍文件。Syncthing(开源连续文件同步工具)能解决这个问题:它让多台电脑之间点对点直连、全程 TLS 加密地实时同步文件,数据不落任何第三方服务器。本文带你把 Syncthing 在 Windows、macOS、Linux 上装起来、跑成开机自启的后台服务,并完成防火墙与安全加固,每步都给出可验证的预期结果。

一、动手前:一张表看懂部署路线

先建立全局认识。Syncthing 的同步过程可以压缩成 5 步:

  1. 设备发现——先通过局域网广播(UDP 21027)找到对方,找不到就退回全球发现服务器
  2. 建立连接——优先 TLS 直连;连不通时走中继服务器中转(可选)
  3. 交换索引——两台设备先同步"各自有哪些文件"的元数据
  4. 传输差异块——只传变化的数据块(BEP 块交换协议),不传整个文件
  5. 校验确认——逐块校验完整性后标记同步完成

整个部署过程则按下面 5 个任务推进,本文每个章节对应一个任务:

任务做什么预期结果
1 安装运行下载程序并首次启动浏览器打开 8384 端口能看到 Web 界面
2 自启服务交给系统的服务管理器托管重启电脑后无需手动启动
3 防火墙放行 4 个关键端口跨设备能互相发现并直连
4 安全加固锁 Web 界面 + 沙箱化进程界面不可匿名访问
5 排障查日志对表常见故障 5 分钟内定位

环境方面只需记住端口清单:TCP 22000(文件传输,必需)、UDP 22000(QUIC 传输,推荐)、UDP 21027(本地发现,可选)、TCP 8384(Web 管理界面)。系统要求不高:Windows 7 SP1 及以上、macOS 10.13 及以上、Linux 内核 3.10 及以上均可运行,推荐 4GB 内存。

二、第一步:装上程序,跑通第一次同步

选哪种安装方式,一张表定

平台方式适合谁
Windows官网 ZIP 包解压即用所有人
macOS官方 DMG / HomebrewDMG 图省事,Homebrew 方便升级
Linux官方二进制 / 发行版仓库追求最新版选二进制,图自动更新选仓库

Windows:解压、双击、设密码

把官方 ZIP 解压到C:\Program Files\Syncthing,双击syncthing.exe。首次运行会自动生成配置文件并弹出浏览器,停在http://localhost:8384的 Web 界面——看到界面就说明程序已经活起来了。接下来在界面右上角"操作 → 设置 → GUI"里设置账号密码(强烈建议),并取消"启动时打开浏览器",因为下一步程序要退到后台。

macOS:两种入口任选其一

DMG 方式:下载后拖入"应用程序",首次启动若被系统拦截,到"系统偏好设置 → 安全性与隐私"里放行。

Homebrew 方式只需一条命令:

brew install syncthing

装完直接syncthing启动,同样会打开 8384 的 Web 界面。

Linux:二进制三步走

以下命令下载并安装官方二进制(版本号请按实际替换),预期结果是syncthing --version能打印出版本号:

wget https://github.com/syncthing/syncthing/releases/download/v1.23.6/syncthing-linux-amd64-v1.23.6.tar.gz tar -xvzf syncthing-linux-amd64-v1.23.6.tar.gz sudo cp syncthing-linux-amd64-v1.23.6/syncthing /usr/local/bin/

三个平台装好后,登录 Web 界面把"添加远程设备"走一遍:把 A 设备的设备 ID 填进 B 设备,反过来再填一次,双方点同意授权。之后往共享文件夹丢个文件,几秒内另一台机器出现——第一次同步就算跑通了。

三、第二步:让程序开机自启,退到后台常驻

⚠️ 三个平台的核心思路一致:用--no-restart让 Syncthing 自己不再拉活,重启职责全部交给系统服务管理器(Windows 服务 / launchd / systemd),避免"两套机制互相抢着拉起进程"。

Linux:用户级 systemd 服务最省事

先建好用户级 unit 目录,再创建~/.config/systemd/user/syncthing.service。项目仓库的etc/linux-systemd/user/syncthing.service里就是官方维护的版本,简化后内容如下:

[Unit] Description=Syncthing - Open Source Continuous File Synchronization After=network.target StartLimitIntervalSec=60 StartLimitBurst=4 [Service] ExecStart=/usr/local/bin/syncthing serve --no-browser --no-restart Restart=on-failure RestartSec=5 SuccessExitStatus=3 4 [Install] WantedBy=default.target

SuccessExitStatus=3 4这行别删:3 和 4 是 Syncthing"收到停止信号后正常退出"的状态码,不声明的话 systemd 会误判为崩溃。然后启用并启动:

systemctl --user enable syncthing.service systemctl --user start syncthing.service

预期结果:systemctl --user status syncthing.service显示active (running)。如果是要给整个服务器用的多用户场景,改用系统级模板服务(etc/linux-systemd/system/syncthing@.servicesudo systemctl enable syncthing@用户名.service即可按用户实例化),它在用户级基础上还叠了一整套沙箱配置,后面第五节细说。

Windows:两条 sc 命令建成系统服务

以管理员身份打开 CMD,第一条命令创建服务,第二条启动它:

sc create Syncthing binPath= "\"C:\Program Files\Syncthing\syncthing.exe\" serve --no-browser --no-restart" start= auto displayname= "Syncthing File Synchronization" sc start Syncthing

再跑sc query Syncthing验证——状态为RUNNING即成功。以后重启用sc stop Syncthing+sc start Syncthing即可。

macOS:写一个 LaunchAgent 交给 launchd

macOS 的服务框架叫 launchd,用户级任务放在~/Library/LaunchAgents/。项目里etc/macos-launchd/syncthing.plist就是现成模板,把其中USERNAME换成你的用户名、程序路径改成实际位置,内容长这样:

<plist version="1.0"> <dict> <key>Label</key> <string>net.syncthing.syncthing</string> <key>ProgramArguments</key> <array> <string>/Applications/Syncthing.app/Contents/MacOS/syncthing</string> <string>serve</string> <string>--no-browser</string> </array> <key>EnvironmentVariables</key> <dict> <key>HOME</key> <string>/Users/你的用户名</string> <key>STNORESTART</key> <string>1</string> </dict> <key>KeepAlive</key> <true/> <key>LowPriorityIO</key> <true/> <key>StandardOutPath</key> <string>/Users/你的用户名/Library/Logs/Syncthing.log</string> <key>StandardErrorPath</key> <string>/Users/你的用户名/Library/Logs/Syncthing-Errors.log</string> </dict> </plist>

几个关键键值:KeepAlive让 launchd 负责进程挂掉后拉起;LowPriorityIO降低同步的磁盘 IO 优先级,避免卡前台操作;STNORESTART=1等价于--no-restart。保存后执行加载命令,预期结果是launchctl list | grep syncthing能列出该任务:

launchctl load ~/Library/LaunchAgents/net.syncthing.syncthing.plist launchctl list | grep syncthing

四、第三步:防火墙放行,只需几条命令

Ubuntu / Debian(UFW)

放行数据端口和本地发现端口,一条命令搞定(Web 界面默认只监听本机,通常不用放行 8384):

sudo ufw allow 22000/tcp sudo ufw allow 22000/udp sudo ufw allow 21027/udp

项目仓库etc/firewall-ufw/syncthing里还有一份包含 8384 的完整 UFW 描述,需要远程访问 Web 界面时可参考。

Windows

打开"控制面板 → 系统和安全 → Windows Defender 防火墙 → 允许应用通过防火墙",点"允许其他应用"选择syncthing.exe,按你的网络环境勾选"私有"或"公用",添加即可。

macOS

Homebrew 装的版本一般自带放行;DMG 版本若被拦截,macOS 会弹系统提示,点"允许传入连接"放行syncthing进程即可。

五、进阶加固:两件事别省

把 Web 界面锁死

8384 端口默认只监听127.0.0.1,这是最安全的状态。只要你在设置里把监听地址改成了0.0.0.0:8384以便远程访问,就必须同时确认 GUI 已设好强密码——界面上"未授权"访问日志一出现就说明有人在尝试登录。

给进程套上 systemd 沙箱

Linux 系统级服务值得直接采用项目etc/linux-systemd/system/syncthing@.service里维护的加固项,挑几个关键的:

  • ProtectSystem=full+PrivateTmp:系统目录只读、临时目录隔离
  • MemoryDenyWriteExecute:禁止"可写又可执行"的内存页,直接封死 JIT 类攻击
  • NoNewPrivileges+RestrictSUIDSGID:进程无权提权、不能在文件上种 SUID 位
  • SystemCallFilter=@system-service:系统调用白名单,未列出的调用直接返回EPERM

这些选项组合的目的是"爆炸半径"控制:即使某个漏洞被利用,攻击者拿到的也是一个被锁进笼子、改不了系统文件的进程。验证方式是在启动服务后跑一次systemd-analyze security syncthing@用户名.service查看暴露面评分。

⚠️ 该文件注释里特别强调:沙箱选项看似"冗余",但不同 systemd/内核版本下生效情况不同,官方建议全部保留,不要嫌长删掉。

六、排障速查:先看日志,再对这张表

三个平台的日志入口各不相同,先定位日志再谈排错:

平台日志位置
Linux(systemd)journalctl --user -u syncthing -f(系统级用--unit syncthing@用户名
macOS~/Library/Logs/Syncthing.logSyncthing-Errors.logtail -f实时跟踪
Windows事件查看器中的 Syncthing 服务日志,或启动时未加--no-browser的窗口输出

高频故障对照表,覆盖 90% 的部署问题:

症状大概率原因处理
两台设备互相发现不了防火墙没放行 UDP 21027,或跨网络段按第四节放行端口;跨网段依赖全球发现或手动加对方地址
能发现但连接失败22000 端口被拦 / NAT 严格放行 22000 tcp+udp;确认已启用中继兜底
服务启动后立刻退出配置文件目录无写权限检查配置目录属主(systemd 下应为运行用户)
文件同步了但权限不对服务以其他用户身份运行系统级服务改用同用户实例(syncthing@用户名),或启用 syncOwnership 能力
升级后 Web 界面打不开监听地址被改到非默认端口syncthing --gui-address查看实际端口,别猜

排障口诀:先看日志最后一屏,再对照上表;日志里带panic字样的行基本都指向上面前两项,Access denied系列则指向权限。

七、延伸阅读:仓库里值得看的模块

想深入理解某个环节时,可以直接进项目源码对照,几个入口:

  • lib/model/:同步核心逻辑,文件夹状态机、索引处理、块拉取都在这里
  • lib/api/:Web 界面与 REST API 的实现,8384 端口背后的代码
  • lib/connections/:TCP、QUIC、中继三种连接方式的拨号与监听
  • lib/versioner/:文件版本控制(简单/垃圾桶/时间间隔/外部四种策略)
  • proto/bep/bep.proto:块交换协议的正式定义,想弄懂"差异块怎么传"看它最快
  • etc/:本文用到的所有系统服务脚本与防火墙描述文件的官方出处

按第二到六节走完,你的 Syncthing 就具备了生产可用的形态:三平台自动常驻、跨网络可直连、界面有锁、进程有沙箱。剩下要做的,只是往共享文件夹里丢第一个文件。

【免费下载链接】syncthingOpen Source Continuous File Synchronization项目地址: https://gitcode.com/GitHub_Trending/sy/syncthing

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询