自建anki同步服务器
为什么
这个延迟,虽然没有超时,但是还是比较高的。而且时常遇到的不稳定也对学习类软件不友好。
使用到的软件
anki
Python 3.9+ & PyPI (或者 rustup)
Debian 12
运行同步服务器
使用python
python3 -m venv /opt/anki-syncserver
/opt/anki-syncserver/bin/pip install anki
SYNC_USER1=user:pass /opt/anki-syncserver/bin/python -m anki.syncserver # 用户名为user,密码为pass
使用rust
cargo install --git https://github.com/ankitects/anki.git --tag 2.1.66 anki-sync-server
# 编译时用最新的 Anki 版本替换 2.1.66,需要安装 Protobuf(protoc)。
SYNC_USER1=user:pass anki-sync-server
通过这种方式即可以最简单的方式让 syncserver 跑起来了。但是这样运行程序的话,在退出终端后程序即终止,所以建议使用 systemctl 等方式使其长期运行。
echo "SYNC_USER1=user1:pass1" >> /opt/anki-syncserver/env-setting.conf # 自行修改user1和pass1为自己的用户名与密码
echo "SYNC_USER2=user2:pass2" >> /opt/anki-syncserver/env-setting.conf # 可添加多个用户
echo "SYNC_PORT=8899" >> /opt/anki-syncserver/env-setting.conf # 指定端口号
sudo nano /usr/lib/systemd/system/anki.service
[Unit]
Description = anki.syncserver
After = network.target
[Service]
Type = exec
User = root
EnvironmentFile = /opt/anki-syncserver/env-setting.conf # anki设置文件
ExecStart = /opt/anki-syncserver/bin/python -m anki.syncserver # python版
ExecStart = anki-sync-server # rust版
KillMode = process
Restart = always
[Install]
WantedBy = multi-user.target
sudo systemctl start anki.service
公网访问
默认设置下,服务器监听未加密的 HTTP 连接,因此不建议直接将其暴露在公网上。 你应该配置防火墙以阻止来自公网的访问,或在使用加密的连接方式,例如 VPN 或 HTTPS 反代。
如果你使用 AnkiMobile 且无法连接到本地网络上的服务器,请进入 iOS 设置,找到 Anki 并关闭再打开「允许 Anki 访问本地网络」选项。
你可以定义 SYNC_HOST
和 SYNC_PORT
来更改服务器监听的 ip 和端口。建议更换 SYNC_PORT
以防止与其他服务冲突。
下面是一个简单的 nginx 反代示例。
server{
listen 443 ssl;
server_name anki.example.com;
ssl_certificate /etc/nginx/ssl/xxx.pem; # 请务必使用 ssl 加密以保证安全
ssl_certificate_key /etc/nginx/ssl/xxx.key;
ssl_protocols TLSv1.2 TLSv1.3; # 为兼容 iOS 客户端,请启用TLS1.2
client_max_body_size 100M; # 最大文件大小
location / {
proxy_pass http://localhost:8899; # 请修改为自己使用的端口号
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
实际使用中,如果遇到特别大的文件的情况下,可以设置 MAX_SYNC_PAYLOAD_MEGS
为更高的值(单位:MB),并在 nginx 配置中更改默认大小限制。如果使用了cloudflare 或其他服务商的 cdn 服务,你应该确认服务商对文件大小是否有限制(例如 cloudflare 限制上传大小100M)。
参考:https://docs.ankiweb.net/sync-server.html
什么?你想知道为什么这么少的内容我要写一篇文章?当然是因为 1. 技术进步,同步服务器变简单了 2. cli.cacheci.com 关了啊,一键脚本都失效了,当然看起来内容少了(