avatar

CacheCi 的 垃圾桶

* 和 CR200J 没啥关系

  • 首页
  • 再度重启博客计划
  • 关于
Home 自建anki同步服务器
文章

自建anki同步服务器

Posted 2024-09-14 Updated 2025-04- 3
By CacheCi
8~11 min read

为什么

ankiweb的官方服务器托管于德国Hetzner,这个延迟,虽然没有超时,但是还是比较高的。如果遇到墙中墙或屏蔽国外网站的网络环境,就会非常难受。而且时常遇到的不稳定也对学习类软件不友好,自建一个还是有必要的。

使用到的软件

anki

Python 3.9+(或者 rustup)

Debian 12

运行同步服务器

使用python

python3 -m venv /opt/anki-syncserver
/opt/anki-syncserver/bin/pip install anki
SYNC_USER1=user:pass /opt/anki-syncserver/bin/python -m anki.syncserver # 用户名为user,密码为pass

使用rust

cargo install --git https://github.com/ankitects/anki.git --tag 2.1.66 anki-sync-server
# 编译时用最新的 Anki 版本替换 2.1.66,需要安装 Protobuf(protoc)。
SYNC_USER1=user:pass anki-sync-server

通过这种方式即可以最简单的方式让 syncserver 跑起来了。但是这样运行程序的话,在退出终端后程序即终止,所以建议使用 systemctl 等方式使其长期运行。

echo "SYNC_USER1=user1:pass1" >> /opt/anki-syncserver/env-setting.conf # 自行修改user1和pass1为自己的用户名与密码
echo "SYNC_USER2=user2:pass2" >> /opt/anki-syncserver/env-setting.conf # 可添加多个用户
echo "SYNC_PORT=8899" >> /opt/anki-syncserver/env-setting.conf         # 指定端口号
sudo nano /usr/lib/systemd/system/anki.service
[Unit]
Description     = anki.syncserver
After           = network.target

[Service]
Type            = exec
User            = root

EnvironmentFile = /opt/anki-syncserver/env-setting.conf              # anki设置文件

ExecStart       = /opt/anki-syncserver/bin/python -m anki.syncserver # python版
ExecStart       = anki-sync-server                                   # rust版

KillMode        = process
Restart	        = always

[Install]
WantedBy        = multi-user.target
sudo systemctl start anki.service

公网访问

默认设置下,服务器监听未加密的 HTTP 连接,因此不建议直接将其暴露在公网上。 你应该配置防火墙以阻止来自公网的访问,或在使用加密的连接方式,例如 VPN 或 HTTPS 反代。

如果你使用 AnkiMobile 且无法连接到本地网络上的服务器,请进入 iOS 设置,找到 Anki 并关闭再打开「允许 Anki 访问本地网络」选项。

你可以定义 SYNC_HOST 和 SYNC_PORT 来更改服务器监听的 ip 和端口。建议更换 SYNC_PORT 以防止与其他服务冲突。

下面是一个简单的 nginx 反代示例。

server{
  listen                  443 ssl;
  server_name             anki.example.com;
  ssl_certificate         /etc/nginx/ssl/xxx.pem;      # 请务必使用 ssl 加密以保证安全
  ssl_certificate_key     /etc/nginx/ssl/xxx.key;
  ssl_protocols           TLSv1.2 TLSv1.3;             # 为兼容 iOS 客户端,请启用TLS1.2
  client_max_body_size    100M;                        # 最大文件大小

  location / {
    proxy_pass            http://localhost:8899;   # 请修改为自己使用的端口号
    proxy_set_header      Host $proxy_host;
    proxy_set_header      X-Real-IP $remote_addr;
    proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

实际使用中,如果遇到特别大的文件的情况下,可以设置 MAX_SYNC_PAYLOAD_MEGS 为更高的值(单位:MB),并在 nginx 配置中更改默认大小限制。如果使用了cloudflare 或其他服务商的 cdn 服务,你应该确认服务商对文件大小是否有限制(例如 cloudflare 免费版限制上传大小100M)。

参考:https://docs.ankiweb.net/sync-server.html

什么?你想知道为什么这么少的内容我要写一篇文章?当然是因为 cli.cacheci.com 关了啊,原来的一键脚本都失效了,当然看起来内容少了(

自建服务
学习软件 自建服务
License:  All Right Reserved. (Except mentioned in paragraph)
Share

Further Reading

Sep 14, 2024

自建anki同步服务器

为什么 ankiweb的官方服务器托管于德国Hetzner,这个延迟,虽然没有超时,但是还是比较高的。如果遇到墙中墙或屏蔽国外网站的网络环境,就会非常难受。而且时常遇到的不稳定也对学习类软件不友好,自建一个还是有必要的。 使用到的软件 anki Python 3.9+(或者 rustup) Debi

OLDER

NEWER

极简二维码生成器

Recently Updated

  • 再度重启博客计划
  • 极简二维码生成器
  • 自建anki同步服务器

Trending Tags

Halo 学习软件 About 自建服务 小项目

Contents

©2025 CacheCi 的 垃圾桶. Some rights reserved.

Using the Halo theme Chirpy