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 实现后台静默自启(避免黑窗口):
- 解压 Syncthing 到路径(如
E:\programfiles\syncthing-windows-amd64-v2.1.3,路径请勿含中文或空格)。 - 在开机启动文件夹中(
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. 移动端挂载访问
- 导入并信任证书:将服务器生成的
rclone.crt 发送到移动端并安装,在系统设置中开启对该自签证书的信任。 - 连接 WebDAV:
- 打开移动端文件管理器(或第三方 WebDAV 客户端,如 Documents、FE File Explorer 等)。
- 添加 WebDAV 服务器:
https://server.your-tailnet.ts.net,输入账号密码。 - 完成挂载:即可直接预览、编辑或上传下载云端文件,不占用移动端本地存储。