极简私有云:Syncthing + Rclone 打造轻量级 P2P 个人文件同步方案

0. 前言 对于个人自建文件同步系统,核心诉求非常简单:PC ↔ 服务器实时同步、移动端原生/WebDAV 访问、轻量稳定。本文介绍一套基于 Syncthing(同步引擎)+ Rclone(WebDAV 服务)+ Tailscale(内网穿 …

0. 前言

对于个人自建文件同步系统,核心诉求非常简单:PC ↔ 服务器实时同步、移动端原生/WebDAV 访问、轻量稳定。本文介绍一套基于 Syncthing(同步引擎)+ Rclone(WebDAV 服务)+ Tailscale(内网穿透)的组合方案。

  • 超低资源:服务器端无数据库、无重型 Web 容器,内存占用约 40MB
  • 高效 P2P:PC 与服务器之间点对点双向同步,速度仅受物理带宽限制。
  • 全平台支持:支持 Windows/macOS/Linux 实时同步,Android/iOS 移动端原生或 WebDAV 挂载访问。

1. 架构拓扑

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
                  +---------------------------------------+
                  |            移动端 (iOS/Android)        |
                  +---------------------------------------+
                                      | WebDAV (HTTPS 443)
                                      v
+------------------+     P2P      +-----------------------+
|    PC 端         |<------------>|     Linux Server      |
| (Syncthing)      | (Port 22000) |     (Syncthing)       |
+------------------+              +-----------------------+
                                              |
                                              | 读写映射
                                              v
                                  +-----------------------+
                                  |   本地 /data/sync     |
                                  +-----------------------+
  • Syncthing:负责 PC 与服务器之间的文件 P2P 实时双向同步。
  • Rclone:将本地同步目录暴露为 HTTPS WebDAV (443) 服务,方便移动端挂载。
  • Tailscale:提供安全内网穿透与 MagicDNS 域名解析,无需公网 IP。

2. 服务端部署 (Linux)

假设同步目录为 /data/sync,运行用户为 myuser

2.1 部署 Syncthing

1) 下载并安装

1
2
tar xzf syncthing-linux-*.tar.gz
sudo cp syncthing-linux-*/syncthing /usr/local/bin/

2) 配置 systemd 服务

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
sudo tee /etc/systemd/system/syncthing@.service <<'EOF'
[Unit]
Description=Syncthing for %i
After=network-online.target tailscale.service
Wants=network-online.target
[Service]
User=%i
ExecStart=/usr/local/bin/syncthing serve --no-browser --home=/home/%i/.config/syncthing
Restart=on-failure
MemoryMax=200M

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now syncthing@myuser

3) 允许内网访问控制台

1
2
3
sudo systemctl stop syncthing@myuser
sed -i 's|<address>127.0.0.1:8384</address>|<address>0.0.0.0:8384</address>|' ~/.config/syncthing/config.xml
sudo systemctl start syncthing@myuser

访问 http://<服务器内网IP>:8384 进行管理。

2.2 部署 Rclone WebDAV

1) 安装 Rclone 并生成证书

移动端系统(特别是 iOS)连接 WebDAV 时要求 HTTPS。生成 10 年自签证书:

1
2
3
4
5
6
7
DOMAIN="server.your-tailnet.ts.net"
printf "[req]\ndistinguished_name=req_distinguished_name\nx509_extensions=v3_req\n[req_distinguished_name]\n[v3_req]\nsubjectAltName=DNS:$DOMAIN,DNS:localhost,IP:127.0.0.1\n" > /tmp/openssl_rclone.conf

openssl req -x509 -newkey rsa:2048 -nodes -days 3650 \
  -keyout ~/rclone.key -out ~/rclone.crt \
  -subj "/CN=$DOMAIN" -config /tmp/openssl_rclone.conf
chmod 600 ~/rclone.key ~/rclone.crt

2) 配置特权与 systemd 服务

给 Rclone 赋予非 root 绑定 443 端口权限:

1
sudo setcap cap_net_bind_service=+ep /usr/local/bin/rclone

创建 systemd 服务:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
sudo tee /etc/systemd/system/rclone-webdav.service <<'EOF'
[Unit]
Description=rclone WebDAV
After=network-online.target syncthing@myuser.service
Wants=network-online.target

[Service]
User=myuser
ExecStart=/usr/local/bin/rclone serve webdav /data/sync \
  --addr :443 \
  --cert /home/myuser/rclone.crt \
  --key /home/myuser/rclone.key \
  --user myuser \
  --pass mysecretpass \
  --vfs-cache-mode full \
  --dir-cache-time 1h \
  --poll-interval 15s \
  --umask 002
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now rclone-webdav

3. PC 端客户端配置 (Windows)

用 VBS 实现后台静默自启(避免黑窗口):

  1. 解压 Syncthing 到路径(如 E:\programfiles\syncthing-windows-amd64-v2.1.3,路径请勿含中文或空格)。
  2. 在开机启动文件夹中(Win + R 输入 shell:startup)新建 start_syncthing.vbs
1
2
3
   Set WshShell = CreateObject("WScript.Shell")
   WshShell.Run "E:\programfiles\syncthing-windows-amd64-v2.1.3\syncthing.exe serve --no-browser --no-console", 0
   Set WshShell = Nothing

  3. 打开 http://127.0.0.1:8384 控制台,添加服务器设备 ID 并共享目录即可。

4. 移动端挂载访问

  1. 导入并信任证书:将服务器生成的 rclone.crt 发送到移动端并安装,在系统设置中开启对该自签证书的信任。
  2. 连接 WebDAV:    - 打开移动端文件管理器(或第三方 WebDAV 客户端,如 Documents、FE File Explorer 等)。    - 添加 WebDAV 服务器:https://server.your-tailnet.ts.net,输入账号密码。
  3. 完成挂载:即可直接预览、编辑或上传下载云端文件,不占用移动端本地存储。
2026-09-04 02:55