我有 3 台电脑(办公 / 家里 / 笔记本),这还不包括手机设备,最近在使用Logseq 个人知识库, 想同步文件夹,但遇到下面问题:

  • 单位网络防火墙很强大,云盘访问不稳定
  • 坚果云、OneDrive都有存储空间限制,VIP会员需要按年付费
  • 不想再靠 U 盘在多台电脑之间来回拷文件

经过试验,最终我放弃了坚果云和 OneDrive,选择了 Syncthing的同步方案。

syncthing是一款开源、去中心化的多设备的文件同步工具,数据在网络上加密传输,非常安全,不需要依赖第三方云服务器。Windows/Linux/Android/iOS等系统上都可以运行。

Syncthing 更像是让你的几台电脑彼此直连(如果这些电脑不关机的话),自己给自己做文件同步,而不是把数据交给某个中心化云盘。

现在的解决方案

整体思路并不是“自建一个云盘”,而是:

  • 让多台设备之间直接同步数据,不再依赖中心服务器
  • 办公室电脑要求下班的时候必须关机,树莓派(云主机)一直在线,保证随时同步

  1. 我有一个闲置的树莓派4B,让它24小时开机,运行syncthing。不接显示器、不挂硬盘,一年电费不到20元。

alt text

  1. 搭建个人独立博客的时候,购买了99元的阿里云主机,也是24小时开机,反正也没多大的访问量,运行syncthing服务绰绰有余。

  2. 家里、办公电脑、笔记本电脑上都安装syncthing,需要同步的时候,把syncthing启动起来。

alt text

安装配置过程

树莓派上、电脑上安装都比较方便,使用官网上的安装包直接安装运行即可。

官网地址:

https://syncthing.net/

只是在阿里云主机上遇到些麻烦,因为这台机器是ubuntu 24.04,99元包年优惠的时候入手的,性能比较弱,就没有启动X窗口等进程,而syncthing需要访问 http://127.0.0.1:8384,图形界面进行配置非常方便。

syncthing的配置需要使用device id来唯一标识不同的主机设备,比如:NWTLTX2-XXXXXXX-YYYYYYY-ZZZZZZZ-AAAAAAA-BBBBBBB-1111111-6GWDCQE

查了一下,发现syncthing也支持命令行(headless)进行设置,我也询问了大模型,但它给的答案错误很多。

下面这条命令是整个 headless 配置里最关键的一步:

syncthing cli config devices add --device-id 我的办公室电脑的设备ID --name "SLB-OFFICE-COMPUTER" --auto-accept-folders

上面这个命令的意思是,把我的办公电脑的设备ID加入到信任列表中,并且办公电脑如果发起文件夹同步请求,会自动确认。

另外,还有一个坑,需要放开阿里云的22000的端口。这个需要在云主机的网卡上添加一个策略。

把syncthing配置为开机自启动,需要下面的步骤:

sudo cp /usr/lib/systemd/system/syncthing@.service /etc/systemd/system/syncthing@shenlb.service
# @后面是用户名,可以为不同用户独立运行syncthing实例。syncthing不推荐使用root启动。
sudo systemctl enable syncthing@shenlb.service
sudo systemctl start syncthing@shenlb.service
sudo systemctl status syncthing@shenlb.service
# 如果输出里看到active(running),则表示服务已成功启动
# 配置文件在 ~/.local/state/syncthing 这个文件夹下,文件是config.xml

另外还需要folder id,用于识别不同的文件夹。电脑上操作比较方便,访问 http://127.0.0.1:8384,图形化界面配置,非常简单方便。这些配置过程网上可以很方便地查到。

办公室电脑里的syncthing是下面这样的:

alt text

笔记本电脑上是下面这样:

alt text