Anki 同步服务部署 (Rocky 9)
Anki 同步服务部署 (Rocky 9)
「Anki 是一款让记忆变得轻而易举的软件。与传统学习方式相比,它的效率要高得多,你可以大幅缩短学习时间, 或者显著扩充学习量。」—— 选自 Anki 中文文档,更多内容参考这里。
考虑到将来学习任务依赖该软件来辅助记忆。PC 端制作卡片,移动端学习,如果仅仅依靠手动导出再导入的话就比较麻烦了。因此选择部署同步服务来完成任务,应用启动就会自动同步数据,可以节省很多时间。
Anki 官方免费的同步服务 Anki Web,不过有时间限制——在一段时间不使用的话,就会清除数据。以下为服务部署大致流程:
- 下载 Anki 客户端和安装 zstd 解压软件
- 安装 Anki 并解决依赖问题
- 启动同步服务并使用客户端登陆
- 配置 Systemd 启动脚本
- 配置 Ningx 反向代理
下载 Anki 客户端和安装 zstd 解压软件
根据官方文档描述,Anki 的同步服务和客户端绑定在一起的,拥有 PC 客户单即可使用同步服务。下载 Anki Linux 平台客户端,Anki 最新版本 2.25.04,但是对 GLIBC 版本要求比较高,Rocky 9 的 GLIBC 版本为 2.34

所以这里选择倒退一个次版本号使用 2.24.11,Linux 平台有 Qt5 和 Qt6 两个版本,都可以。安装包默认使用 zstd 压缩的,因此需要先安装 zstd ,没有 tar 命令的话也要安装 tar
# 安装 zstd 和 tar
sudo dnf install -y zstd tar
# 解压软件包
tar -Izstd -xvf anki-24.11-linux-qt5.tar.zst安装 Anki 并解决依赖问题
直接运行 Anki 会出现缺少库的问题,安装 X11 Server 即可。Linux 下的桌面环境一般是由 X11 提供的(除此之外还有 Wyland),而部署的服务镜像一般不带桌面环境。
sudo dnf install -y xorg-x11-server-Xorganki-missing-libgl-dependency 如果参考上面的报错,开始想到的是缺少 libGL , 安装
mesa-libGL就可以搞定。但是再次执行依然缺库,看到缺少的库名反倒是提醒了我。anki-missing-libXcomposite-dependency 当我再次在虚拟机中测试的时候,缺少的库可能不只有这两个,所以实际部署的时候还需要根据实际情况来判断
想把同步服务给拿出来,就不用安装 X11 Server 了。
执行解压包内自带的安装脚本,默认安装路径在 /usr/local/share,可执行文件在 /usr/local/bin
sudo ./install.sh启动同步服务并使用客户端登陆
官方文档中 Linux 平台服务启动方式如下:
SYNC_USER1=user:pass anki --syncserverSYNC_USER1 变量用来设置登录的用户名和密码,增加用户可以设置 SYNC_USER2 、SYNC_USER3 等以此类推。SYNC_HOST 和 SYNC_PORT 可以设置监听主机 IP 和端口,默认 0.0.0.0:8080 。
客户端登录设置


登录成功同步服务会输出如下内容

配置 Systemd 启动脚本
方便服务管理,给 Anki 写了 Systemd 配置,参考如下:
Description=Anki Sync Server
After=syslog.target
After=network.target
[Service]
RestartSec=2s
Type=simple
User=anki
Group=anki
WorkingDirectory=/home/anki
ExecStart=/usr/local/bin/anki --syncserver
Restart=always
Environment=SYNC_USER1=username:password SYNC_HOST=127.0.0.1 SYNC_PORT=8081
[Install]
WantedBy=multi-user.target创建好文件,放到 /etc/systemd/system 目录下即可。由于配置里的执行用户和组使用的是 anki 用户,因此启动前需要添加 anki 用户
# 创建用户及家目录(创建用户时默认创建同名用户组)
useradd -m anki服务相关的控制命令
# 启动服务
systemctl start anki
# 服务状态
systemctl status anki
# 停止服务
systemctl stop anki
# 激活/禁用开机自启
systemctl enable anki
systemctl disable anki
# 查看服务日志
journalctl -u anki配置 Ningx 反向代理
站点内的所有服务都是通过 Ningx 代理出去的,这样可以做到将一个顶级域名下的各二级域名映射到不同的服务上去,不同的服务由端口区分。比如 gitea.mtfh.cc 对应的就是 Gitea 服务,blog.mtfh.cc 对应的就是当前博客。另外还可以通过 Nginx 来支持 https 协议。
Nginx 配置参考
server {
listen 80;
server_name anki.mtfh.cc;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name anki.mtfh.cc;
ssl_certificate /etc/nginx/certificates/anki.mtfh.cc.pem;
ssl_certificate_key /etc/nginx/certificates/anki.mtfh.cc.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}SSL 证书可以去购买或者去某某云白嫖吧,Couldflare 也有。设置完成后客户端中的自托管服务设置修改为对应的域名即可。


