目录
使用Logseq做我的主力笔记软件已经好几年了,笔记的同步问题却一直困扰着我。Logseq虽有官方付费同步服务,然而因为我比较少用手机版本,所以1个月5美元对我来说还是偏贵了,毕竟我现在用的服务器也才24元一个月,而我又很喜欢自部署各种服务,所以一直都希望可以自建同步服务。
由于Logseq笔记都是直接保存成本地Markdown文件,所以之前我一直是用Syncthing这样的文件同步工具实现同步。然而由于我的使用强度并不高,没必要一直开着Syncthing,所以要在手机上使用Logseq就要先打开Syncthing,等同步完成了再打开Logseq。可是用手机版Logseq大部分情况都是想要快速记录一些想法,这么一折腾就忘了要记什么了,因此可以说整体使用体验不尽如人意。
后来Logseq开始开发DB版,数据改为保存到本地SQLite数据库中,这样就不能直接用Syncthing同步了。官方对自建同步的态度一直都不太明确,直到近几个月才有进展,现如今自建同步已经正式支持了,我一直在Discord上关注这个,当然也是第一时间部署啦,下面就简单分享一下部署流程。

需要注意的是自建同步服务只适用于Logseq DB版,原来的Markdown版(现在叫Logseq OG)不适用。目前GitHub上的Nightly版本才是DB版本,以及访问test.logseq.com也是DB版本。以下我会使用Docker来部署(感谢yshalsager提供的Docker镜像),以及使用caddy-docker-proxy来做反向代理,因此可以很方便地实现自动https。
部署caddy-docker-proxy #
可参考文档。新建一个文件夹caddy,用于存放caddy相关配置,然后创建compose.yaml文件。
mkdir caddy
cd caddy
touch compose.yaml
compose.yaml文件内容如下:
services:
caddy:
image: lucaslorentz/caddy-docker-proxy:ci-alpine
ports:
- 80:80
- 443:443/tcp
- 443:443/udp
environment:
- CADDY_INGRESS_NETWORKS=caddy
networks:
- caddy
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- caddy_data:/data
restart: unless-stopped
networks:
caddy:
external: true
volumes:
caddy_data: {}
然后创建上述名叫caddy的网络:
docker network create caddy --ipv6
最后运行docker compose up -d即可。
部署Logseq db-sync #
首先还是创建一个文件夹,用于存放同步服务的相关配置,以及创建.env以及compose.yaml两个文件。
mkdir logseq
cd logseq
touch .env
touch compose.yaml
.env内容如下,基本只用改DB_SYNC_BASE_URL以及DB_SYNC_ADMIN_TOKEN这两个值:
# Node adapter runtime settings
DB_SYNC_PORT=8787
DB_SYNC_BASE_URL=https://logseq-sync.example.com # 用来访问同步服务的地址
DB_SYNC_DATA_DIR=/app/data
DB_SYNC_STORAGE_DRIVER=sqlite
DB_SYNC_ASSETS_DRIVER=filesystem
DB_SYNC_LOG_LEVEL=info
# Logseq Cognito values used for JWT validation
COGNITO_ISSUER=https://cognito-idp.us-east-1.amazonaws.com/us-east-1_dtagLnju8
COGNITO_CLIENT_ID=69cs1lgme7p8kbgld8n5kseii6
COGNITO_JWKS_URL=https://cognito-idp.us-east-1.amazonaws.com/us-east-1_dtagLnju8/.well-known/jwks.json
# Optional hardening for maintenance/admin endpoints
DB_SYNC_ADMIN_TOKEN=<一串随机字符>
compose.yaml文件内容如下:
services:
sync:
image: ghcr.io/yshalsager/logseq-selfhost-sync:latest
container_name: logseq-sync
restart: unless-stopped
env_file: .env
networks:
- caddy
volumes:
- sync_data:/app/data
read_only: true
tmpfs:
- /tmp
cap_drop:
- ALL
security_opt:
- no-new-privileges:true
labels:
caddy: logseq-sync.example.com # 改为与前面设置的相同的地址
caddy.reverse_proxy: "{{upstreams 8787}}"
volumes:
sync_data:
networks:
caddy:
external: true
然后运行docker compose up -d,caddy-docker-proxy会自动配置caddy及申请证书,如访问https://logseq-sync.example.com/health返回{"ok":true}则说明部署成功。
值得说明的是当前Logseq需要使用AWS Cognito来实现用户认证,并不支持本地用户管理或者OIDC。前面.env中配置的就是当前官方使用的用户池,你也可以使用自己的用户池,不过不是必须,这篇文章有介绍,另外如果不想用Docker部署也可以参考这篇文章。
在Logseq客户端中使用 #
目前Logseq DB版还有诸多不完善的地方,所以强烈建议进行以下操作之前先备份自己的库。打开Logseq DB客户端或者网页版test.logseq.com,打开“设置”,“高级”,修改同步服务器URL为前面的自定义地址https://logseq-sync.example.com。Android端是点击右上角三个点图标,打开的菜单下面就是自定义同步服务器URL的选项。然后还需要登录,登录之后会提示设置一个加密密码,用于服务器端的加密。最后打开“所有图谱”页面,如果以上配置全部没问题的话,本地的图谱应该可以选择“使用Logseq Sync(Beta测试)”来开启同步,创建新图谱的时候也会提示是否使用Logseq Sync。
Logseq DB的同步服务端是一个Node.js程序,资源占用并不高,在我的1G内存服务器上也能轻松部署,同时有多个客户端连接的时候内存占用也不会超过100MB,另外同步速度也很快,几乎秒同步,体验非常好。