本文介绍通过 anki-sync-server (ankisyncd) 搭建 anki 自定义同步服务器,适用于 anki 各类客户端2022年的最新版本。
注:本文并非零门槛搭建教程,需对 Linux 的使用和安全有基本认识,不建议一般用户自行搭建同步环境。
基础环境
- AlmaLinux 8.5 (RockyLinux/CentOS 8 同系列)
- Python 3.9
- ankicommunity / anki-sync-server
本文基于2022年3月11日develop版,于2022年4月18日测试 - Anki Windows 电脑端 v2.1.49(2022年4月最新版)
- AnkiDroid 安卓客户端 v2.15.6(2022年4月谷歌商店最新版)
注1:本文命令全部基于在 root 权限下,普通用户自行添加 sudo 在命令前面
注2:本文介绍的方式为本机搭建,并非使用 docker 或 docker compose 。本人尝试过 docker compose 解决方案,有问题,非常不完善,不建议使用。
同步服务器搭建步骤
1. 配置 Linux,更新 dnf,安装 epel-release 扩展,此步骤本文不做讨论。
2. 安装 Python3.9 版本和 Git
CentOS8 自带的 python 好像是3.6,不满足 anki 同步服务器的安装条件。所以通过 dnf 安装 python39,命令为
dnf install python39 git
参考:RedHat
注:安装后,使用时应在 python 后加版本号,如 python3.9 xxxx
和 pip3.9 xxxx
验证一下安装:
python3.9 --version pip3.9 --version
3. 使用pip安装wheel
wheel 这个模块貌似是 anki 同步服务器的一个安装基础,通过 pip 安装
pip3.9 install wheel
4. 在服务器中拉取最新版代码
我们一般把软件放在/usr/local
下,所以可以先 cd /usr/local
,然后拉取
git clone https://github.com/ankicommunity/anki-sync-server
5. 安装依赖
进入程序目录中,准备安装,这部分可以再参考官方文档
cd anki-sync-server pip3.9 install -r src/requirements.txt
过程中可能因为网络问题报timeout中断,重试即可,不能看到有报错出现。
6. 升级anki版本
由于更新不太及时,默认安装到 python 的 anki 模块版本比较低,用 pip 更新将其更新到最新版:
pip3.9 install anki --upgrade
7. 处理配置文件
cp src/ankisyncd.conf src/ankisyncd/.
复制好配置文件后,可以对其进行配置,比如更改端口号,更改数据文件位置等
vi src/ankisyncd/ankisyncd.conf
注:官网中的另一种方法,环境变量文件 config/.env.local
我测试过好像不好使,没有详细研究。
8. 添加用户
添加用户的脚本,默认被放在了 src/ankisyncd_cli/ankisyncctl.py,但是根据实测和 issue,该脚本在这里运行会出现问题,报一个找不到模块的错误。由于我不太会 python ,不清楚它的原理,只能暂时把它移动到 src 目录下,也就是上移一级。
mv src/ankisyncd_cli/ankisyncctl.py ./src/
然后运行它,替换为你的账号
python3.9 src/ankisyncctl.py adduser aspirantzhang
输入该账号的密码。
9. 开启同步服务器
进入 src 目录,以后台常驻模式方式运行同步服务器
cd src nohup python3.9 -m ankisyncd >> anki.log 2>&1 &
注:运行日志在 src 目录下的 anki.log,可以通过 tail -f anki.log
对它进行持续监测
测试进程:ps -ef | grep anki
[user@server ~]$ ps -ef | grep anki root 15330 1 0 Apr17 ? 00:00:00 sudo nohup python3.9 -m ankisyncd root 15331 15330 0 Apr17 ? 00:00:06 python3.9 -m ankisyncd user 40455 39452 0 14:18 pts/3 00:00:00 grep --color=auto anki
测试访问:浏览器直接访问你的 IP 和端口号,看能否打开。如果无法打开,等待很久后报错。应该查看运行日志,检查是否没有打开防火墙,或云服务器的安全组是否打开等问题。同时,也要注意下面的步骤。
10. 核对配置文件路径
查看一下 anki.log 的日志(tail -f anki.log),关注其中配置读取的位置
[xxxx]:INFO:ankisyncd:Loaded config from /usr/local/anki-sync-server/src/ankisyncd.conf
本文中的配置,在第7小节中,是将配置文件 ankisyncd.conf
放入了 src/ankisyncd/
里面,这也是官网的写法。
但是,实际运行中,可能它不这么读取。它可能读取的是 src
下面的那个,所以要在日志中仔细查看。它读哪个,就改哪个。
11. 设置开启启动
crontab -e
@reboot cd /usr/local/anki-sync-server/src/ && nohup python3.9 -m ankisyncd >> anki.log 2>&1 &
命令解释:每次开启重启时,进入那个文件夹,召唤 nohup 命令在后台常驻,运行 ankisyncd,并将所有日志追加写入到 anki.log 中。
客户端配置
1. 电脑端:
官网 https://apps.ankiweb.net/ 下载最新版
本文中实测是最新稳定版2.4.19
安装后打开 anki 主界面,按 shift+ctrl+a 打开 Addon(或Tools菜单的Add-ons),选择右侧的 View Files
此时会打开 addons21 目录,新建目录 ankisyncd
(实际这个目录名可以自己定,不一定非是这个)
新建文件名 __init__.py
输入内容,注意替换你的 IP 和端口号,注意你是 https 还是 http。
import os addr = "http://127.0.0.1:1234" # 设置为你的ip和端口 os.environ["SYNC_ENDPOINT"] = addr + "sync/" os.environ["SYNC_ENDPOINT_MEDIA"] = addr + "msync/"
2. 安卓手机端:
中文:设置 > 高级设置 > 自定义同步服务器
英文:Settings > Advanced > Custom sync server
同步地址 / Sync url:设置为你的ip和端口,必须要带前面的协议,如:
http://127.0.0.1:1234/
媒体文件同步地址 / Media sync url:设置为你的 ip 和端口,必须要带前面的协议,后面必须加 msync/,如
http://127.0.0.1:1234/msync/
注意事项
电脑端使用一般没什么问题,但手机端要注意,毕竟需要通过网络传输,可能存在各种超时和故障。如果东西很多很多,建议尽量分批传输。有问题时可排查 anki.log 的日志,或通过强制同步功能(force change)做重试。有些插件也不小,同样也会同步给手机端,可能也会导致一些同步缓慢的问题。
查看运行日志:tail -f /usr/local/anki-sync-server/src/anki.log
媒体文件目录:/usr/local/anki-sync-server/src/collections/*USERNAME*/collection.media/