需求

Anki的同步服务器在国外,国内访问它是要踏过千山万水的,并且还是一个个人项目,所以也别指望对宽带的投入。

糟糕的国内同步体验,能不能忍受取决于你自己。我是忍了几年,但随着最近使用频率加大,越来越忍无可忍,于是评估了下成本,决定自建同步服务器。

购买ECS

如果手里没有现成的服务器,可以去阿里云买台ECS。

Anki的同步服务器对机器性能要求低,所以可以选择乞丐共享性突发性能实例,肯定够用,我买的张家口区的ecs.t6-c2m1.large,系统盘位降到20G,不包括带宽的话一个月17.4元,一次买的时间越长优惠力度越大。

买好后再下单个弹性IP绑定到该ECS,计量带宽1G是0.8元。

进入Linux系统,装Python3环境,因为待会用到的anki-sync-server是用Python3写的。

安装和配置anki-sync-server

使用的开源anki同步服务器程序是anki-sync-server

https://github.com/tsudoko/anki-sync-server

安装

克隆源码到本地:

1
2
$ cd /usr/local
$ git clone https://github.com/tsudoko/anki-sync-server.git

安装依赖包:

1
2
3
4
5
$ cd anki-sync-server
$ git submodule update --init
$ cd anki-bundled
$ pip install -r requirements.txt
$ pip install webob

配置

配置ankisyncd.conf文件,一般使用默认即可。

添加一个或多个用户:

1
$ python3 ankisyncctl.py adduser <username>

启动

运行anki-sync-server:

1
$ python3 -m ankisyncd

到这里服务已经成功运行,默认监听服务器的27701端口。

加入supervisor

服务进程最好是用supervisor来管理。

supervisor的安装配置随机启动可以参考这个:

https://www.jianshu.com/p/39b476e808d8

需配置supervisor开机启动

在配置文件/etc/supervisor/supervisord.conf的最后加入:

[program:ankisyncd]
command=python3 -m ankisyncd
directory=/usr/local/anki-sync-server
autorestart=true
stderr_logfile=/var/log/ankisyncd.err.log
stdout_logfile=/var/log/ankisyncd.out.log
user=root
stopsignal=INT

先关闭系统中已经运行的ankisyncd进程。

然后用supervisor启动ankisyncd:

1
$ supervisorctl start ankisyncd

HTTPS支持

因为从Android 9(API级别28)开始,默认情况下禁用明文传输,最新版本的AnkiDroid的自定义服务器也必须是HTTPS,所以最好是让anki-sync-server走加密。

首先得需要有备案的域名,再去申请免费证书,这些阿里云上都有。

如果没有域名,花生壳上有已备案的壳域名可以试试,几十块钱一个,带SSL证书,终身使用。

然后Nginx配置一个vhost反向代理,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 server {
listen 443 ssl;
server_name www.anki.dev;
root /usr/share/nginx/html;

ssl_certificate "/etc/nginx/certs/www_anki_dev.pem";
ssl_certificate_key "/etc/nginx/certs/www_anki_dev.key";
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

location / {
proxy_pass http://127.0.0.1:27701;
}
}

最后,设置该ECS所属安全组允许443端口访问!

设置客户端

相关客户端的官方下载页面:https://apps.ankiweb.net/

Mac和Windows

先安装插件SyncRedirector

工具 -> 附近组件 -> 获取组件

输入代码:2124817646

安装好后需要配置该插件,打开设置后修改anki-sync-server同步地址:

​ “msyncUrl”: “https://www.anki.dev/msync",

​ “syncUrl”: “https://www.anki.dev/sync"

保存设置后,重启客户端使其生效。

重新打开后,切换配置方案,输入前面自创的用户名和密码。

这样不出差的话,就算配置好了。

Android

进入AnkiDroid设置:

设置 -> 高级设置 -> 自定义同步服务器

修改同步地址:

https://www.anki.dev/

修改媒体文件同步地址:

https://www.anki.dev/msync

再填写用户名和密码:

设置 -> 常用设置 -> AnkiWeb账户

这样就大功告成了。

iOS

iOS客户端目前不能自定义同步服务器。

我的解决方案是:

上京东,搜“华为V6平板”,下单支付

打开闲鱼,卖iPad