• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

卢晓春的博客

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

自建Anki同步服务器,并用AnkiDroid连接,设置哈希密码,解决error sending request for url()或用户名或密码错误

说明

参考:https://www.gerenbiji.com/blog/2024年/自建 Anki 同步服务器/
官方文档:https://docs.ankiweb.net/sync-server.html
环境:

  • RockyLinux x86平台
  • AnkiDroid 2.20.0
  • anki 24.11 linux qt6
    方案:使用官方桌面客户端自带的服务器,nginx转发外部https到anki http
    AnkiDroid使用条件:存在域名,可用https

1. 下载官方客户端

https://apps.ankiweb.net/

2. 运行

解压后运行,命令参考↓

SYNC_USER1=[用户名1]:[明文密码] SYNC_PORT=27701 SYNC_BASE=../anki-sync-server-data PASSWORDS_HASHED=0 anki --syncserver
# 出现 INFO listening addr=0.0.0.0:27701 成功

字段说明

  • SYNC_USER1:用户名和密码,用户名建议用邮箱,避免AnkiDroid出现意外问题,密码使用明文
  • SYNC_USER2: 多用户2
  • SYNC_USER3: 多用户3
  • SYNC_PORT:对外端口
  • SYNC_BASE:用户数据存储路径
  • PASSWORDS_HASHED:是否使用哈希密码(这里暂时不生效,需要在后面设置。

3. 设置https访问

由于AnkiDroid遵守了安卓规范,不支持http协议,可能会出现error sending request for url()报错,或用户名或密码错误
这里使用nginx进行转发。
nginx设置参考↓ 注意一定要改大client_max_body_size ,否则无法同步媒体文件

http{
    # 注意一定要改大包大小,否则无法同步媒体文件
    client_max_body_size 1024G;
    server {
        # 27702只是演示
        listen      27702 ssl;
        listen      [::]:27702 ssl;
        server_name  [你的域名];
        ssl_session_timeout 5m;        
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;    
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        # 证书位置
        ssl_certificate  /root/.acme.sh/你的域名/fullchain.cer;
        ssl_certificate_key /root/.acme.sh/你的域名.site_ecc/umiumi.site.key;
        location / {
            # 转发到本地的27701,http协议
            proxy_pass http://127.0.0.1:27701;
        }
    }
}

4.AnkiDroid设置

首先设置同步服务器
设置-同步-高级设置-自定义同步服务器


然后在 设置-AnkiWeb 账户中登录
顺利的话,登录成功,至此服务器已经可用。

5.设置哈希密码,避免在启动服务器时需要输入明文密码

参考官方文档,需要生成PHC格式的哈希密码字符串:

可以使用文中说到的工具:
https://git.sr.ht/~laalsaas/pbkdf2-password-hash
由于项目使用rust,需要安装cargo等相关环境,rust官网:
https://www.rust-lang.org/zh-CN/
完成后执行以下命令进行下载依赖、编译和运行

git clone https://git.sr.ht/~laalsaas/pbkdf2-password-hash
cd pbkdf2-password-hash
cargo run

或者使用楼主编译好的版本(AMD64平台)需要IPV6访问
https://pan.umiumi.site:5212/s/OLUP
运行程序,输入两次密码,得到PHC字符串

替换PHC字符串到原来的明文密码。注意此时需要给环境变量加上单引号,防止美元符号被解析
改 PASSWORDS_HASHED = 1

SYNC_USER1='你的邮箱:$pbkdf2-sha256$i=600000,l=32$AGdcZmgMq3vxya26tY7zWA$oJm4cnoaWuPHJCb/DkVcnT35dQbGAM1ltb15n292hhw' SYNC_PORT=27701 SYNC_BASE=../anki-sync-server-data PASSWORDS_HASHED=1 anki --syncserver

再次尝试在AnkiDroid登录/同步,成功

补充Windows PC版本登录服务器

注意需要新版本,老版本需要插件实现。工具-设置-同步中,设置自托管服务器并登录
可不用https

posted on 2024-12-23 18:03  卢晓春  阅读(986)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3