2019年在CentOS上架设用systemd管理的anki 2.1同步服务器
个人笔记,如有转载,请注明出处。
——by realasking
最近收到ankiweb
的通知,告知因为长时间没有登录,我的账户已经被注销了。我确有用记忆卡片的需要,但是最近太慢,实在顾不上总去使用它,anki
的做法让人很无奈。鉴于此,还是决定自己搭建一个anki同步服务器。
github
上的tsudoko
建立了一个项目[1],可以搭建anki 2.1
的同步服务;在archlinux
的AUR
网站上,s7hoang
则对它进行了规范化的打包[2],可以使用systemd
来启动和管理这一同步服务器。不过,CentOS
和Archlinux
有一些不同,s7hoang
的方案用在CentOS
服务器上需要做一定的调整。
对s7hoang
的方案进行小调整后,我在CentOS 7
服务器上安装anki-sync-server
的过程如下。
1. 准备软件包
a.下载s7hoang
的AUR
包
[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]中已经讲得很清楚了,大家可以直接查阅原作者的叙述。
参考链接