当前位置:
文章详情

考研、考证党的神器anki的同步化方案——自建同步服务器

2023-02-14 12:10:46 19点赞 103收藏 6评论

引言

今天无意中翻出了早些年考研时候制作的那些卡片,感概颇多。当初也是被ankiweb服务器的龟速同步速度折磨的不轻。想想一晃眼也好些年过去了,这款软件在当时确实也是给予了我极大地帮助,眼瞅着考研在即,想着如果还能有考研的值友们看到这篇文章,拿来做做卡片背一背肖四肖八的内容也是极好的。

这篇文章没有太多功利性的内容,也默认看的朋友已经能够使用anki进行背诵学习,所以图片方面的内容几乎就是没有了。在此也特别想感谢当年帮助过我一位技术小哥,当初买的香橙派zero,伴随了我考研的始终。当初他一手帮我部署好拿来就用的,也没有收过我一分钱费用,虽然不知道您的名字且再也联系不到您,还是想表达一下深深的感谢。同时写这篇文章也是想在某种意义上帮助正在奋斗在考研战线上的朋友们。

关于linux方式的部署,主要借鉴了之前一位老哥的文章,并且获得了他的同意转载了这部分的内容(在此深表感谢)。关于docker的部分是依据github上面的内容整理归类所得。

需要注意的一点是,linux的部署方式应当是可以支持各类arm设备的,但是docker方式的部署作者已经标明只支持x86架构的设备。

1 ankisync同步服务器搭建

1.1 linux方式

1.1.1 安装 Python3.9 版本和 Git

经过测试,在python3.10环境下安装会报出如下错误:

Ignoring importlib-metadata: markers 'python_version >= "3.8" and python_version < "3.10"' don't match your environment

Ignoring zipp: markers 'python_version >= "3.8" and python_version < "3.10"' don't match your environment

因此,推测该服务的运行依赖的就是python3.9,因此为了保障服务的成功部署,还是得安装python3.9的版本。

ubuntu安装python3.9

sudo apt-get install software-properties-common -y

sudo add-apt-repository ppa:deadsnakes/ppa

sudo apt-get update

sudo apt-get install python3.9

验证一下安装:

python3.9 --version

pip3.9 --version

需要注意的一点是,如果机器本身就是python3.9,那就无需指定python版本,在后续的指令中,按照示例使用python3即可,pip也是同理,示例如下:

python3 src/ankisyncctl.py adduser aspirantzhang

pip3 install wheel

如果设备本身的版本低于3.9或者高于3.9,那么所有与python相关的都要指定版本号:

python3.9 src/ankisyncctl.py adduser aspirantzhang

pip3.9 install wheel

以此类推。

安装git

sudo apt update

sudo apt install git

验证git

git --version

如果成功显示,那么证明git已经安装成功。

1.1.2 安装pip

apt install python3-pip

1.1.3 使用pip安装wheel

wheel 这个模块貌似是 anki 同步服务器的一个安装基础,通过 pip 安装

pip3 install wheel

1.1.4. 在服务器中拉取最新版代码

git clone https://github.com/ankicommunity/anki-sync-server

1.1.5 安装依赖

cd anki-sync-server

pip3 install -r src/requirements.txt

1.1.6 升级anki版本

pip3 install anki --upgrade

1.1.7 处理配置文件

cp src/ankisyncd.conf src/ankisyncd/.

复制好配置文件后,可以对其进行配置

nano src/ankisyncd/ankisyncd.conf

1.1.8 添加用户

这部分由于没有实测,因此借用了之前一位老哥的内容:

添加用户的脚本,默认被放在了 `src/ankisyncd_cli/ankisyncctl.py`,但是根据实测和 issue,该脚本在这里运行会出现问题,报一个找不到模块的错误。由于我不太会 python ,不清楚它的原理,只能暂时把它移动到 src 目录下,也就是上移一级。

mv src/ankisyncd_cli/ankisyncctl.py ./src/

然后运行它,替换为你的账号

python3 src/ankisyncctl.py adduser aspirantzhang

输入该账号的密码。

1.1.9 开启同步服务器

进入 src 目录,以后台常驻模式方式运行同步服务器

cd src

nohup python3 -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 和端口号,看能否打开。如果无法打开,等待很久后报错。应该查看运行日志,检查是否没有打开防火墙,或云服务器的安全组是否打开等问题。同时,也要注意下面的步骤。

1.1.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下面的那个,所以要在日志中仔细查看。它读哪个,就改哪个。

1.1.11 设置开启启动

crontab -e

考研、考证党的神器anki的同步化方案——自建同步服务器

这一段由于无法识别,只能以图片的方式进行展示了。

命令解释:每次开启重启时,进入那个文件夹,召唤 nohup 命令在后台常驻,运行 ankisyncd,并将所有日志追加写入到 anki.log 中。

1.2 docker方式

1.2.1 docker-compose安装

考研、考证党的神器anki的同步化方案——自建同步服务器

这部分内容又是因为张大妈编辑器的问题无法输入,还望大家能够自行百度,在此只能贴图片。

添加可执行权限

sudo chmod +x /usr/local/bin/docker-compose

测试安装结果

docker-compose --version

1.2.2 docker-compose方式部署

docker方式的部署比起linux方式更为容易,且一般情况下不容易出错。但是,与之相比的缺陷在于,只支持x86架构的设备。

1.2.2.1 创建anki目录

cd /mnt

mkdir docker

cd docker/

mkdir anki

cd anki/

1.2.2.2 创建docker-compose文件

nano docker-compose.yml

如果没有安装nano,那么补上下面这一步:

sudo apt install nano

然后输入如下内容:

version: "3"

services:

anki-container:

image: kuklinistvan/anki-sync-server:latest

container_name: anki-container

restart: always

ports:

- "27701:27701"

volumes:

- data:/app/data

volumes:

data:

完成之后,ctrl+o之后ctrl+x

1.2.2.3 创建容器

docker-compose up -d

1.2.2.4 重构镜像(可选)

make build-devops SERVICE="anki-sync-server";

1.2.2.5 自定义内容

docker exec -it anki-container /bin/sh

/app/anki-sync-server ./ankisyncctl.py --help

usage: ./ankisyncctl.py <command> [<args>]

Commands:

adduser <username> - add a new user

deluser <username> - delete a user

lsuser - list users

passwd <username> - change password of a user

/app/anki-sync-server ./ankisyncctl.py adduser kuklinistvan

Enter password for kuklinistvan:

/app/anki-sync-server

上述命令的使用方法:

第一步:进入容器

docker exec -it anki-container /bin/sh

第二步:输入命令

./ankisyncctl.py <command>

增加用户

adduser <username> - add a new user

需要写上用户名,完整命令:

./ankisyncctl.py adduser name

其中,name就是你想设置的用户名,以下同理。

删除用户

deluser <username> - delete a user

列出当前用户

lsuser - list users

修改密码

passwd <username> - change password of a user

2 anki配置

2.1 电脑端配置

安装后打开 anki 主界面,按 shift+ctrl+a 打开 Addon(或Tools菜单的Add-ons),选择右侧的 View Files

此时会打开 addons21 目录,新建目录 ankisyncd(实际这个目录名可以自己定,不一定非是这个)

新建文件名 __init__.py

根据anki不同版本,输入内容,注意替换你的 IP 和端口号,注意你是 https 还是 http。

Anki 2.1.28 及更高

import os

addr = "http://127.0.0.1:27701/" put your server address here

os.environ["SYNC_ENDPOINT"] = addr + "sync/"

os.environ["SYNC_ENDPOINT_MEDIA"] = addr + "msync/"

Anki 2.1

import anki.sync, anki.hooks, aqt

addr = "http://127.0.0.1:27701/" put your server address here

anki.sync.SYNC_BASE = "%s" + addr

def resetHostNum():

aqt.mw.pm.profile['hostNum'] = None

anki.hooks.addHook("profileLoaded", resetHostNum)

Anki 2.0

import anki.sync

addr = "http://127.0.0.1:27701/" put your server address here

anki.sync.SYNC_BASE = addr

anki.sync.SYNC_MEDIA_BASE = addr + "msync/"

2.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/

这里的ip主要是你的设备的本地ip,如果有公网ip的话,就意味着可以随时随地的同步你的anki。

鉴于anki在通常状态下不会有特别大的内容,通常是以文字的形式进行制卡,因此可以使用云服务器。但是如果存有大量图片甚至视频形式的卡片的话,那么就建议采用本地同步的方式了。

3 结语

这篇文章在某种意义上,已经属于小众到了极致的东西。但是anki这种工具,本身就是适合短期以及中期突击记忆的神器,作为应付考试的一种工具,可以堪称神器,基本可以让你做到如同条件反射一般脱口而出知识。

最后的最后,还是按照老规矩贴出一些相关的产品(当然,本地化部署的话还是建议去海鲜市场淘一下j1800这种便宜的x86主机)。

CHUWI/驰为(LarkBoxPro)魔方迷你电脑小微型mini台式主机超轻便携HTPC工控HDMI影视4K输出客厅游戏会议电脑899元淘宝精选去购买【阿里云自营首购】阿里云服务器ECS-S6虚拟云主机官方优惠大陆款393.6元天猫精选去购买【阿里云自营首购】阿里云服务器ECS-S6虚拟云主机官方优惠大陆款393.6元天猫精选去购买

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
6评论

  • 精彩
  • 最新
  • anki批量导入有没方便的办法

    校验提示文案

    提交
    直接打包拖入就可以了

    校验提示文案

    提交
    收起所有回复
  • 这个实在是,想不出自建服务,和使用官方或第三方客户端和服务器的区别有多大

    校验提示文案

    提交
    速度差距,而且数据安全

    校验提示文案

    提交
    收起所有回复
  • 新版pc端anki已经自带同步服务器了

    校验提示文案

    提交
  • 手机客户端不支持http协议吧,好像强制https了

    校验提示文案

    提交
提示信息

取消
确认
评论举报

最新文章 热门文章
103
扫一下,分享更方便,购买更轻松