Ubuntu 22.04 安装 Syncthing 指南
在 Ubuntu 22.04 上从零安装 Syncthing 2.1.7 的全流程实测指南:官方 apt 源(stable-v2 组件)、deb 离线包、tar.gz 二进制三种方案,systemd 托管、Web GUI 账号与远程访问配置、两节点同步配对验证与排障实录。
Ubuntu 22.04 安装 Syncthing 指南
目标:在 Ubuntu 22.04 服务器上从零安装 Syncthing v2.1.7 并以 systemd 托管,完成 Web GUI 初始配置与两节点同步配对验证。全文命令与回显均在 Ubuntu 22.04.5 LTS(systemd 249)环境逐条实测,照抄实录。
一、环境信息
- 操作系统:Ubuntu 22.04.5 LTS(内核与 systemd 版本 249.11-0ubuntu3.22,
cat /etc/os-release实测) - 架构:linux-amd64(x86_64)
- Syncthing 版本:v2.1.7 "Hafnium Hornet"(go1.27.3 编译,构建时间 2026-10-20 19:54:38 UTC,
syncthing --version实测) - 演示用户:root(生产环境建议普通用户,见 8.4 节说明)
- Web GUI:默认 127.0.0.1:8384,本文演示改绑 0.0.0.0:8384 供远程访问
- 同步验证拓扑:两台 Ubuntu 22.04 服务器(syncthing-server 与 syncthing-client)同内网段互通
- 关键目录:
/root/.local/state/syncthing/(v2 配置与数据目录,syncthing paths实测确认)
二、前置条件
本节确认安装前系统已具备的条件,逐条给出可执行命令与预期结果。
- 系统为 Ubuntu 22.04(20.04/24.04 流程相同,个别 systemd 警告差异见第十章):
cat /etc/os-release
实测回显:
PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
- 已安装 curl 与 gnupg(导入官方签名密钥需要;最小系统默认无 curl):
apt-get install -y curl gnupg
实测回显(输出节选,实测首尾):
Setting up curl ...
Setting up gnupg ...
- 时间同步正常(TLS 证书校验与文件时间戳依赖):
timedatectl status | grep -E 'System clock|NTP'
实测回显:
System clock synchronized: yes
NTP service: active
三、版本选型说明
Syncthing v2 系列与 v1 系列目前并行维护,安装前必须先想清楚装哪条线(来源:apt.syncthing.net 仓库元数据与 GitHub Releases,实查 2026-10-22):
| 版本线 | 当前版本 | apt 源组件 | 说明 |
|---|---|---|---|
| v2(推荐新装) | 2.1.7 "Hafnium Hornet" | stable-v2 | 2025 年起的新主线,配置/数据目录与 CLI 结构有调整,本文实测对象 |
| v1(存量兼容) | 1.30.0 "Gold Grasshopper" | stable | 老主线继续维护,老配置可无缝运行 |
| 预发布 | — | candidate / nightly | 想尝鲜新特性才用,生产禁用 |
选型结论:全新部署直接装 v2.1.7(stable-v2 组件);已有 v1 存量环境如无 v2 新特性诉求可继续用 v1,待官方迁移指引再升级。⚠️ 最容易踩的坑:照老教程写 syncthing stable 组件只会装到 v1.30.0,详见第十章排障实录 10.1。
四、安装方案 A:官方 APT 在线源(推荐)
本章通过 Syncthing 官方 apt 仓库安装 v2.1.7,适合可联网的服务器,后续 apt upgrade 即可随官方更新。
4.1 导入官方签名密钥
官方下载页(syncthing.net/downloads/,2026-10-22 查证)提供的密钥导入方式,实测执行:
curl -fsSL https://syncthing.net/release-key.gpg | gpg --dearmor -o /usr/share/keyrings/syncthing-archive-keyring.gpg
实测回显(无输出即成功)。验证密钥文件已生成:
ls -l /usr/share/keyrings/syncthing-archive-keyring.gpg
实测回显:
-rw-r--r-- 1 root root 2585 Oct 21 18:09 /usr/share/keyrings/syncthing-archive-keyring.gpg
4.2 写入 apt 源(必须用 stable-v2 组件)
写入官方源,组件指定为 stable-v2(v2 系列稳定版):
echo "deb [signed-by=/usr/share/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable-v2" > /etc/apt/sources.list.d/syncthing.list
cat /etc/apt/sources.list.d/syncthing.list
实测回显:
deb [signed-by=/usr/share/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable-v2
更新索引并确认候选版本为 2.1.7:
apt-get update
apt-cache policy syncthing | head -6
实测回显(输出节选,实测首尾):
Get:3 https://apt.syncthing.net syncthing InRelease [24.2 kB]
Get:6 https://apt.syncthing.net syncthing/stable-v2 amd64 Packages [1410 B]
Hit:5 https://apt.syncthing.net syncthing InRelease
syncthing:
Installed: (none)
Candidate: 2.1.7
Version table:
2.1.7 500
500 https://apt.syncthing.net syncthing/stable-v2 amd64 Packages
⚠️ 注意:若
apt-cache policy显示 Candidate 是 1.30.0,说明源写成了syncthing stable组件(v1 线),改回stable-v2再 update。详见第十章 10.1。
4.3 安装
apt-get install -y syncthing
实测回显(输出节选,实测首尾):
Reading package lists... Done
The following NEW packages will be installed:
syncthing
Preparing to unpack .../syncthing_2.1.7_amd64.deb ...
Unpacking syncthing (2.1.7) ...
Setting up syncthing (2.1.7) ...
4.4 验证版本与包清单
syncthing --version
实测回显:
syncthing v2.1.7 "Hafnium Hornet" (go1.27.3 linux-amd64) debian@github.syncthing.net 2026-10-20 19:54:38 UTC [noupgrade]
查看 deb 包安装的文件清单(确认二进制与 systemd 服务文件位置):
dpkg -L syncthing | grep -vE 'doc$|man|LICENSE' | grep -E 'bin|systemd|ufw|sysctl'
实测回显:
/etc/ufw/applications.d/syncthing
/lib/systemd/system/syncthing@.service
/usr/bin/syncthing
/usr/lib/sysctl.d/30-syncthing.conf
/usr/lib/systemd/user/syncthing.service
解读:deb 包提供三类系统级资产——/usr/bin/syncthing 单一二进制、/lib/systemd/system/syncthing@.service 系统级模板服务(本章 4.6 使用)、/etc/ufw/applications.d/syncthing 防火墙预设;/usr/lib/sysctl.d/30-syncthing.conf 则把 QUIC 需要的套接字缓冲区调到 7 MiB(内容见 10.5)。
五、安装方案 B:官方 deb 离线包(断网环境)
本章在另一台 Ubuntu 22.04 服务器(syncthing-client)实测:从 GitHub Releases 下载官方 deb 包离线安装,适合服务器无法访问外网或受限网络场景。
5.1 下载 deb 包
在有网机器上下载 v2.1.7 的 amd64 deb 包并校验哈希:
curl -L -o syncthing_2.1.7_amd64.deb https://github.com/syncthing/syncthing/releases/download/v2.1.7/syncthing_2.1.7_amd64.deb
sha256sum syncthing_2.1.7_amd64.deb
实测回显:
01400d260bb6e47f1fe432bbb462cdb35ea6f78fc498198dfba6e292a3614837 syncthing_2.1.7_amd64.deb
文件大小 14054904 字节(约 13.4 MiB)。GitHub 下载慢时可用代理下载:
curl -L -x http://192.168.1.62:7897 -o syncthing_2.1.7_amd64.deb https://github.com/syncthing/syncthing/releases/download/v2.1.7/syncthing_2.1.7_amd64.deb
5.2 传输并安装
将 deb 包拷贝到目标服务器后安装:
dpkg -i syncthing_2.1.7_amd64.deb
实测回显(实测首尾):
(Reading database ... 6535 files and directories currently installed.)
Preparing to unpack .../syncthing_2.1.7_amd64.deb ...
Unpacking syncthing (2.1.7) ...
Setting up syncthing (2.1.7) ...
验证:
syncthing --version
实测回显:
syncthing v2.1.7 "Hafnium Hornet" (go1.27.3 linux-amd64) debian@github.syncthing.net 2026-10-20 19:54:38 UTC [noupgrade]
⚠️ 注意:deb 包不带依赖,若系统缺 libc 等基础库导致 dpkg 报依赖错误,执行
apt-get install -f自动补齐。Ubuntu 22.04 最小安装可直接装。
六、安装方案 C:官方 tar.gz 二进制
本章实测直接解包官方 linux-amd64 二进制压缩包,适合不想用包管理器、或需要多版本并存的管理场景。
6.1 下载与解包
curl -L -o syncthing-linux-amd64-v2.1.7.tar.gz https://github.com/syncthing/syncthing/releases/download/v2.1.7/syncthing-linux-amd64-v2.1.7.tar.gz
sha256sum syncthing-linux-amd64-v2.1.7.tar.gz
实测回显:
2edc416e7ed136b7c858ed5f3f02a3b8316589605e54c380228ceea7acbf0142 syncthing-linux-amd64-v2.1.7.tar.gz
解包到独立目录(包内自带顶层目录 syncthing-linux-amd64-v2.1.7/):
tar -xzf syncthing-linux-amd64-v2.1.7.tar.gz -C /opt
实测回显(tar 无报错即成功;包内容如下):
syncthing-linux-amd64-v2.1.7/
syncthing-linux-amd64-v2.1.7/etc/
syncthing-linux-amd64-v2.1.7/etc/linux-desktop/
syncthing-linux-amd64-v2.1.7/etc/linux-desktop/syncthing-ui.desktop
syncthing-linux-amd64-v2.1.7/etc/linux-desktop/syncthing-start.desktop
syncthing-linux-amd64-v2.1.7/etc/solaris-smf/
6.2 验证二进制
/opt/syncthing-linux-amd64-v2.1.7/syncthing --version
实测回显:
syncthing v2.1.7 "Hafnium Hornet" (go1.27.3 linux-amd64) builder@github.syncthing.net 2026-10-20 19:54:38 UTC
6.3 手写 systemd 服务托管(tar.gz 方案专用)
tar.gz 方案不自带系统级服务文件,需要手写 unit。创建 /etc/systemd/system/syncthing.service:
[Unit]
Description=Syncthing - Open Source Continuous File Synchronization
Documentation=man:syncthing(1)
After=network.target
[Service]
User=root
ExecStart=/opt/syncthing-linux-amd64-v2.1.7/syncthing serve --no-browser --no-restart
Restart=on-failure
SuccessExitStatus=3 4
RestartForceExitStatus=3 4
[Install]
WantedBy=multi-user.target
配置说明:ExecStart 与官方 syncthing@.service 一致使用 serve --no-browser --no-restart(禁止 GUI 弹浏览器、禁止进程自杀重启,由 systemd 负责);User 按实际运行用户填写。启用并启动:
systemctl daemon-reload
systemctl enable --now syncthing.service
实测回显(输出节选):
Created symlink /etc/systemd/system/multi-user.target.wants/syncthing.service → /etc/systemd/system/syncthing.service.
七、方案对比与选择建议
| 维度 | 方案 A:apt 在线源 | 方案 B:deb 离线包 | 方案 C:tar.gz 二进制 |
|---|---|---|---|
| 版本 | 2.1.7(stable-v2 组件) | 2.1.7(GitHub Releases) | 2.1.7(GitHub Releases) |
| 是否需联网 | 安装与升级均需访问 apt.syncthing.net | 仅下载时联网,安装离线 | 仅下载时联网,安装离线 |
| 安装方式 | apt-get install syncthing | dpkg -i xxx.deb | tar 解包 + 手写 unit |
| systemd 服务来源 | 官方 syncthing@.service 模板 | 官方 syncthing@.service 模板 | 需手写 unit 文件 |
| 附带资产 | ufw 预设、sysctl 调优、man 文档 | 同左 | 无(仅二进制与桌面文件) |
| 升级方式 | apt upgrade | 重新下载新 deb 覆盖安装 | 重新下载解包 + 改 unit 路径 |
| 适用场景 | 可联网服务器(首选) | 断网/内网服务器 | 多版本并存、极简定制 |
选择建议:能联网选方案 A(升级最省心);服务器在内网隔离环境选方案 B(保留包管理器卸载能力);需要精确控制安装路径或多版本共存选方案 C。
八、配置说明:systemd 托管与 Web GUI 初始配置
本章以方案 A/B 安装后的官方 syncthing@.service 为准,完成「启动服务 → 首次生成配置 → 设置 GUI 账号密码 → 改绑远程访问」四个步骤。
8.1 启用并启动模板服务
syncthing@.service 是按用户实例化的模板服务,@ 后面填运行 Syncthing 的系统用户名(本文以 root 演示):
systemctl enable syncthing@root
实测回显:
Created symlink /etc/systemd/system/multi-user.target.wants/syncthing@root.service → /lib/systemd/system/syncthing@.service.
systemctl start syncthing@root
启动后查看状态:
systemctl status syncthing@root --no-pager
实测回显(输出节选,实测首尾):
● syncthing@root.service - Syncthing - Open Source Continuous File Synchronization for root
Loaded: loaded (/lib/systemd/system/syncthing@.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2026-10-21 18:15:26 UTC; 6s ago
Docs: man:syncthing(1)
Main PID: 3792 (syncthing)
Tasks: 26 (limit: 94371)
Memory: 19.7M
CPU: 544ms
├─3792 /usr/bin/syncthing serve --no-browser --no-restart
验证命令回显:Active: active (running) 即启动成功;进程命令行 /usr/bin/syncthing serve --no-browser --no-restart 说明 systemd 模式下 Syncthing 由服务托管。
8.2 首次启动日志与配置文件位置
首次启动会自动生成设备证书、设备 ID 与默认配置,查看完整日志:
journalctl -u syncthing@root --no-pager -n 25
实测回显(v2.1.7 首启日志原文):
Oct 21 18:15:26 syncthing-server systemd[1]: Started Syncthing - Open Source Continuous File Synchronization for root.
Oct 21 18:15:26 syncthing-server syncthing[3792]: syncthing v2.1.7 "Hafnium Hornet" (go1.27.3 linux-amd64) debian@github.syncthing.net 2026-10-20 19:54:38 UTC [noupgrade] (log.pkg=main)
Oct 21 18:15:26 syncthing-server syncthing[3792]: Generating key and certificate (cn=syncthing log.pkg=syncthing)
Oct 21 18:15:26 syncthing-server syncthing[3792]: Default config saved; edit to taste (with Syncthing stopped) or use the GUI (path=/root/.local/state/syncthing/config.xml log.pkg=syncthing)
Oct 21 18:15:26 syncthing-server syncthing[3792]: Calculated our device ID (device=BITUNOQ-VKBHIFH-2UWCK4D-CCANXZC-GV6VG3E-6JDFMHV-7VZW57L-F3LTKQX log.pkg=syncthing)
Oct 21 18:15:26 syncthing-server syncthing[3792]: QUIC listener starting (address="[::]:22000" log.pkg=connections)
Oct 21 18:15:26 syncthing-server syncthing[3792]: Using discovery mechanism (identity="global discovery server https://discovery-lookup.syncthing.net/v2/?noannounce" log.pkg=discover)
Oct 21 18:15:26 syncthing-server syncthing[3792]: Using discovery mechanism (identity="IPv4 local broadcast discovery on port 21027" log.pkg=discover)
Oct 21 18:15:26 syncthing-server syncthing[3792]: Using discovery mechanism (identity="IPv6 local multicast discovery on address [ff12::8384]:21027" log.pkg=discover)
Oct 21 18:15:26 syncthing-server syncthing[3792]: TCP listener starting (address="[::]:22000" log.pkg=connections)
Oct 21 18:15:26 syncthing-server syncthing[3792]: GUI and API listening (address=127.0.0.1:8384 log.pkg=api)
Oct 21 18:15:26 syncthing-server syncthing[3792]: Access the GUI via the following URL: http://127.0.0.1:8384/ (log.pkg=api)
Oct 21 18:15:27 syncthing-server syncthing[3792]: Measured hashing performance (perf="2363.24 MB/s" log.pkg=syncthing)
解读日志中的关键信息:默认配置写入 path=/root/.local/state/syncthing/config.xml(⚠️ v2 的配置与数据目录是 ~/.local/state/syncthing/,不再是 v1 的 ~/.config/syncthing/);本机设备 ID 已生成;同步监听 22000(TCP+QUIC);GUI 默认只监听 127.0.0.1:8384。
用 syncthing paths 汇总确认目录布局:
syncthing paths
实测回显:
Configuration file:
/root/.local/state/syncthing/config.xml
Device private key & certificate files:
/root/.local/state/syncthing/key.pem
/root/.local/state/syncthing/cert.pem
GUI / API HTTPS private key & certificate files:
/root/.local/state/syncthing/https-key.pem
/root/.local/state/syncthing/https-cert.pem
Database location:
/root/.local/state/syncthing/index-v2
Log file:
/root/.local/state/syncthing/syncthing.log
GUI override directory:
/root/.local/state/syncthing/gui
Default sync folder directory:
/root/Sync
8.3 设置 Web GUI 管理账号密码
v2.1.7 用 syncthing generate 子命令写入 GUI 认证账号(密码自动以 bcrypt 哈希落盘)。⚠️ v2 语法与 v1 不同:不再接受位置参数指定目录,必须用 --home(或成对 --config/--data),否则报错(排障实录见第十章 10.2):
systemctl stop syncthing@root
syncthing generate --gui-user=admin --gui-password=q1w2e3r4 --home /root/.local/state/syncthing
实测回显:
2026-10-21 18:17:13 WRN Key exists; will not overwrite (log.pkg=github)
2026-10-21 18:17:13 INF Calculated device ID (device=BITUNOQ-VKBHIFH-2UWCK4D-CCANXZC-GV6VG3E-6JDFMHV-7VZW57L-F3LTKQX log.pkg=github)
2026-10-21 18:17:13 INF Updated GUI authentication user (name=admin log.pkg=github)
2026-10-21 18:17:13 INF Updated GUI authentication password (log.pkg=github)
回显确认 Updated GUI authentication user/password 即写入成功(密钥不会被覆盖,仅更新认证信息)。
8.4 GUI 改绑 0.0.0.0 供远程访问
默认 GUI 只监听 127.0.0.1,远程管理需改绑到所有网卡。停止服务后编辑 config.xml 的 <gui><address>:
sed -i 's|<address>127.0.0.1:8384</address>|<address>0.0.0.0:8384</address>|' /root/.local/state/syncthing/config.xml
grep -E '<address>|<user>' /root/.local/state/syncthing/config.xml | head -4
实测回显:
<address>dynamic</address>
<address>0.0.0.0:8384</address>
<user>admin</user>
重启服务并确认监听:
systemctl start syncthing@root
systemctl is-active syncthing@root
实测回显:
active
从另一台机器验证 GUI 已可远程访问(无凭据访问首页返回 200,API 未带 API Key 返回 403):
curl -s -o /dev/null -w '%{http_code}\n' http://<服务器IP>:8384/
实测回显(在管理机上执行,指向被测服务器):
200
⚠️ 注意:改绑 0.0.0.0 后 GUI 暴露给网络,必须已设置账号密码(8.3 节),生产环境建议进一步用防火墙限制来源 IP 或改走 HTTPS(GUI 设置
tls="true")。⚠️ 关于运行用户:日志会提示 "Syncthing should not run as a privileged or system user; please consider using a normal user account"。生产建议创建专用用户(如
adduser syncuser后systemctl enable --now syncthing@syncuser),其配置目录为/home/syncuser/.local/state/syncthing/,本文为演示简便以 root 运行。
九、两节点同步配对验证
安装的价值在于跑通同步。本章在两台 Ubuntu 22.04 服务器(syncthing-server 与 syncthing-client,同内网互通)上完成「互加设备 → 建共享文件夹 → 文件自动同步」全流程。
9.1 获取两台设备的 Device ID
两台服务器分别执行(设备 ID 也可从首启日志 Calculated our device ID 一行获取):
syncthing device-id
节点一(syncthing-server)实测回显:
BITUNOQ-VKBHIFH-2UWCK4D-CCANXZC-GV6VG3E-6JDFMHV-7VZW57L-F3LTKQX
节点二(syncthing-client)实测回显:
H4EJJ6T-TDBKQFV-AK4FR2S-XCOS326-X3A4NQY-D4HJ7JS-BKYLK3X-IWB6HQB
9.2 互加设备(REST API 方式)
Web GUI「添加远程设备」与 REST 等价,本节用 REST API 演示(脚本化管理更方便;API Key 取自各自 config.xml 的 <apikey> 字段)。节点一添加节点二:
curl -s -X PUT -H "X-API-Key: LbDgdphpYTUQiq4SHqzaMbmhR36WY9wL" -H "Content-Type: application/json" \
-d '{"deviceID":"H4EJJ6T-TDBKQFV-AK4FR2S-XCOS326-X3A4NQY-D4HJ7JS-BKYLK3X-IWB6HQB","name":"syncthing-client"}' \
http://127.0.0.1:8384/rest/config/devices/H4EJJ6T-TDBKQFV-AK4FR2S-XCOS326-X3A4NQY-D4HJ7JS-BKYLK3X-IWB6HQB
实测回显(PUT 成功返回空体);核对配置:
curl -s -H "X-API-Key: LbDgdphpYTUQiq4SHqzaMbmhR36WY9wL" http://127.0.0.1:8384/rest/config/devices | python3 -c "import json,sys; d=json.load(sys.stdin); print('devices:', [x['deviceID'][:8] for x in d])"
实测回显:
devices: ['BITUNOQ-', 'H4EJJ6T-']
节点二对称地添加节点一(API Key 各自不同,实测值为 rFSqNpHbtKgugCJsRH3xEbtUZL2TKaJF):
curl -s -X PUT -H "X-API-Key: rFSqNpHbtKgugCJsRH3xEbtUZL2TKaJF" -H "Content-Type: application/json" \
-d '{"deviceID":"BITUNOQ-VKBHIFH-2UWCK4D-CCANXZC-GV6VG3E-6JDFMHV-7VZW57L-F3LTKQX","name":"syncthing-server"}' \
http://127.0.0.1:8384/rest/config/devices/BITUNOQ-VKBHIFH-2UWCK4D-CCANXZC-GV6VG3E-6JDFMHV-7VZW57L-F3LTKQX
9.3 创建共享文件夹
两台服务器各自创建本地目录并注册同名共享文件夹 sync-demo(文件夹 ID 两端必须一致)。节点一:
mkdir -p /root/sync-demo
curl -s -X PUT -H "X-API-Key: LbDgdphpYTUQiq4SHqzaMbmhR36WY9wL" -H "Content-Type: application/json" \
-d '{"id":"sync-demo","label":"sync-demo","path":"/root/sync-demo","type":"sendreceive","devices":[{"deviceID":"BITUNOQ-VKBHIFH-2UWCK4D-CCANXZC-GV6VG3E-6JDFMHV-7VZW57L-F3LTKQX"},{"deviceID":"H4EJJ6T-TDBKQFV-AK4FR2S-XCOS326-X3A4NQY-D4HJ7JS-BKYLK3X-IWB6HQB"}]}' \
http://127.0.0.1:8384/rest/config/folders/sync-demo
节点二对称执行(path 换为自己的 /root/sync-demo,devices 列表相同)。REST 修改即时生效,无需重启进程。
9.4 放入文件验证自动同步
节点一创建测试文件(文本 + 3MB 二进制):
echo "hello from node1 $(date)" > /root/sync-demo/hello.txt
dd if=/dev/urandom of=/root/sync-demo/data.bin bs=1M count=3
实测回显(输出节选):
3145728 bytes (3.1 MB, 3.0 MiB) copied, 0.00590846 s, 532 MB/s
约 30 秒内(本地发现广播周期 30 秒,首次配对含索引交换)节点二目录出现同样文件:
ls -la /root/sync-demo/ && cat /root/sync-demo/hello.txt
节点二实测回显:
total 3088
drwxr-xr-x 3 root root 4096 Oct 21 18:21 .
drwx------ 1 root root 4096 Oct 21 18:20 ..
drwxr-x--- 2 root root 4096 Oct 21 18:20 .stfolder
-rw-r--r-- 1 root root 3145728 Oct 21 18:20 data.bin
-rw-r--r-- 1 root root 46 Oct 21 18:20 hello.txt
hello from node1 Wed Oct 21 18:20:52 UTC 2026
解读:.stfolder 是 Syncthing 的文件夹标记目录(自动创建),两个文件已完整到达节点二。
9.5 连接与同步状态核对
节点一查看连接详情:
curl -s -H "X-API-Key: LbDgdphpYTUQiq4SHqzaMbmhR36WY9wL" http://127.0.0.1:8384/rest/system/connections | python3 -c "
import json,sys; d=json.load(sys.stdin)
for devid, info in d['connections'].items():
print(devid[:8], '|', info['address'], '|', info['type'], '| isLocal:', info['isLocal'], '| outBytesTotal:', info['outBytesTotal'])"
实测回显:
H4EJJ6T- | 10.89.67.3:22000 | tcp-client | isLocal: True | outBytesTotal: 3147505
解读:连接类型 tcp-client(LAN 直连 TCP),isLocal: True 说明走了本地网络直连而非中继;输出字节 3147505 与 3MB 测试文件吻合。节点二查看文件夹同步状态:
curl -s -H "X-API-Key: rFSqNpHbtKgugCJsRH3xEbtUZL2TKaJF" "http://127.0.0.1:8384/rest/db/status?folder=sync-demo" | python3 -c "import json,sys; d=json.load(sys.stdin); print('state:', d['state'], '| globalFiles:', d['globalFiles'], '| inSyncFiles:', d['inSyncFiles'])"
实测回显:
state: idle | globalFiles: 2 | inSyncFiles: 2
state: idle 且 inSyncFiles 等于 globalFiles 表示两台设备已完全同步。本地发现缓存亦可核对:
curl -s -H "X-API-Key: LbDgdphpYTUQiq4SHqzaMbmhR36WY9wL" http://127.0.0.1:8384/rest/system/discovery | python3 -m json.tool
实测回显(节点一视角,本地发现已缓存节点二地址):
{
"H4EJJ6T-TDBKQFV-AK4FR2S-XCOS326-X3A4NQY-D4HJ7JS-BKYLK3X-IWB6HQB": {
"addresses": [
"tcp://10.89.67.3:22000",
"quic://10.89.67.3:22000",
"quic://182.54.113.29:16728"
]
}
}
十、常见问题(排障实录)
以下均为本次安装实测中真实遇到并解决的问题。
10.1 照老教程写 syncthing stable 只装到 v1.30.0
现象:apt 源可用,但 apt-get install syncthing 装出来的是 1.30.0 而非 2.1.7,syncthing --version 回显:
syncthing v1.30.0 "Gold Grasshopper" (go1.24.4 linux-amd64) debian@github.syncthing.net 2025-06-20 09:17:23 UTC [noupgrade, noupgrade]
定位:官方 apt 源 suite 为 syncthing,组件(component)在 2025 年后拆分为五个,直接读仓库 InRelease 元数据确认:
curl -s https://apt.syncthing.net/dists/syncthing/InRelease | grep '^Components'
实测回显:
Components: candidate nightly stable stable-v1 stable-v2
即 stable 组件实为 v1 线(1.30.0),stable-v2 才是 v2 线;stable-v1 与 stable 当前同指 v1(stable-v2 的 Packages 索引实测含 syncthing 2.1.7/2.1.6)。
解决:源文件改写为 stable-v2 组件并重新 update(见 4.2 节),已装 v1 时直接 apt-get install syncthing 即升级到 2.1.7,实测升级回显:
Preparing to unpack .../syncthing_2.1.7_amd64.deb ...
Unpacking syncthing (2.1.7) over (1.30.0) ...
Setting up syncthing (2.1.7) ...
10.2 syncthing generate 报错 unexpected argument
现象(v1 时代的位置参数写法在 v2 报错):
syncthing: error: unexpected argument /root/.local/state/syncthing
继续用 v2 新写法 --config 时又报:
syncthing: error: either both or none of --config and --data must be given, use --home to set both at once
定位:v2 把配置目录(config,存 config.xml 与证书)与数据目录(data,存 index 数据库与日志)概念拆开,--config 与 --data 必须成对出现。
解决:一次性指定两者用 --home(见 8.3 节),命令实测成功。
10.3 systemd 状态里出现单元文件解析警告
现象:journalctl -u syncthing@root 首屏出现两条 systemd 警告:
systemd[1]: /lib/systemd/system/syncthing@.service:115: Failed to parse boolean value, ignoring: disconnected
systemd[1]: /lib/systemd/system/syncthing@.service:123: Unknown key name 'PrivatePIDs' in section 'Service', ignoring.
定位:官方 deb 的单元文件为最新 systemd 编写,ProtectSystem=disconnected 布尔写法与 PrivatePIDs= 键是更高版本 systemd 的能力,Ubuntu 22.04 自带 systemd 249(systemctl --version 首行 systemd 249 (249.11-0ubuntu3.22))不认识。
解决:无需处理——警告为「ignoring」,服务正常 active (running),仅牺牲部分新版沙箱加固能力;升级到 24.04+ 的 systemd 后自然消失。
10.4 日志提示 QUIC 接收缓冲区不足
现象:首启日志出现:
failed to sufficiently increase receive buffer size (was: 208 kiB, wanted: 7168 kiB, got: 416 kiB). See https://github.com/quic-go/quic-go/wiki/UDP-Buffer-Sizes for details.
定位:QUIC 传输期望 7 MiB 接收缓冲以获得最佳吞吐,内核默认值偏小。官方 deb 已自带调优文件 /usr/lib/sysctl.d/30-syncthing.conf,实测内容:
# Increase maximum socket buffer sizes to 7MiB for QUIC connections
# see https://github.com/quic-go/quic-go/wiki/UDP-Buffer-Sizes
net.core.rmem_max = 7340032
net.core.wmem_max = 7340032
解决:该配置由 systemd-sysctl 在重启后自动应用;如需立即生效可执行 sysctl --system,再次核验:
sysctl net.core.rmem_max
实测回显:
net.core.rmem_max = 7340032
该警告仅影响 QUIC 吞吐上限,不影响功能可用性。
10.5 tar.gz 方案改用 --gui-address 端口探测失败?
syncthing 首次启动会探测 GUI 端口与同步端口是否空闲,受限环境可加 --no-port-probing(环境变量 STNOPORTPROBING)跳过探测(来源:syncthing serve --help 实测原文 "Don't try to find free ports for GUI and listen addresses on first startup")。端口被占用时 Syncthing 会自动尝试下一个可用端口并在日志提示,排查时先看日志 GUI and API listening (address=...) 的实际地址。
十一、升级、降级与卸载清理
11.1 升级
方案 A 升级随系统包管理器:
apt-get update && apt-get upgrade syncthing
方案 B/C 下载新版 deb/tar.gz 覆盖安装即可;deb 实测覆盖升级回显见 10.1(Unpacking syncthing (2.1.7) over (1.30.0))。升级后重启服务:
systemctl restart syncthing@root
syncthing --version
⚠️ apt 源的 deb 默认打
noupgrade标记(syncthing --version回显可见),即禁用 GUI 内的自动升级,统一交给包管理器管理,避免双通道升级互相覆盖。
11.2 卸载与残留清理
方案 A/B 卸载软件包(--purge 连同系统配置一并删除):
apt-get remove --purge -y syncthing
实测回显(输出节选):
Removing syncthing (2.1.7) ...
用户级运行数据(配置、证书、索引数据库)在运行用户目录下,需手动删除:
rm -rf /root/.local/state/syncthing
方案 C 额外清理二进制目录与手写 unit:
systemctl disable --now syncthing.service
rm /etc/systemd/system/syncthing.service
systemctl daemon-reload
rm -rf /opt/syncthing-linux-amd64-v2.1.7
十二、参考链接
- 官方下载页(apt 源与各平台包):https://syncthing.net/downloads/
- 官方文档 systemd 说明:https://docs.syncthing.net/users/autostart.html
- 官方防火墙端口说明:https://docs.syncthing.net/users/firewall.html
- GitHub Releases(v2.1.7 资产与校验):https://github.com/syncthing/syncthing/releases/tag/v2.1.7
- 本专栏认知篇:《Syncthing 介绍与选型指南》
- 本专栏配置篇:《Syncthing 2.1.7 配置参数详解》
- 本专栏命令篇:《Syncthing 2.1.7 常用 CLI 命令与工具详解》