Локальний сервер синхронізації
Досвідчені користувачі, які не можуть або не бажають використовувати AnkiWeb, можуть використовувати локальний сервер синхронізації.
На що варто звернути увагу:
- Це розширена функція, орієнтована на користувачів, які впевнено працюють з мережею та командним рядком. Якщо це використовується, очікується, що ви зможете самостійно вирішити будь-які проблеми з налаштуванням/мережею/брандмауером, і використання цієї функції здійснюється повністю на ваш власний ризик.
- Новіші клієнти можуть залежати від змін у протоколі синхронізації, тому синхронізація може припинити працювати, якщо оновити клієнти Anki без оновлення сервера.
- Існують також сторонні сервери синхронізації. Тестування на них не проводиться, і вони зазвичай відстають, коли змінюється протокол синхронізації, тому їх не рекомендується використовувати.
- Повідомлення в Anki будуть використовувати термін "AnkiWeb", навіть якщо налаштовано користувацький сервер (наприклад, "Не вдається підключитися до AnkiWeb", коли ваш сервер не працює).
Встановлення/Запуск
Існує кілька способів встановлення та запуску сервера. Можна використовувати:
- сервер синхронізації, що постачається разом із настільною версією Anki
- окремий мінімальний сервер синхронізації, який не включає залежності графічного інтерфейсу Anki. Доступні реалізації на Python та Rust.
З пакованої збірки
Це використовує сервер синхронізації, вбудований у настільну версію Anki, починаючи з версії 2.1.57+.
На Windows у сесії cmd.exe:
set SYNC_USER1=user:pass
"\Program Files\anki\anki.exe" --syncserver
Або на MacOS, у Terminal.app:
SYNC_USER1=user:pass /Applications/Anki.app/Contents/MacOS/anki --syncserver
Або на Linux:
SYNC_USER1=user:pass anki --syncserver
За допомогою Pip
Щоб уникнути завантаження залежностей графічного інтерфейсу настільної версії Anki, можна запустити окремий сервер синхронізації Anki, використовуючи пакет Python, завантажений з PyPI. Переконайтеся, що у вас встановлено Python 3.9+.
python3 -m venv ~/syncserver
~/syncserver/bin/pip install anki
SYNC_USER1=user:pass ~/syncserver/bin/python -m anki.syncserver
За допомогою Cargo
Починаючи з Anki 2.1.66+, можна також зібрати реалізацію сервера синхронізації на Rust за допомогою наступної команди. Переконайтеся, що у вас встановлено Rustup.
cargo install --git https://github.com/ankitects/anki.git --tag 2.1.66 anki-sync-server
Замініть 2.1.66 на актуальну версію Anki.
Необхідно встановити Protobuf (protoc).
Після збірки можна запустити сервер за допомогою:
SYNC_USER1=user:pass anki-sync-server
З вихідного коду
Якщо ви клонували репозиторій Anki з GitHub, можна встановити сервер звідти:
./ninja extract:protoc
cargo install --path rslib/sync
Кілька користувачів
SYNC_USER1
оголошує першого користувача та пароль, і його необхідно встановити.
За бажанням можна оголосити SYNC_USER2
, SYNC_USER3
і так далі, якщо потрібно налаштувати кілька облікових записів.
Хешовані паролі
Досвідчені користувачі можуть використовувати хешовані паролі замість звичайних текстових паролів. Якщо ви хочете це зробити, потрібно використовувати окремий інструмент (наприклад, цей) для створення хешу пароля. Потім можна вказати серверу очікувати хешовані паролі, встановивши змінну середовища PASSWORDS_HASHED на 1 (або будь-яке інше значення).
Коли використовуються хешовані паролі, змінні SYNC_USER повинні бути у форматі username:password_hash, де password_hash — це хеш пароля у форматі PHC.
Місце зберігання
Сервер повинен зберігати копію вашої колекції та медіафайлів у папці.
За замовчуванням це ~/.syncserver; можна змінити це, визначивши змінну середовища SYNC_BASE
. Це не повинно бути тим самим місцем, що й ваша звичайна папка даних Anki, оскільки сервер і клієнт повинні зберігати окремі копії.
Публічний доступ
Сервер слухає незашифроване HTTP-з'єднання, тому не варто відкривати його безпосередньо в інтернет. Краще обмежити використання локальною мережею або розмістити перед сервером якийсь вид шифрування, наприклад VPN (Tailscale, як кажуть, простий у використанні) або HTTPS зворотний проксі.
Можна визначити SYNC_HOST
і SYNC_PORT
, щоб змінити хост і порт, до яких прив'язується сервер.
Налаштування клієнта
Необхідно визначити IP-адресу вашого комп'ютера в мережі, а потім вказати кожному з клієнтів Anki цю адресу, наприклад, щось на кшталт http://192.168.1.200:8080/
. URL можна налаштувати в параметрах.
Якщо використовується AnkiMobile і не вдається підключитися до сервера у вашій локальній мережі, перейдіть до налаштувань iOS, знайдіть Anki внизу списку та вимкніть, а потім знову увімкніть "Дозволити Anki доступ до локальної мережі".
Старіші настільні клієнти вимагали визначення SYNC_ENDPOINT
і SYNC_ENDPOINT_MEDIA
. Якщо використовується старіший клієнт, потрібно вказати, наприклад, http://192.168.1.200:8080/sync/
і http://192.168.1.200:8080/msync/
відповідно. Клієнти AnkiDroid до версії 2.16 вимагають окремої конфігурації для двох кінцевих точок.
Зворотні проксі
Якщо використовується зворотний проксі для забезпечення доступу через HTTPS (наприклад, nginx) і прив'язка до підшляху (наприклад, http://example.com/custom/
-> http://localhost:8080/
), необхідно переконатися, що при налаштуванні Anki використовується слеш наприкінці. Якщо вказати http://example.com/custom
замість цього, це не працюватиме.
На iOS TLS 1.3 не підтримується, тому ваш зворотний проксі повинен мати увімкнений TLS 1.2, інакше ви отримаєте "код помилки -9836".
Великі запити
Типове обмеження AnkiWeb на завантаження застосовується за замовчуванням. За бажанням можна встановити MAX_SYNC_PAYLOAD_MEGS
на значення більше 100, якщо потрібно збільшити ліміт. Майте на увазі, що якщо використовується зворотний проксі, можливо, потрібно буде налаштувати ліміт і там.
Внесення змін
Оскільки цей сервер постачається разом із Anki, простота є метою дизайну — він орієнтований на індивідуальне/сімейне використання, і PR, які додають такі речі, як REST API або зовнішні бази даних, навряд чи будуть прийняті на даний момент. Якщо є сумніви, будь ласка, зверніться перед початком роботи над PR.
Якщо ви шукаєте готове рішення API, додаток AnkiConnect може відповідати вашим потребам.