使用anki官方程序自建同步服务
程序安装
官方提供了直接安装桌面版客户端、使用pip安装、使用Cargo安装、使用源码安装四种安装方式,此处使用pip安装。如果需要使用其它方式安装,可参考官方文档。
使用pip安装可以避免下载桌面Anki的GUI依赖项,从PyPI下载的Python包来运行独立的Anki同步服务器。要求已安装Python 3.9+。
python3 -m venv ~/syncserver
~/syncserver/bin/pip install anki
测试安装效果:
SYNC_USER1=user:pass ~/syncserver/bin/python -m anki.syncserver
终端显示:
2024-09-28T06:45:18.271338Z INFO listening addr=0.0.0.0:8080
表面软件在正常运行,Ctrl+C
终止程序。
环境变量说明
环境变量 | 说明 |
---|---|
SYNC_USER1=user:pass | user 替换为用户名pass 替换为密码 |
PASSWORDS_HASHED=1 | 启用散列密码(详见官方文档) |
SYNC_BASE=~/.syncserver | 将用户数据放入~/.syncserver 目录中(默认值) |
SYNC_HOST=你的域名 | 绑定域名(配合反向代理软件使用) |
SYNC_PORT=8080 | 绑定端口为8080(默认值) |
MAX_SYNC_PAYLOAD_MEGS=100 | 限制上传大小为100 |
SYNC_USER1
声明了第一个用户和密码,并且必须进行设置。如果您希望设置多个帐户,您可以选择声明 SYNC_USER2
、 SYNC_USER3
等。
如果需要兼容旧版Anki客户端,还需要配置SYNC_ENDPOINT
和 SYNC_ENDPOINT_MEDIA
,详见官方文档。
使用脚本运行
新建脚本文件并命名为start_syncserver.sh
,内容如下:
#!/bin/bash
export SYNC_USER1=test1:123456
export SYNC_USER2=test2:123456
export SYNC_PORT=27701
exec /root/syncserver/bin/python -m anki.syncserver
参考上一节内容,修改环境变量的值。
注意使用exec
命令执行程序,可保证进程直接在前台运行,防止supervisor
无法直接管理子进程。也可以不使用exec
,则在守护进程中需要额外进行配置。
可以配置守护进程自动运行脚本,如果有配置修改,修改后重启脚本便可。
配置守护进程
这里使用supervisor
进行守护进程。在/etc/supervisor/conf.d
中,新建ankioffical.conf
,内容如下,注意根据实际情况修改脚本路径:
[program:ankioffical]
command=/root/start_syncserver.sh ; the program (relative uses PATH, can take args)
directory=/root ; directory to cwd to before exec (def no cwd)
autostart=true ; start at supervisord start (default: true)
autorestart=true ; retstart at unexpected quit (default: true)
startsecs=3 ; number of secs prog must stay running (def. 1)
stdout_logfile=/var/log/ankioffical.log ; stdout log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=10KB;
;stderr_logfile_backups=10;
stderr_logfile=/var/log/ankioffical.error.log ; stderr log path, NONE for none; default AUTO
;stdout_logfile_maxbytes=10KB;
;stdout_logfile_backups=10;
stopsignal=QUIT
stopasgroup=true
killasgroup=true
其中,如果脚本中使用了exec
命令运行同步服务器,配置文件中最后三行可以省略,这三行的目的是监控程序的所有子进程。守护进程遇到的问题:supervisor守护进程子进程问题
Nginx转发
客户端默认使用http协议,如果需要配置https,以Nginx为例,在/etc/nginx/conf.d
中,新建ankioffical.conf
,内容如下,域名证书端口等内容根据实际情况修改。
server {
listen 27702;
server_name 你的域名;
ssl on;
ssl_certificate /证书所在路径/xxx.crt;
ssl_certificate_key /密钥所在路径/xxx.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5:!EXPORT56:!EXP;
set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;
location / {
proxy_http_version 1.0;
proxy_pass http://127.0.0.1:27701/;
# 传递真实客户端 IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
}
运行nginx -s reload
便可加载配置。
客户端配置方法
PC端配置
在工具-设置-同步中,最下方找到自托管同步服务器,填写同步地址即可。
Ankidroid配置
在菜单-设置-同步中,找到自定义同步服务器,填写同步地址即可。