0

基于syncthing构建通用同步服务

发表于:6 天前 技术整活 253

基于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初始化

  1. syncthing默认管理页面为http://127.0.0.1:8384,初次访问会提示设置用户名密码
  2. 配置本机名称,这个名称也是其他设备对接时使用的默认名称
  3. 配置本机默认存储参数,主要是存储路径、版本控制,作为文件添加时的默认值
  4. 复制各个设备的ID,ID是设备标识符,全网唯一

配置设备互信

  1. 通过ID添加同步设备image.png
  2. 在对端设备上通过验证即可

设置同步目录

  1. 本机创建共享文件夹,主要是设置名称、路径和版本控制,版本控制一般选简单模式image.png image.png
  2. 设置共享范围,勾中要同步的设备即可image.png
  3. 在对端设备上接受,点击 添加即可,后续和共享文件夹配置类似,设置本地存储路径、版本控制方式

image.png image.png image.png

  1. 绿色表示同步完成,同步中会百分比显示

image.png

常用软件同步设置

软件不具备同步功能

  • 可指定数据存储目录的:在syncthing的同步文件夹中为该应用创建个单独的数据目录即可。

    • 洛雪音乐、zyplayer等electron系统应用:可通过 --user-data-dir="<syncthing同步文件夹路径>/<应用名称>"将应用的数据目录指定到syncthing同步文件夹中,替换时注意 删去<> image.png
    • 小狼毫输入法:用户文件夹
    • keepass:密码数据库
    • windterm:用户目录
  • 不可指定存储目录的:

    • 采用便携软件,将便携软件整个部署在syncthing目录中
    • 采用数据备份方案,通过导出、导入定期备份恢复数据

软件具备同步功能

通常此类软件的同步功能依托webdav、S3等方式,且大多为收费选项,服务如果应用支持数据目录设置,一般都能替换

  • obsidian、logseq、思源等笔记软件:将 笔记库路径设置到syncthing中即可
  • bookxnote pro:官方提供收费的webdav服务,但实测将 笔记目录、文件目录设置到syncthing中也可实现多机同步。 image.png
  • zotero:数据目录设置到syncthing中即可 image.png

其他用法

除了数据同步外,syncthing也可用于数据备份,替代常见的rsync协议,只要将本机文件夹类型设为 仅发送,对端设为 仅接收即可,这样就能实现数据的单向传输。 image.png

收藏
送赞
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

发表回复

评论列表(4)

我最后用了微力同步,因为他的自建中继服务器简单
6 天前 回复
据说微力就是syncthing改的😂  详情 回复
5 天前
据说微力就是syncthing改的😂
5 天前 回复
希望飞牛优化下同步软件
4 天前 回复
看个人要需求,像群晖的drive、威联通的qsync,我觉得都没syncthing或seafile好用,从来没启用过  详情 回复
3 天前
看个人要需求,像群晖的drive、威联通的qsync,我觉得都没syncthing或seafile好用,从来没启用过
3 天前 回复