一. 为什么要搭建自己的Anki服务器?
1. Anki是什么?
Anki是一个基于间隔重复(Spaced Repetition)的字卡软件,同样基于该原理的软件还有商业软件SuperMemo和免费软件Mnemosyne。其名称源自日语的“暗記”(日语发音为:Anki,意思即为“记忆”)。
Anki对SuperMemo的SM2算法予以改进,使其可以根据记忆卡的优先级、紧急程度进行优化调整。
记忆卡采用HTML语言编写,支持插入图片、音频以及LaTeX公式。
Anki支持多平台客户端,包括PC、安卓、iOS、塞班等,也可以直接登录Ankiweb进行学习。除此之外,注册一个免费账户,便可实现平台之间的同步。
——维基百科,自由的百科全书
简单说就是,Anki是一个利用更好的算法,通过间隔重复的方式,帮助我们记忆东西的软件。它多平台支持,开源,同步方便。
此外,因为Anki的记忆卡采用HTML编写,扩展方便。多年的发展让它积累了大量成熟、优秀、好用的卡片组,比如各种英语考试的,其他语种学习的,初高中各学科的,各种国家等级证书考试的,应有尽有,均可在网上方便地免费获得。
如果你觉得现有的卡片不能满足你的要求,你还可以制作自己的记忆卡片组。因此,只要是需要记忆的内容,都可以制作成记忆卡片组,通过Anki来完成。这大大扩大了Anki的应用范围,使它成为了我们记忆学习的一个大杀器。
2. 为什么要搭建自己的Anki服务器?
1)
在阅读Anki的维基百科时,你可能不禁会产生这样的疑问:既然Anki有免费的同步服务,那为什么我们还要花费精力来自己搞一个呢?
这个问题相当好,我将认真回答。
是这样的。
首先,Anki的官方服务器在国外,Anki官方资金也不是很充足,导致在国内使用他们的有同步速度非常慢。那种感觉……谁用谁知道,特别是当你有大量媒体数据需要同步的时候。时间就是金钱,浪费时间就是浪费生命。所以,出于对自己生命的珍惜,我建议你搭建自己的Anki服务器。
其次,用别人的服务器,就意味着你的数据是掌握在他人手上的,服务也是掌握在他人手上的,多少会受制于人。出于对自己数据安全和隐私的考虑,我推荐你搭建自己的Anki服务器。
也许你会说,反正我们那么多数据都是掌握在别人手里的,再多一个无所谓了,又不是什么关键数据。我却认为,正因为那么多数据已经掌握在别人手里了,所以我们能夺回来一点算一点。
这个世界与我们想象的很不同。有的事情,你觉得反正做了也没用,所以选择不做。真相却是:正是因为我们不去做,不坚持做,做的不够多,才导致貌似做了也作用不大。 你想想看吧,罗马也不是一天建成的,不是么?
- 再次,官方提供了Anki的服务软件及安装指南,这分明就是在鼓励我们自己搭建服务器的嘛。作为热爱学习,追求进步,想要不断成长的我们,怎么可能放弃这么好的学习、进步、成长和折腾自己的机会呢?生命不休,折腾不止。 这个服务器咱必须得自己搭建哪!
当然了,大前提是:首先你得是个Anki用户,或者是Anki的潜在用户。不然搭个服务器干嘛使呢,对吧?
如果你对我上面的回答不满意也没关系,继续往下读就是了。
2)
自己搭建的服务器,就一定比官方的同步速度更快么?
很遗憾地告诉你:并不能。
具体的同步的速度跟你自己所选用的服务器有关,你连服务器的速度快,搭建之后同步速度自然快,如果你连服务器的速度一般,那自建服务器之后同步速度也快不了。
不过我还是可以跟你保证一点:如果你的服务器是建在局域网里面的,那么速度绝对慢不了。但是这样做有个缺点:你只有在这个局域网内才能同步,出了局域网就不行了。
3. 需要的条件
前面说了这么多,都是在介绍Anki和自建服务器的优势的。
在进入正题,我们再来说一个准备工作:要搭建自己专属的Anki服务器,都需要哪些条件呢?
下面是列的一个清单——其实一共就两项,哈哈:
- 一个有公网IP的Linux服务器,或者一台局域网内的Linux主机。
- 一颗不怕麻烦,勇于折腾的心
下面作个说明。
- 这里所说的Linux主机,不一定非得是个人电脑,也可以是路由器、树莓派、下载宝,pogo之类的小玩意儿。
- 因为折腾的过程中,总会出现各种各样意外的情况,所以,在折腾前请确认你是一个勇于折腾、不畏艰险、迎难而上的人,碰到意外状况能够不屈不挠,不断摸索,反复尝试,直到成功。否则,真心不建议你折腾。
- 如果你觉得自己做不到上一条,但是仍然读到这里了,那就放心折腾吧。别怕,有我呢!
因为几乎整个过程能够碰到的大部分问题及其解决方法,我都翔实地记录下来,下在下面了,即使你几乎没有Linux系统的使用经验,只要一步步照着做,也能把服务器搭建起来,问题不是太大。
如果你能够看到这里,那么说明万事具备,只欠行动了。撸起袖子加油干,甩开膀子加快干。还愣着干嘛?赶紧行动呀!
二.服务器的搭建
开始前,先把我们的思路说明一下。
- 让Anki服务随系统自动运行,平时不需要我们操心和干预,即使服务器重启也不怕。
- 让Anki服务以普通用户身份运行,避免服务器本身因为Anki服务而出现一些奇怪的问题或者不可挽回的意外。
下面正式开整。
1.我的安装环境:
- Python 2.7
- pip软件包管理工具
- debian-8.0-x86_64-minimal
下面使用的命令也是针对此系统的,其他系统请自行调整。
2.安装
安装Akni服务:
1
easy_install AnkiServer
添加名为anki的用户:
1
useradd -d /home/anki -m anki
切换到anki用户:
1
su -l anki
新建anki文件夹并进入:
1
2mkdir anki
cd anki创建配置文件:
1
cp /usr/local/lib/python2.7/dist-packages/AnkiServer-2.0.6-py2.7.egg/examples/example.ini production.ini
修改配置文件:
1
nano production.ini
修改其中的服务器地址为实际地址:
1
host = x.x.x.x
保存,然后退出。
- 添加anki账号:
1
ankiserverctl.py adduser username
回车后根据提示输入账号密码。
3.测试
- 调试模式运行Ankiserver
1
ankiserverctl.py debug
收到报错:1
Anki requires a UTF-8 locale
- 执行以下命令:
1
python2 -c "import sys; print sys.getfilesystemencoding()"
结果如下:1
ANSI_X3.4-1968
- 语言设置问题,执行以下命令:
1
export LC_ALL="en_US.UTF-8"
再次debug调试,报错仍旧,应该是语言包缺失。
- 安装语言包:
1
dpkg-reconfigure locales
选择en-US.UTF-8
安装,然后修改/etc/default/locale
为1
LANG="en_US.UTF-8"
重启:
1
reboot
查看语言环境:
1
python2 -c "import sys; print sys.getfilesystemencoding()"
结果为:1
UTF-8
语言环境已正常,继续debug试运行
- 以anki用户进入
/home/anki/anki
,再次调试:1
ankiserverctl.py debug ./anki/production.ini
无报错,Ctrl+C退出,运行ankiserver:1
ankiserverctl.py start
手机测试同步正常。
4.添加开机启动
以anki账号在anki家目录下操作:
1
2touch anki-start.sh
nano anki-start.sh敲入以下内容:
1
2#! /bin/sh
ankiserverctl.py start /home/anki/anki/production.ini
保存并退出。
为脚本添加执行权限:
1
chmod +x anki-start.sh
然后切换root账号操作
1
nano /etc/rc.local
在
exit 0
前面加入以下内容:1
su anki -C "/home/anki/anki-start.sh"
保存,退出。重启测试。
同步正常,速度很快。
至此,Anki服务器搭建完成,接下来我们进行客户端的设置。
三. 客户端的设置
Anki对多平台的支持相当完善,主流的电脑系统和手机系统官方都有支持,而且基本上都是免费的——IOS系统除外。
下面我就根据我自己的使用情况,介绍一下PC端和Android手机上自建服务器同步的设置方法,即Anki for Windows和AnkiDroid的设置方法。
1. Anki for Windows的设置
打开插件文件夹
新建一个txt文档,在里面填入以下内容:
import anki.sync
anki.sync.SYNC_BASE = 'http://192.168.0.100:27701/'
anki.sync.SYNC_MEDIA_BASE = 'http://192.168.0.100:27701/msync/'
这里的IP只是示范用,自行替换为你的服务器IP,即安装时第7小步所修改的IP。。
保存并关闭文档,修改文件名为mysyncserver.py
重启Anki。点击同步,登录设置好的用户名和密码,点击登录即可开始同步。
2. AnkiDroid的设置
进入软件菜单,点设置:
然后点击“高级设置”:
点击自“定义同步服务器”:
在使用“自定义同步服务器”后面的小框打勾,然后修改同步地址和媒体文件同步地址:
这里有两个小细节值得注意:
- 黑线部分替换为你自己的服务器IP,
- 记得把IP前面的的
https
改成http
返回软件主界面,下拉开始同步。在弹出的对话框输入设置好的用户名和密码,点击登录即可开始同步。
四. 参考来源
文主在折腾的过程中,主要参考了以下两篇文章:
- 来自知乎的Linux下自建Anki服务器
- 来自简书的利用远程服务器搭建Anki服务
其他一些问题则是通过搜索解决的。
当然了,个人精力和经历毕竟有限,不可能穷尽所有的情况。所以,你在折腾的过程中,有很大可能会遇到这里没有记录和说明的问题。不过没关系,这不是还有我嘛!
不管在折腾过程遇到什么问题,或者上面的操作步骤有什么不明白的地方,你都可以在留言里面提出来。虽然我不能保证百分之百地帮你解决,但是我可以保证百分之百地认真对待,竭尽所能帮你出主意,想办法,提供解决思路。
顺便说一句,对于Linux我也是个新手,折腾没多久。让我们一起交流,一起进步吧。