自建anki同步服务器搭建步骤 2022年最新完美版

本文介绍通过 anki-sync-server (ankisyncd) 搭建 anki 自定义同步服务器,适用于 anki 各类客户端2022年的最新版本。

注:本文并非零门槛搭建教程,需对 Linux 的使用和安全有基本认识,不建议一般用户自行搭建同步环境。

基础环境

注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 xxxxpip3.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/

点赞