个人笔记,如有转载,请注明出处。

——by realasking

最近收到ankiweb的通知,告知因为长时间没有登录,我的账户已经被注销了。我确有用记忆卡片的需要,但是最近太慢,实在顾不上总去使用它,anki的做法让人很无奈。鉴于此,还是决定自己搭建一个anki同步服务器。

github上的tsudoko建立了一个项目[1],可以搭建anki 2.1的同步服务;在archlinuxAUR网站上,s7hoang则对它进行了规范化的打包[2],可以使用systemd来启动和管理这一同步服务器。不过,CentOSArchlinux有一些不同,s7hoang的方案用在CentOS服务器上需要做一定的调整。

s7hoang的方案进行小调整后,我在CentOS 7服务器上安装anki-sync-server的过程如下。

1. 准备软件包

a.下载s7hoangAUR

[realasking@myserver]$ wget https://aur.archlinux.org/cgit/aur.git/snapshot/anki-sync-server-git.tar.gz
[realasking@myserver]$ tar -xzvf anki-sync-server-git.tar.gz
[realasking@myserver]$ cd anki-sync-server-git

b.准备服务器包

  • 修改s7hoang提供的anki-sync-server.service,内容改为:
[Unit]
Description=A sync server for anki
After=network.target

[Service]
Type=simple
User=anki-sync-server
Group=anki-sync-server
WorkingDirectory=/opt/anki-sync-server
ExecStart=/usr/bin/python36 -m ankisyncd
StartLimitIntervalSec=1
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
  • 根据s7hoang的方法创立脚本genpack.sh,内容如下:
#!/bin/bash 
git clone https://github.com/tsudoko/anki-sync-server
cd anki-sync-server
mkdir -p "plugins/anki2.0"
mkdir -p "plugins/anki2.1/ankisyncd"
mkdir -p "plugins/systemd"
cp ../anki-sync-server.py "plugins/anki2.0"
cp ../__init__.py "plugins/anki2.1/ankisyncd"
cp ../anki-sync-server.service "plugins/systemd"
sed -i "2s/0\.0\.0\.0/$(ip route get 1.2.3.4 | awk '{print $7}')/" \
  plugins/anki2.0/anki-sync-server.py
sed -i "3s/0\.0\.0\.0/$(ip route get 1.2.3.4 | awk '{print $7}')/" \
  plugins/anki2.0/anki-sync-server.py
sed -i "3s/0\.0\.0\.0/$(ip route get 1.2.3.4 | awk '{print $7}')/" \
  plugins/anki2.1/ankisyncd/__init__.py
sed -i "s/python/python36/g" ankisyncctl.py

git submodule update --init

然后执行这个脚本。

  • 建立nginx服务器脚本anki.conf,内容如下:
server {
        listen 80;
        server_name anki.myserver.tk;
        return 301 https://$server_name$request_uri;
}

server {
    # Allow access via HTTPS
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    # Set server names for access
    server_name anki.服务器名.tk;

    # Set TLS certificates to use for HTTPS access
    ssl_certificate /etc/letsencrypt/live/服务器名.tk/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/服务器名.tk/privkey.pem;

    location / {
        # Prevent nginx from rejecting larger media files
        client_max_body_size 0;

        proxy_pass http://127.0.0.1:27701;
    }
}

2. 部署服务器

  • root登录服务器,将anki-sync-server文件夹拷贝到/opt

  • anki-sync-server.service文件拷贝到/etc/systemd/system

  • anki.conf文件拷贝到:/etc/nginx/conf.d

  • 建立anki用户

[root@myserver]# useradd -d /opt/anki-sync-server -r -s /sbin/nologin anki-sync-server
[root@myserver]# chown -R anki-sync-server /opt/anki-sync-server
[root@myserver]# chgrp -R anki-sync-server /opt/anki-sync-server
[root@myserver]# sudo -u anki-sync-server ./ankisyncctl.py adduser
  • 开启服务
[root@myserver]# systemctl enable anki-sync-server
[root@myserver]# systemctl start anki-sync-server
[root@myserver]# systemctl restart nginx

3.关于依赖关系

依赖关系的解决本文未提及,因为[1]中已经讲得很清楚了,大家可以直接查阅原作者的叙述。

参考链接

[1] tsudokoanki 2.1同步服务器项目

[2] s7hoangsystemd启动tsudoko服务器的打包