自建anki sync server同步服务器(centos7+python3)
自建AnkiServer原因
默认的Anki服务器由于在国外,同步很慢,甚至偶尔还连不上,并且据说这是一个个人项目,数据在别人手里也不可靠,说不定哪天丢了也有可能,所以我们自己搭建自己的服务器,牢靠一些。但有个缺点就是iOS版的Anki不支持自定义服务器,因为iOS版是官方出品,
本文环境
centos7
python3.6.6
anki 2.1
anki的版本说明
Anki 有 2.0 和 2.1 两个主要版本,它们的区别类似于 Python 2 和 Python 3,有较大的不同,部分插件也不兼容,所以建议使用较新的 Anki 2.1 版本,本教程介绍 2.1 版本下的同步服务器的搭建。
anki sync server 的安装
建议用root用户,因为可能会涉及一些权限问题,普通用户会出现安装不成功。安装 anki server 也可以用pip,但是为什么不用pip? 因为可能会有莫名奇妙的错误!!
1、clone 仓库
git clone https://github.com/tsudoko/anki-sync-server.git
2、安装anki或anki-bundled相关的库
安装依赖
pip install webob pip install decorator
安装anki
方法一:因为Anki本身也是python写的,它也是开源的,它的github地址是:https://github.com/dae/anki, 所以你可以从这个地址里clone到anki-bundled里。
方法二:
cd anki-sync-server git submodule update --init cd anki-bundled pip install -r requirements.txt
注意:
1,AnkiServer是AnkiServer,Anki是Anki,这不是同一个东西,AnkiServer依赖于Anki,所以下载AnkiServer后,还必须下载Anki,Anki下载后要放在anki-sync-server目录下的一个叫anki-bundled的目录里。
2,clone完anki-sync-server后,anki-bundled是空的。因为它是一个anki的链接,属于另一个版本库,你可以在github上点点试试,它已经跳转到anki项目里了
创建anki登录账户
用户的管理主要是通过 ankisyncctl.py 脚本实现的。如果你系统有多个python环境,那么在使用前注意修改 ankisyncctl.py 第一行的python环境。
先看下脚本的功能
$ sudo ./ankisyncctl.py 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
创建用户(它会让你输入密码):
$ sudo ./ankisyncctl.py adduser laojia@xiewo.net
注意:
1,只能通过ankisyncctl.py脚本创建用户
2,没有修改用户名功能,如果你要修改用户名,那么你要先删除,再重新添加。
修改 ankisyncd.conf 文件
anki-sync-server下面有个配置文件ankisyncd.conf,配置文件中保存了主要的配置,主要改端口,默认端口一般也就能用。
[sync_app] host = 127.0.0.1 port = 27701 data_root = ./collections base_url = /sync/ base_media_url = /msync/ auth_db_path = ./auth.db # optional, for session persistence between restarts session_db_path = ./session.db
你需要在服务器中设置防火墙放行 27701/tcp 端口,或者使用 nginx 进行代理转发。
启动服务器
执行以下命令启动anki-sync-server,它的服务名称叫ankisyncd。
注意,以下命令必须在anki-sync-server文件夹下执行,因为它要找该文件夹下的ankisyncd文件夹的:
cd anki-sync-server python -m ankisyncd
如果启动正常,它应该会有类似以下的提示:
[2019-03-14 06:28:17,456]:INFO:ankisyncd:Loaded config from ./anki-sync-server/ankisyncd.conf [2019-03-14 06:28:17,461]:INFO:ankisyncd:Serving HTTP on 0.0.0.0 port 27701...
服务启动脚本
#!/bin/bash ankiPath="/laojia/anki/anki-sync-server" pythonPath="/usr/local/python3" getid=`ps -ef|grep ankisyncd |grep -v grep |head -1|awk '{print $2}'` cd $ankiPath case $1 in start) if [ $getid ]; then echo "it's still runing , the anki project pid is $getid" else nohup $pythonPath -m ankisyncd >> ../ankisyncd.log 2>&1 & sleep 2 echo "start anki project ...." sleep 2 getpid=`ps -ef|grep ankisyncd |grep -v grep |head -1|awk '{print $2}'` echo "started! anki project pid is: $getpid " fi ;; stop) if [ $getid ]; then kill -9 $getid echo "the current anki project pid is: $getid" sleep 2 echo "anki project was killed !" else echo "anki project was not running!" fi ;; restart) $0 stop $0 start ;; *) echo -e "参数错误!\nsh scripts.sh start|stop|restart" ;; esac
做成 systemd 服务,开机启动
/etc/systemd/system 下新建 anki.service
[Unit] Description=anki Server Service Before=multi-user.target Before=shutdown.target After=local-fs.target After=remote-fs.target After=network-online.target After=systemd-journald-dev-log.socket Wants=network-online.target Conflicts=shutdown.target [Service] Type=forking Restart=no TimeoutSec=5min KillMode=process ExecStart=/woqu/anki/anki.sh start ExecStop=/woqu/anki/anki.sh stop [Install] WantedBy=multi-user.target
设置开机启动
systemctl start anki systemctl status anki systemctl enable anki
电脑端设置
以下配置在mac和win测试通过(版本为2.1.11),由于我没有Linux桌面版Linux系统,所以未在Linux上测试,不过原理都是一样的。
打开Anki,点击顶部菜单栏的Tools→Add-ons会打开插件窗口
然后再点击插件窗口的View files按钮,会打开插件安装目录。
在该目录下新建一个文件夹ankisyncd,然后在里面新建一个文件,命名为__init__.py,
打开__init__.py,把以下命令粘贴进去,然后把其中的12.34.56.78修改成你服务器的ip,如果你修改过ankisyncd.conf里的“port”(即端口),这里的端口也要与ankisyncd.conf中的“port”对应,然后保存:
import anki.sync, anki.hooks, aqt addr = "http://12.34.56.78: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,即把anki软件关掉,再重新打开。
点击Sync(即“同步”)测试,如果正常,它会提示你输入账号密码,这个账号密码就是你前边用./ankisyncctl.py adduser添加的账号和密码了。
安卓端
设置 → 高级设置 → 自定义同步服务器
同步地址:http://12.34.45.78:27701 (把ip改成你的服务器ip)
媒体文件同步地址:填http://12.34.45.78:27701/msync (改成你的服务器ip)
即媒体文件同步地址是在同步地址后面添加 /msync(其实这个名字是在服务器的配置文件 ankisyncd.conf 中的 base_media_url 选项指定的)。
设置好之后,点击同步按钮,正常的话会让你输入账号密码,输入与电脑端相同的账号密码,即可进行同步。
iOS端
App不支持,无解,砸手机吧
其他信息
anki知乎专栏:https://zhuanlan.zhihu.com/-anki
插件编写文档https://apps.ankiweb.net/docs/addons.html
参考文档:
https://www.xiebruce.top/881.html
https://apps.ankiweb.net/docs/addons.html
https://frank.xin/2019/03/25/ankisync2/
http://genedan.com/no-127-ankisyncd-a-custom-sync-server-for-anki-2-1/
常见问题:
pc客户端登录,账号密码错误:
用了最新的PC客户端 2.1.38 不行,换回 2.1.11 ok
共 0 条评论