自建 Anki 数据同步服务
使用 Docker 自行部署 Anki 同步应用,替代官方服务

· 2 min read
对于很多 Anki 用户来说,为了保存和同步抽卡数据以及进度,会使用 Anki 自带的同步服务。服务虽然是免费的,但可能对于部分用户来说速度并不理想,同时也会担心私人数据的隐私问题,比如 FSRS 的作者就提到1:
Under Anki’s privacy policy allowing research use of review data, he provided raw data from 20,000 user collections containing a staggering 1.4 billion review logs – the largest dataset of its kind in the spaced repetition field.
解决的一个方式就是在自己自建同步服务,将数据掌控权完全控制在自己手上。以前是用第三方的项目兼容 Anki 同步 API 来实现,不过从去年开始官方也放出来了自己的同步后台服务,今年又修订了其 Docker 实例不能设置存储卷的问题,可以说是非常方便了。这里就简单记录一下搭建的过程。
编译 Docker image #
Dockerfile #
直接从 官方 GitHub 仓库 下载 Dockerfile ,我这里用的是 Distroless ,小巧轻便:
curl -o Dockerfile https://raw.githubusercontent.com/ankitects/anki/refs/heads/main/docs/syncserver/Dockerfile.distroless
Docker Compose #
创建 docker-compose.yml
,文件内容:
---
services:
anki-sync-server:
build:
context: .
dockerfile: Dockerfile
args:
ANKI_VERSION: ${ANKI_VERSION:-25.02.5}
container_name: anki-sync-server
image: anki-sync-server
ports:
- 8888:8080
environment:
- SYNC_USER1=admin:random_text # 第一个用户的用户名和密码
- SYNC_USER2=kid:profile_pwd # 第二个用户的用户名和密码
volumes:
- ./data:/anki_data
编译 Docker image 并运行 #
mkdir data # 创建数据存储目录
docker-compose build --build-arg ANKI_VERSION=25.02.5 --no-cache # 编译,后续版本更新可以通过修改 build-tag 重新编译
docker-compose up -d
这样进程就能起来了,主机的对应端口(8888
) 会被监听处理请求。
如果需要在外网访问,比如手机使用同步,那么可以通过 Tailscale 连接内网,或者通过配置 DNS record 的方式直接将服务暴露到外网使用。
更新 Anki 应用设置 #
不管是桌面版还是手机应用,修改方式都是在 Preferences -> Syncing -> Self-hosted sync server 中填入自建服务的地址

更新后点击同步,输入在 Docker Compose yaml 中设置的用户名和密码信息开始同步,第一次操作时因为服务器没有任何用户数据,应用会给出提示,选择上传本地数据即可。
删除官网 Anki 用户账号 #
确认一切完成后,可以考虑删除掉官网的账号,避免浪费宝贵的互联网资源。毕竟作者常年免费提供一个这么棒的工具,不用的话就不要一直占着了。
打开 https://ankiweb.net/account/settings ,点击右上角的 Remove account, 按提示输入密码和 remove
关键字,确认后等待完成。

全部完成,以后一切如常,使用上没有任何感知,只是记住跟着应用升级编译后台服务部署就好。