专栏首页祥的专栏[Linux]搭建Anki同步服务器(针对Anki2.1)

[Linux]搭建Anki同步服务器(针对Anki2.1)

原创文章

文章目录
  • @[toc]

  • 0 环境
  • 1 首先安装`anki2.1`
  • 2. 配置安装
    • 2.1 配置虚拟环境virtualenv
    • 2.2 安装 ankisyncd
    • 2.3 设置和运行服务器
  • 3. Anki客户端设置
    • 3.1. 客户端Anki2.1
    • 3.2. 客户端Anki2.0
    • 3.3. 手机端
  • 4. 参考文献

搭建Anki同步服务器(针对Anki2.1)

针对Anki2.0的版本:https://blog.csdn.net/humanking7/article/details/89299138

0 环境

  • Ubuntu 16.04
  • PC: anki 2.0.52anki 2.1.12
  • Android: ankiDroid 2.8.4`

1 首先安装anki2.1

先去下载官网下载安装包https://apps.ankiweb.net/#download

$ tar xjf anki-2.1.14-amd64.tar.bz2
$ cd anki-2.1.14-linux-amd64
$ sudo make install

# 如果要卸载
$ sudo make uninstall

2. 配置安装

2.1 配置虚拟环境virtualenv

先安装pipvirtualenv

# 安装 pip
$ apt install python3-pip

# 更新pip
$ pip3 install virtualenv

# 安装 virtualenv
$ pip3 install virtualenv

在准备安装服务器的目录下创建 Python 虚拟环境:

$ cd [你想要安装服务器的目录]
$ virtualenv ankienv

注意将[你想要安装服务器的目录] 替换为你实际的目录的路径,路径不需要加方括号。

然后进入新创建的虚拟环境:

$ . ankienv/bin/activate

注意以上命令英文的句号后面有一个空格。

如果想要退出环境,输入命令deactivate

输入完成后,命令行前会多出 (ankienv) 表示当前的 Python 环境,之后与 Pythonpip 有关的所有操作都要在这个环境中进行。

例子:

root@x60s:~/code_soft/ankiSyncService# . ankienv/bin/activate
(ankienv) root@x60s:~/code_soft/ankiSyncService# 


# 该目录下多了一个环境相关的文件
(ankienv) root@x60s:~/code_soft/ankiSyncService# ls
ankienv
(ankienv) root@x60s:~/code_soft/ankiSyncService# ls ankienv/
bin  include  lib

2.2 安装 ankisyncd

使用 gitclone 服务器代码:

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

进入代码目录并安装 git 子模块:

$ cd anki-sync-server
$ git submodule update --init

我在执行这一步的时候报错 pyaudio 安装失败,解决方法是直接把 requirements.txt 文件中 pyaudio 删掉,再重新执行上面的 pip 命令。根据官方文档的说明这个模块不影响服务器同步功能的使用。

继续安装 Python 模块,安装完后进入 anki-sync-server 目录:

$ pip3 install webob
$ cd ..

最后,还可以修改服务器配置文件:anki-sync-server 目录下的 ankisyncd.conf。对我来说无需更改任何配置。

[sync_app]
# change to 127.0.0.1 if you don't want the server to be accessible from the internet
host = 0.0.0.0
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

# optional, for overriding the default managers and wrappers
# # must inherit from ankisyncd.persistence.PersistenceManger, e.g,
# persistence_manager = great_stuff.postgres.PostgresPersistenceManager
# # must inherit from ankisyncd.session.SimpleSessionManager, e.g,
# session_manager = great_stuff.postgres.PostgresSessionManager
# # must inherit from ankisyncd.user.SimpleUserManager, e.g,
# user_manager = great_stuff.postgres.PostgresUserManager
# # must inherit from ankisyncd.collections.CollectionWrapper, e.g,
# collection_wrapper = great_stuff.postgres.PostgresCollectionWrapper

配置文件里包括 host 对应服务器监听地址,默认 0.0.0.0 表示接收所有 IP 的请求,如果改成 127.0.0.1 则无法接收外网或内网上的请求,也就是只能通过服务器本机访问,改成服务器内网 IP 则只接收内网的请求。port 表示监听端口,如果修改这个参数则客户端连接端口也要对应修改与其相同。data_root 应该是同步数据的保存目录。

其实基本不需要自己折腾,如果没有端口和IP的特殊需求,就不需要改了

到此服务器已经安装完成了。

2.3 设置和运行服务器

设置的相关命令:

# 在 anki-sync-server 目录下
$ ./ankisyncctl.py -h
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

增加用户:

$ ./ankisyncctl.py adduser <username>

将命令中的 <username> 替换为实际的用户名。之后输入密码,按回车确定。

启动服务器:

$ python -m ankisyncd

执行这条命令的时候会一直占用命令行终端,否则表示服务器已停止运行。

如果是通过 ssh 连接到 Linux 服务器在服务器上运行,断开 ssh 连接会自动停止服务器运行,这就需要下面的命令防止进程停止:

$ nohup python -m ankisyncd &

当然也可以用 screentmux 之类的服务器上常用的工具解决这个问题。

话虽然如此,但是每次运行起来特别恶心,还需要进入环境,自己去运行,所以写一个脚本非常方便

#!/bin/bash

# 进入环境目录
cd /root/code_soft/ankiSyncService

# 激活环境
echo "激活 virtualenv 环境"
. ankienv/bin/activate


# 进入anki-sync目录
cd /root/code_soft/ankiSyncService/anki-sync-server

# 运行anki-sync
echo "运行 ankisyncd "
nohup python -m ankisyncd &




echo -e "\n"
echo "查找anki-sync的PID:"
echo "ps -ef | grep anki"
echo -e "\n"
echo "如果想结束anki-sync运行,使用命令:"
echo "kill -9 PID"

不过到了最后,我发现还是别乱用virtualenv,因为感觉我完全用不到,徒增烦恼

3. Anki客户端设置

3.1. 客户端Anki2.1

Add-on文件夹下创建文件夹 ankisyncd,并在其中创建并编辑文件 __init__.py,里面不要有汉字,保存为utf-8格式:

# just for sync -- add by Qfx

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)

addr = "http://127.0.0.1:27701/" 行中的 127.0.0.1 换成对应服务器的 IP。27701 对应服务器配置的端口。

3.2. 客户端Anki2.0

见上文搭建Anki同步服务器(针对Anki2.0)

3.3. 手机端

4. 参考文献


OK! 以上,Enjoy~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 像SELECT*一样手撸Query DSL——ElasticSearch下篇

    大家好 泥腿子安尼特又和大家见面了。不知道大家昨晚过的如何,容我再孤寡孤寡孤寡几声

    老李秀
  • Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡

    当一台服务器的访问量越大时,服务器所承受的压力也就越大,超出自身所指定的访问压力就会崩掉,避免发生此类事情的发生,因此也就有了负载均衡来分担服务器的压力。

    杰哥的IT之旅
  • Java图形化界面电脑管家界面

    学会JavaSwing构建程序界面后,小伙伴们最大的困惑可能是“为什么我们做出来的界面那么丑、不跟市面流行的程序界面一样呢?”

    老九学堂-小师弟
  • ElasticSearch可扩展的开源弹性搜索解决方案

    3.分析过程:预备字段内容,并将其转换为可以写放Lucene索引的词项(term)的过程

    硬核项目经理
  • 情人节后的五部曲:QTP功能自动化测试教程及源码脚本

    顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscr...

    小老鼠
  • 如何为Nginx设置404页面?

    这篇文章发布于2013年,介绍如何为nginx设置一个404页面,当客户端试图访问一个并不存在的资源时,nginx会返回代码为404的错误信息"404 Not ...

    用户1560186
  • 12.7 VR扫描:《AstroBot Rescue Mission》获TGA最佳VR游戏大奖;苹果公布AR识别新专利

    今日,游戏界的奥斯卡大奖TGA公布,索尼日本工作室的VR游戏《Astro Bot Rescue Mission》获得“最佳VR/AR游戏奖”。此外,获得该奖项提...

    VRPinea

扫码关注云+社区

领取腾讯云代金券