[Linux]搭建Anki同步伺服器(針對Anki2.1)
- 2020 年 3 月 10 日
- 筆記
文章目錄
- @[toc]
- 0 環境
- 1 首先安裝`anki2.1`
- 2. 配置安裝
- 2.1 配置虛擬環境virtualenv
- 2.2 安裝 ankisyncd
- 2.3 設置和運行伺服器
- 3. Anki客戶端設置
- 3.1. 客戶端Anki2.1
- 3.2. 客戶端Anki2.0
- 3.3. 手機端
- 4. 參考文獻
搭建Anki同步伺服器(針對Anki2.1)
針對Anki2.0
的版本:https://blog.csdn.net/humanking7/article/details/89299138
0 環境
Ubuntu 16.04
- PC:
anki 2.0.52
和anki 2.1.12
- Android: ankiDroid 2.8.4`
1 首先安裝anki2.1
先去下載官網下載安裝包https://apps.ankiweb.net/#download
$ tar xjf anki-2.1.14-amd64.tar.bz2 $ cd anki-2.1.14-linux-amd64 $ sudo make install # 如果要卸載 $ sudo make uninstall
2. 配置安裝
2.1 配置虛擬環境virtualenv
先安裝pip
和virtualenv
# 安裝 pip $ apt install python3-pip # 更新pip $ pip3 install virtualenv # 安裝 virtualenv $ pip3 install virtualenv
在準備安裝伺服器的目錄下創建 Python
虛擬環境:
$ cd [你想要安裝伺服器的目錄] $ virtualenv ankienv
注意將[你想要安裝伺服器的目錄]
替換為你實際的目錄的路徑,路徑不需要加方括弧。
然後進入新創建的虛擬環境:
$ . ankienv/bin/activate
注意以上命令英文的句號後面有一個空格。
如果想要退出環境,輸入命令deactivate
輸入完成後,命令行前會多出 (ankienv)
表示當前的 Python
環境,之後與 Python
或 pip
有關的所有操作都要在這個環境中進行。
例子:
root@x60s:~/code_soft/ankiSyncService# . ankienv/bin/activate (ankienv) root@x60s:~/code_soft/ankiSyncService# # 該目錄下多了一個環境相關的文件 (ankienv) root@x60s:~/code_soft/ankiSyncService# ls ankienv (ankienv) root@x60s:~/code_soft/ankiSyncService# ls ankienv/ bin include lib
2.2 安裝 ankisyncd
使用 git
來 clone
伺服器程式碼:
$ git clone https://github.com/tsudoko/anki-sync-server.git
進入程式碼目錄並安裝 git
子模組:
$ cd anki-sync-server $ git submodule update --init
我在執行這一步的時候報錯 pyaudio
安裝失敗,解決方法是直接把 requirements.txt
文件中 pyaudio
刪掉,再重新執行上面的 pip
命令。根據官方文檔的說明這個模組不影響伺服器同步功能的使用。
繼續安裝 Python
模組,安裝完後進入 anki-sync-server
目錄:
$ pip3 install webob $ cd ..
最後,還可以修改伺服器配置文件:anki-sync-server
目錄下的 ankisyncd.conf
。對我來說無需更改任何配置。
[sync_app] # change to 127.0.0.1 if you don't want the server to be accessible from the internet host = 0.0.0.0 port = 27701 data_root = ./collections base_url = /sync/ base_media_url = /msync/ auth_db_path = ./auth.db # optional, for session persistence between restarts session_db_path = ./session.db # optional, for overriding the default managers and wrappers # # must inherit from ankisyncd.persistence.PersistenceManger, e.g, # persistence_manager = great_stuff.postgres.PostgresPersistenceManager # # must inherit from ankisyncd.session.SimpleSessionManager, e.g, # session_manager = great_stuff.postgres.PostgresSessionManager # # must inherit from ankisyncd.user.SimpleUserManager, e.g, # user_manager = great_stuff.postgres.PostgresUserManager # # must inherit from ankisyncd.collections.CollectionWrapper, e.g, # collection_wrapper = great_stuff.postgres.PostgresCollectionWrapper
配置文件里包括 host
對應伺服器監聽地址,默認 0.0.0.0
表示接收所有 IP
的請求,如果改成 127.0.0.1
則無法接收外網或內網上的請求,也就是只能通過伺服器本機訪問,改成伺服器內網 IP
則只接收內網的請求。port
表示監聽埠,如果修改這個參數則客戶端連接埠也要對應修改與其相同。data_root
應該是同步數據的保存目錄。
其實基本不需要自己折騰,如果沒有埠和IP
的特殊需求,就不需要改了
到此伺服器已經安裝完成了。
2.3 設置和運行伺服器
設置的相關命令:
# 在 anki-sync-server 目錄下 $ ./ankisyncctl.py -h usage: ./ankisyncctl.py <command> [<args>] Commands: adduser <username> - add a new user deluser <username> - delete a user lsuser - list users passwd <username> - change password of a user
增加用戶:
$ ./ankisyncctl.py adduser <username>
將命令中的 <username>
替換為實際的用戶名。之後輸入密碼,按回車確定。
啟動伺服器:
$ python -m ankisyncd
執行這條命令的時候會一直佔用命令行終端,否則表示伺服器已停止運行。
如果是通過 ssh
連接到 Linux
伺服器在伺服器上運行,斷開 ssh
連接會自動停止伺服器運行,這就需要下面的命令防止進程停止:
$ nohup python -m ankisyncd &
當然也可以用 screen
或 tmux
之類的伺服器上常用的工具解決這個問題。
話雖然如此,但是每次運行起來特別噁心,還需要進入環境,自己去運行,所以寫一個腳本非常方便
#!/bin/bash # 進入環境目錄 cd /root/code_soft/ankiSyncService # 激活環境 echo "激活 virtualenv 環境" . ankienv/bin/activate # 進入anki-sync目錄 cd /root/code_soft/ankiSyncService/anki-sync-server # 運行anki-sync echo "運行 ankisyncd " nohup python -m ankisyncd & echo -e "n" echo "查找anki-sync的PID:" echo "ps -ef | grep anki" echo -e "n" echo "如果想結束anki-sync運行,使用命令:" echo "kill -9 PID"
不過到了最後,我發現還是別亂用virtualenv
,因為感覺我完全用不到,徒增煩惱
3. Anki客戶端設置
3.1. 客戶端Anki2.1
在 Add-on
文件夾下創建文件夾 ankisyncd
,並在其中創建並編輯文件 __init__.py
,裡面不要有漢字,保存為utf-8
格式:
# just for sync -- add by Qfx import anki.sync, anki.hooks, aqt addr = "http://127.0.0.1:27701/" # put your server address here anki.sync.SYNC_BASE = "%s" + addr def resetHostNum(): aqt.mw.pm.profile['hostNum'] = None anki.hooks.addHook("profileLoaded", resetHostNum)
將 addr = "http://127.0.0.1:27701/"
行中的 127.0.0.1
換成對應伺服器的 IP。27701
對應伺服器配置的埠。
3.2. 客戶端Anki2.0
3.3. 手機端
- Android: 見上文搭建Anki同步伺服器(針對Anki2.0)
- IOS: 不支援自定義伺服器,而且還賣160多,還好我提前試了試
4. 參考文獻
- http://genedan.com/no-127-ankisyncd-a-custom-sync-server-for-anki-2-1/
- https://gkzhb.gitee.io/2019/06/ankisyncd/
- https://extendswind.top/posts/technical/anki_and_anki_server/
- https://www.xiebruce.top/881.html
OK! 以上,Enjoy~