DIY NAS系列24 — 数据同步与备份管理之 Syncthing

Syncthing 简介

在当今的数字化时代,我们的生活和工作中充满了各种文件,如文档、照片、音乐和电影。这些文件需要在多台设备之间进行同步和存储,以便我们随时随地地访问和使用。然而,随着国内各大网盘服务的衰落或限速,找到一个可靠的文件同步和存储解决方案变得越来越困难。市场上有很多自建网盘和云存储服务的软件,如 Seafile、NextCloud、ownCloud 和 Resilio Sync(原 BT Sync)。然而,Syncthing 以其独特的优点脱颖而出,受到了许多专业人士的推荐,被誉为 Resilio Sync 和 Dropbox 的最佳开源替代品。

Syncthing 的最大特点是它采用了与 Resilio Sync 类似的 P2P 分布式技术,这使得多台设备可以在没有中心服务器的情况下实时同步文件。这种设计不仅提供了高效的文件同步能力,还增强了数据的隐私保护。Syncthing 支持多种操作系统,包括: Linux、Windows、OS X、FreeBSD 和 Solaris,同时还有第三方的 iOS 和 Android 应用。此外,Syncthing 的轻量级设计也非常吸引人。无论在 Linux 还是 Windows 系统上,Syncthing 只需要一个可执行文件,就可以提供完整的文件同步服务。对于希望在桌面环境中使用 Syncthing 的用户,还有一个 GUI 桌面程序可供选择。

Syncthing 的特点:

  1. 私有性:由于 Syncthing 不使用中心服务器,您的文件只在您自己的设备之间同步,不会存储在任何第三方的服务器上。这提供了极高的隐私保护。
  2. 安全性:Syncthing 使用 TLS 和完全的端到端加密来保护您的数据。只有您的设备才能读取您的文件,其他人即使拦截了您的数据也无法解密。
  3. 实时同步:Syncthing 可以实时监控文件的更改,并立即同步到其他设备。这使得您可以立即在所有设备上看到您的更改。
  4. 跨平台:Syncthing 支持所有主要的操作系统,包括 Windows、macOS、Linux 和 Android。无论您使用哪种设备,都可以使用 Syncthing。

总的来说,Syncthing 是一个强大的文件同步工具,它提供了高度的私有性和安全性,并且可以在几乎所有的设备上运行。无论您是需要在家庭网络中同步文件,还是在远程服务器之间备份数据,Syncthing 都是一个值得考虑的选择。

部署 Syncthing

Syncthing 官网: Syncthing
GitHub: GitH. b - syncthing/syncthing: Open Source Continuous File Synchronization

说明: 基于前期构建的 traefik 网关,详见: DIY NAS系列12 — Traefik 出口网关配置
在 docker-compose.yaml 文件中,会对重要的配置进行说明,因个人网络环境等不同,需要根据自身实际情况调整配置。

[root@demo ~]# cat > docker-compose.yml << \EOF
version: "3"
services:
  syncthing:
    image: lscr.io/linuxserver/syncthing:latest
    container_name: syncthing
    hostname: syncthing
    environment:
      - PUID=0
      - PGID=0
      - TZ=Asia/Shanghai
    volumes:
      - /SSD/Demo/Syncthing/config:/config
      - /SSD/Backup:/data # 备份文件存放目录
    ports:
      - 8384:8384
      - 22000:22000/tcp # 除了开启对应WEB服务端口至公网外,还需要开启这三个端口。
      - 22000:22000/udp
      - 21027:21027/udp
    restart: unless-stopped
    networks:
      - traefik_net
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=traefik_net"
      - "traefik.http.routers.syncthing.rule=Host(`sync.rockylinux.cn`)"
      - "traefik.http.routers.syncthing.entryPoints=websecure"
      - "traefik.http.routers.syncthing.tls.certresolver=myresolver"
      - "traefik.http.routers.syncthing.service=syncthing"
      - "traefik.http.services.syncthing.loadbalancer.server.port=8384"
networks:
  traefik_net:
    external: true
EOF

# 启动服务 
[root@demo ~]# docker-compose up -d

配置 Syncthing

这里说一下重点配置,打开 https://sync.rockylinux.cn

设置登录密码

点击操作 -- 设置 -- 图形用户界面,设置登录账号及密码,保障基础安全。实际上 Syncthing 还支持 LDAP 认证,这个如果我们在企业中使用会很方便。

开启 NAT 穿透

在 Syncthing 中 NAT 穿透功能允许设备即使在私有网络后面也能建立直接的连接。这意味着,即使您的设备位于防火墙或路由器之后,它们仍然可以直接与其他设备同步数据,而无需通过中间服务器。这可以提高同步的速度和效率,同时还能提高数据的隐私性,因为您的数据不需要经过任何第三方服务器。然而,值得注意的是,并非所有的网络环境和设备都支持 NAT 穿透。在某些情况下,您可能需要在路由器上进行一些配置,以使 NAT 穿透正常工作。

配置公网连接地址

参考文档: Syncthing Configuration — Syncthing v1.23.4 documentation

在这是设置对应连接地址及端口,注意端口需要在个人的防火墙或路由器上开启。Addresses 配置可以是 tcp://sync.rockylinux.cn:22000,default
这里详细说一下,配置设备地址的语法:

  • tcp://sync.rockylinux.cn:22000: 这部分表示 Syncthing 通过 TCP 协议连接到指定的服务器的 22000 端口。
  • ,: 这是一个分隔符,用于分隔多个地址。
  • default: 默认就是 tcp://0.0.0.0:22000 quic://0.0.0.0:22000 dynamic+https://relays.syncthing.net/endpoint
  • dynamic: 这是一个特殊的关键字,它让 Syncthing 内置的发现服务器来查找和连接到其他设备。这对于设备的 IP 地址经常变动或者设备位于 NAT(网络地址转换)之后的情况非常有用。

因此 tcp://sync.rockylinux.cn:22000,default 这样的设置意味着 Syncthing 将尝试直接连接到 sync.rockylinux.cn 的 22000 端口,并且还会使用动态发现来寻找其他设备。

我会更建议在客户端直接设置对应服务器端地址,点击操作--高级--设备--远端设备 NAS: tcp://sync.rockylinux.cn:22000,dynamic

安装客户端

客户端下载: Releases · syncthing/syncthing
Syncthing 的客户端有很多,我们可以根据自己的需求下载。这里以 macOS 客户端为例。macOS 安装后打开,在状态栏会出现一个图标,点击 Open,会打开对应本地 Web 页面,和服务器端页面一样,然后再根据自己需求配置对应客户端即可。
如果在浏览器的 icon 图标上出现感叹号,说明当前的网页连接不安全,这是因为我们的客户端是通过 HTTP(而非 HTTPS)传输的。

配置客户端连接

从服务器端获取设备 ID,点击操作 -- 显示 ID 。

复制对应设置 ID 号,设备 ID 号格式: XXXXXXX-XXXXXXX-XXXXXXX-XXXXXXX-XXXXXXX-XXXXXXX-XXXXXXX-XXXXXXX,服务器和本地的客户端都有各自的设备 ID 用于访问,这本质上就是一个公钥,用于双方身份验证的。

来到客户端这边,点击【添加远程设备】

粘贴对应设备 ID 号,并设置设备名称。

这时候服务器端会提示请求连接,点击【添加设备】,就可以将对应客户端授权至服务器端远程设备列表。

这里设置两端的共享文件夹及密钥,一个共享文件夹密钥(Folder ID),这是一个唯一标识您的共享文件夹的字符串,用于确保只有知道这个密钥的设备才可以访问和同步该共享文件夹的内容。当您想要在两个或更多的设备之间共享一个文件夹时,您需要确保每个设备都使用相同的文件夹密钥。这样 Syncthing 就可以知道这些设备都是同步同一份数据。这个设置增强了您的数据安全性,因为只有知道密钥的设备才能访问共享文件夹。这样可以防止未授权的设备访问您的数据。

设置同步模式

Syncthing 的同步方式具有灵活性,既可以设置为双向同步,也可以设置为单向同步,用户可根据实际需要进行调整。
例如:如果我们想要服务器仅作为接收端,只接受客户端上传的文件,而客户端仅将特定文档发送至服务器,那么可以按照以下步骤进行设置。

服务器端设置仅接收

客户端设置仅发送

常用操作说明

查看最近同步记录: 两台 Syncthing 之间数据同步记录,可以点击【最近更改】查看。
手动立即同步: 点击暂停,然后再点击恢复。

后述

总结起来,Syncthing 是一个强大而灵活的同步工具,它还包含许多高级特性等待我们去发掘和利用,例如中继服务器功能可以帮助我们在复杂的网络环境中实现设备之间的连接,文件版本控制功能可以让我们追踪文件的历史变更并能恢复到任意的旧版本。Syncthing 的可能性远不止于此,这只是冰山一角。它的真正力量在于我们如何去应用它,以满足我们自己独特的需求和场景。
在接下来的博文中,我们将转向另一个开源项目——Obsidian。Obsidian 是一款强大的笔记管理软件,它专注于帮助用户管理和链接他们的知识。我们期待在下一篇文章中与您一起探索 Obsidian 的世界,敬请期待!

下篇预告: DIY NAS 系列25 -- 双链笔记管理之 Obsidian

Avatar photo

关于 木子

Founder of the Rocky Linux Chinese community, MVP、VMware vExpert、TVP, advocate for cloud native technologies, with over ten years of experience in site reliability engineering (SRE) and the DevOps field. Passionate about Cloud Computing、Microservices、CI&CD、DevOps、Kubernetes, currently dedicated to promoting and implementing Rocky Linux in Chinese-speaking regions.
用一杯咖啡支持我们,每一篇 [文档] 都经过我们实操,并非从网上一味的copy,期间花费了大量的心思,希望能够帮忙到您。
暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇