跳到主要内容

公网同步

在上一篇局域网同步中介绍了如何搭建可以在局域网内快速同步的教程,该方案同步速度快,并且完全免费使用,但是也有一些缺点:

  1. 受空间制约。不同设备只能在连接同一个局域网下才能互相同步,超出范围就会同步不了。
  2. IP不固定。每次连接WIFI时分配到的IP地址可能会发生变化,需要频繁修改Anki客户端中的自定义服务器地址参数,比较繁琐。

为了克服上面缺点,还有一个方案就是使用云服务器搭建Anki同步服务器。云服务器的好处有:

  • 具有固定公网IP,意味着所有设备随时随地都能访问。所有Anki客户端第一次配置好,后面基本不用再修改。
  • 速度优势。国内服务器,而且用户独享带宽,速度比Ankiweb官方同步要快不少。
  • 用处广泛。云服务器不仅可以用来搭建Anki同步服务,还有很多可以开发的功能,如自建图床、搭建个人博客、自建远程桌面服务等等。

使用云服务器搭建Anki同步服务器,完全可以作为Ankiweb官方同步服务的替代,缺点就是需要另外付费购买云服务器。

不过现在云服务器价格不算太贵,几十块的价格可以用一年,还是比较划算的。

下面具体介绍一下搭建教程。

购买云服务器

首先,你需要购买一台属于自己的云服务器。云服务器厂商有很多,比如:

用户可以多方对比适合的价格套餐。

本教程以华为云服务器作为演示,其他云服务器步骤也基本类似。

注意

本教程使用的是Ubuntu操作系统,为了与教程保持一致,建议购买时选择相同的操作系统。

  1. 进入华为云服务器控制台

找到自己购买的服务器实例并打开。

  1. 登录自己的云服务器

第一次登录需要重置下密码,然后再重新登录。

输入密码登录

登录成功界面

设置Anki同步服务器

支持两种安装Anki同步服务器的方法,用户选择其中一种即可。

方法一:手动安装

安装Miniconda

Anki的运行依赖python环境。首先在服务器上安装Python环境,这里使用Miniconda作为Python的环境管理器。

在打开的终端中依次输入下面命令。

# 下载Miniconda
curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

# 安装Miniconda
sh ./Miniconda3-latest-Linux-x86_64.sh

根据提示一直"yes"即可,安装完成后重启下终端。

创建虚拟环境

在新打开的终端中,依次输入下面命令。

# 创建虚拟环境
conda create -n python python=3.12

# 激活虚拟环境
conda activate python

# 安装anki
pip install anki -i https://mirrors.aliyun.com/pypi/simple/

启动Anki服务器

Anki服务器从SYNC_USER系列环境变量中读取用户名和密码的配置。SYNC_USER1表示用户1,SYNC_USER2表示用户2,以此类推。

这里以三个用户的服务器为例进行演示。(如果只有一个用户的话,只设置SYNC_USER1环境变量即可)

在终端中依次输入下面命令:

# 激活虚拟环境
conda activate python

# 设置Anki的用户名和密码,可自行修改
export SYNC_USER1=user1:pass1 # 用户1
export SYNC_USER2=user2:pass2 # 用户2
export SYNC_USER3=user3:pass3 # 用户3

# 启动服务
python -m anki.syncserver

当出现下面界面,表示服务器已经启动成功。

到这里服务器已经成功启动了。但是为了能够稳定运行,建议将其设置为系统服务并设置开机自启。

设置开机自启

  1. 新建一个anki_sync_server.sh文件,
vi /root/anki_sync_server.sh

文件内容如下(注意自行修改用户名和密码,多余用户可删除):

/root/anki_sync_server.sh
# 设置Anki的用户名和密码,可自行修改
export SYNC_USER1=user1:pass1 # 用户1
export SYNC_USER2=user2:pass2 # 用户2
export SYNC_USER3=user3:pass3 # 用户3

# 设置Anki同步服务端口号(默认8080)
# export SYNC_PORT=8080

# 启动服务
/root/miniconda3/envs/python/bin/python -m anki.syncserver
提示

部分用户可能不熟悉VI编辑器。进入界面后,切换到英文输入法,按i键进入输入模式,然后粘贴上面的文本。然后按Esc键退出输入模式。输入:wq回车保存并退出文件。

  1. 新建一个名为anki_sync.service的文件
vi /etc/systemd/system/anki_sync.service

文件内容如下:

/etc/systemd/system/anki_sync.service
[Unit]
Description=anki sync server service
After=network.service

[Service]
Type=simple
User=root
Group=root
ExecStart=sh /root/anki_sync_server.sh
PrivateTmp=true
Restart=on-failure

[Install]
WantedBy=multi-user.target
  1. 启动Anki同步服务

在终端中依次输入下面命令。

# 重载服务
sudo systemctl daemon-reload

# 设置开机自启
sudo systemctl enable anki_sync

# 启动服务
sudo systemctl start anki_sync

# 查看服务状态
sudo systemctl status anki_sync

当出现下面的界面,表示服务启动成功。

如何增删和修改同步用户信息

重新修改/root/anki_sync_server.sh文件中的用户信息。

修改完成后,依次输入下面命令:

# 重载服务
sudo systemctl daemon-reload
# 重启服务
sudo systemctl restart anki_sync
# 查看服务状态
sudo systemctl status anki_sync

方法二:使用Docker安装

安装Docker

参考教程:https://docs.docker.com/engine/install/ubuntu/

在终端中依次输入下面命令:

  1. 设置Docker的APT源
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] http://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
  1. 安装Docker
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  1. 验证安装成功
docker -v

出现类似下面的提示,表示安装成功。

启动容器

参考项目: https://hub.docker.com/r/johngong/anki-sync-server

  1. 拉取Anki同步服务器镜像
docker pull johngong/anki-sync-server
注意

由于国内网络环境问题,使用docker pull命令拉取镜像速度很慢甚至直接失败,推荐使用手动下载tar包导入的方式获取镜像。

容器镜像下载:anki_sync_server.tar | 蓝奏云

将下载好的镜像上传到云服务器中,然后使用下面命令加载镜像。

# 加载镜像
docker load -i /path/to/anki_sync_server.tar # 注意将路径修改为你的tar包的实际路径
  1. 创建docker-compose.yaml文件

终端中依次输入下面命令:

mkdir -p /root/anki_sync_server
vi /root/anki_sync_server/docker-compose.yaml

文件内容如下:

/root/anki_sync_server/docker-compose.yaml
services:
anki_sync_server:
image: johngong/anki-sync-server:latest
container_name: anki_sync_server
restart: always
environment:
# 设置用户名和密码, 可自行增删用户
SYNC_USER1: user1:pass1 # 用户1
SYNC_USER2: user2:pass2 # 用户2
SYNC_USER3: user3:pass3 # 用户3
SYNC_PORT: 8080
MAX_SYNC_PAYLOAD_MEGS: 100
UID: 1000
GID: 1000
ports:
- 8080:8080
volumes:
- ./data:/ankisyncdir
VI编辑器使用说明

输入i进入输入模式,粘贴上面的内容,然后按ESC回到正常模式,输入:wq即可退出并保存文件。

注意

不要忘记在文件中修改用户名和密码!

  1. 启动容器

终端中依次输入下面命令:

cd /root/anki_sync_server
docker compose up -d

当出现类似下面的提示,表示启动成功。

如何增删和修改同步用户信息

重新修改/root/anki_sync_server/docker-compose.yaml文件中的用户信息。

修改完成后,依次输入下面命令:

cd /root/anki_sync_server

# 关闭容器
docker compose down

# 启动容器
docker compose up -d

开放端口

为了让外部可以顺利访问云服务器上的Anki同步服务,你还需要对外开放Anki同步服务的端口。

打开网络控制台,接着打开『访问控制』菜单下的"安全组"设置, 在default安全组中添加规则。

在"入方向规则"中添加放行8080端口。

然后在实例控制台中确认已经将云服务器应用default安全组。

Anki客户端配置

假设你的云服务器公网IP是1.2.3.4, 那么你的自定义服务器地址就可以填写:http://1.2.3.4:8080

电脑端

打开"工具>设置",切换到『同步』选项卡,在『自托管同步服务器』参数位置填写云服务器公网地址。

电脑端效果展示
注意

不要忘了把IP地址修改为自己的云服务器公网IP。

移动端

提示

安卓上的Anki客户端是AnkiDroid,如果没有安装,可以参考本教程的安装指南部分进行安装。

打开AnkiDroid软件,按照下面步骤设置私人同步服务器地址:

1.打开设置2.找到『同步』3.填写服务器地址

设置好后,回到主界面,点击『同步』按钮,登录账号后即可开始同步。