自建 syncthing 服务同步 Logseq 笔记
5 分钟阅读

自建 syncthing 服务同步 Logseq 笔记

使用 docker 自建 syncthing 发现服务与中继服务, 实现多设备同步 Logseq 笔记

目前使用 Git 同步两台电脑的 Logseq 笔记,偶尔会忘记点 push。研究了一下 syncthing,采用 P2P 的方式同步文件,开源安全,所以想试试。

根据之前的调研,P2P 同步方案需要两个设备在同一局域网下且同时在线,这样才能直接通过局域网同步,否则需要通过中继服务器同步。

幸运的是 syncthing 提供了公共的中继服务器,而且也支持自建。

使用 docker-compose 部署 syncthing 服务

syncthing 需要两个服务:

  • 发现服务
  • 中继服务

docker-compose.yml 如下:

yaml
1version: "3" 2services: 3 # 自建syncthing的发现服务器 discovery-server 4 syncthing_discovery_server: 5 image: syncthing/discosrv 6 container_name: syncthing-discovery-server 7 command: -debug -listen=":8443" 8 environment: 9 - PUID=1000 10 - PGID=1000 11 volumes: 12 - ./syncthing/discosrv:/var/stdiscosrv 13 ports: 14 - 8443:8443 # Listen address (default “:8443”) 15 restart: always 16 17 # 自建syncthing的中继服务器 syncthing-relay-server 18 syncthing_relay_server: 19 image: syncthing/relaysrv:latest 20 container_name: syncthing-relay-server 21 command: -debug -pools="" -listen=":22067" 22 environment: 23 - PUID=1000 24 - PGID=1000 25 volumes: 26 - ./syncthing/strelaysrv:/var/strelaysrv 27 ports: 28 - 22067:22067 # 中继服务器的数据连接端口(必须开启) 29 #- 22070:22070 # 用于公用的中继服务器池,显示数据传输、客户端数量等状态,可不开启 30 restart: always

启动后,查看日志记录下发现服务的 ID 和 中继服务的 ID。

发现服务 ID

中继服务 ID

配置本机 syncthing 客户端

以 mac 客户端为例,启动后打开 UI 界面,点击右上角操作 -> 设置按钮,进入设置界面。

选择连接 Tab。

  • 协议监听地址: 即为中继服务地址,推荐为
text
1default,relay://<服务器 IP>:22067/?id=<中继服务 ID>
  • 全局发现服务器: 即为发现服务地址,推荐为
text
1default,https://<服务器 IP>:8443/?id=<发现服务 ID>

这里的 default 是可选的,意思是使用默认的中继服务器池和发现服务器池,如果不加 default,就是只使用自建的中继服务器和发现服务器。

保存配置后,点击侦听程序的数字,看到自己的中继服务就代表配置成功了。

Caution

以下内容为 12 月 10 日 补充

搭建 VPS Syncthing 客户端

试用几天发现之前理解错了,Syncthing 的中继服务器是用于两台设备保持连接的,本身并不存储数据,这就意味着两台设备必须同时在线才能同步数据。

但很明显我无法做到两台设备同时在线,所以需要一个 24 小时在线的设备做中转。

如上图所示,我在 vps 上搭建了一个 Syncthing 客户端:

  1. 设备 A 修改文件,发送到 VPS,等到晚上回家打开设备 B 时,设备 B 从 VPS 上同步数据
  2. 反之,设备 B 修改文件,发送到 VPS,等到第二天上班打开设备 A 时,设备 A 从 VPS 上同步数据

搭建之前建议先阅读 Syncthing 官方文档

我们使用 docker-compose 部署 Syncthing 客户端,配置文件如下:

yaml
1version: "3" 2services: 3 syncthing: 4 image: syncthing/syncthing 5 container_name: syncthing-client 6 hostname: syncthing-client 7 environment: 8 - PUID=1000 9 - PGID=1000 10 volumes: 11 - ~/.syncthing/data:/var/syncthing 12 ports: 13 - 8384:8384 # Web UI 14 - 22000:22000/tcp # TCP file transfers 15 - 22000:22000/udp # QUIC file transfers 16 - 21027:21027/udp # Receive local discovery broadcasts 17 network_mode: host 18 restart: unless-stopped

~/.syncthing/data 这里的路径是 Syncthing 今后文件的存放路径,可以自行修改。

部署完成后就可以使用 Syncthing 了,打开 http://<vps ip>:8384,进入 Syncthing 的 Web UI 界面。由于是运行在远程,建议设置账号密码。