基于syncthing构建通用同步服务
概述
本文旨在构建一种通用的应用数据同步服务,为应用增加数据同步服务,或替换应用自带的webdav等专用服务。
syncthing优劣势分析
优势
选择syncthing的原因:
- 开源、跨平台、保持开发,不受单一厂商、操作系统限制,可部署于windows、linux、macos、安卓等不同终端,支持原生安装或docker安装
- 自带内网穿透,无视NAT,想像成BT协议,只要能联网就能同步,有多条网络通道时,软件会自己寻找最合适的
- block级的增量更新,对文件的小改动只会同步变化部分,不会同步整个文件,省流省时
- 记录库内文件操作,比如在库内移动了文件位置,其他设备会同步操作,在各自库内执行同样操作,实现库内一致,而不是同步文件实现
- 版本控制,虽然弱但也有
- 管理简单,web界面,除了开始配对、设置下同步目录,扔在后台自动运行即可,日常基本不用操作
- 设备间是P2P直连,同步速度只与各设备上传带宽有关,synchitng的官方服务器只是帮助建设P2P通道,不参与数据转发,速度快、安全性好
劣势
syncthing当然也有劣势
-
每个设备都要保留完整的同步文件夹数据,不支持按需下载,存储空间占用比较高,需要好好规划同步目录结构,不同设备只选择对应的目录。我的方案是
ALL2ALL:所有设备需同步的,一般是keepass数据库等通用重要文件
Pc2Pc:只在PC设备间共享的,比如文档库、软件安装包等,如果文件过多可拆分为多个,比如Pc2Pc_office、Pc2Pc_soft等
Pc2Mobile:主要在移动设备间共享的
-
不支持外链分享,因为syncthing就没有服务端,只能以文件方式向外发送
如果有类似需求,可考虑seafile,这是一个企业级网盘方案,可替代onerive、drive等网盘
-
因为没有服务端,所有最好有一台设备保持在线,避免数据冲突,数据量少可考虑手机,数据量多最好配个NAS
syncthing部署
原生方案
-
linux:主流发行版,如debian、ubuntu、manjaro,源中自带syncthing,手动安装即可
# debian系
apt install syncthing
# arch系
pacman -S syncthing
-
windows:推荐SyncTrayzorPortable,虽然停更,但自己替换其中的syncthing可执行文件即可升级
-
安卓:github上有官方的apk安装包
docker方案
推荐docker-compose方式,管理方便,迁移简单,一个参考配置
version: "3"
services:
syncthing:
image: syncthing/syncthing
container_name: syncthing
hostname: my-syncthing
environment:
- PUID=1000
- PGID=1000
volumes:
- /wherever/st-sync:/var/syncthing
network_mode: host
restart: unless-stopped
healthcheck:
test: curl -fkLsS -m 2 127.0.0.1:8384/rest/noauth/health | grep -o --color=never OK || exit 1
interval: 1m
timeout: 10s
retries: 3
syncthing配置
不同平台的syncthing管理界面基本一致
syncthing初始化
- syncthing默认管理页面为http://127.0.0.1:8384,初次访问会提示设置用户名密码
- 配置本机名称,这个名称也是其他设备对接时使用的默认名称
- 配置本机默认存储参数,主要是存储路径、版本控制,作为文件添加时的默认值
- 复制各个设备的ID,ID是设备标识符,全网唯一
配置设备互信
- 通过ID添加同步设备
- 在对端设备上通过验证即可
设置同步目录
- 本机创建共享文件夹,主要是设置名称、路径和版本控制,版本控制一般选简单模式
- 设置共享范围,勾中要同步的设备即可
- 在对端设备上接受,点击
添加 即可,后续和共享文件夹配置类似,设置本地存储路径、版本控制方式
- 绿色表示同步完成,同步中会百分比显示
常用软件同步设置
软件不具备同步功能
软件具备同步功能
通常此类软件的同步功能依托webdav、S3等方式,且大多为收费选项,服务如果应用支持数据目录设置,一般都能替换
- obsidian、logseq、思源等笔记软件:将
笔记库 路径设置到syncthing中即可
- bookxnote pro:官方提供收费的webdav服务,但实测将
笔记目录、文件目录 设置到syncthing中也可实现多机同步。
- zotero:
数据目录 设置到syncthing中即可
其他用法
除了数据同步外,syncthing也可用于数据备份,替代常见的rsync协议,只要将本机文件夹类型设为 仅发送 ,对端设为 仅接收 即可,这样就能实现数据的单向传输。
|