เซิร์ฟเวอร์ซิงค์ที่โฮสต์เอง
ผู้ใช้ขั้นสูงที่ไม่สามารถหรือไม่ต้องการใช้ AnkiWeb สามารถใช้เซิร์ฟเวอร์ซิงค์ที่โฮสต์เอง แทนได้
สิ่งที่ควรทราบ:
- นี่เป็นคุณสมบัติขั้นสูงที่มุ่งเป้าไปที่ผู้ใช้ที่คุ้นเคยกับ เครือข่ายและบรรทัดคำสั่ง หากคุณใช้สิ่งนี้ ความคาดหวังคือคุณ สามารถแก้ไขปัญหาการตั้งค่า/เครือข่าย/ไฟร์วอลล์ที่คุณพบเจอได้ด้วยตนเอง และ การใช้งานนี้เป็นความเสี่ยงของคุณเองทั้งหมด
- ไคลเอ็นต์ที่ใหม่กว่าอาจต้องพึ่งพาการเปลี่ยนแปลงโปรโตคอลการซิงค์ ดังนั้นการซิงค์อาจ หยุดทำงานหากคุณอัปเดตไคลเอ็นต์ Anki ของคุณโดยไม่อัปเดตเซิร์ฟเวอร์ด้วย
- นอกจากนี้ยังมีเซิร์ฟเวอร์ซิงค์ของบุคคลที่สาม ไม่มีการทดสอบกับเซิร์ฟเวอร์เหล่านั้น และ มักใช้เวลาในการตามทันเมื่อโปรโตคอลการซิงค์เปลี่ยนแปลง ดังนั้นจึง ไม่แนะนำ
- ข้อความภายใน Anki จะใช้คำว่า “AnkiWeb” แม้ว่าจะมีการกำหนดค่าเซิร์ฟเวอร์ที่กำหนดเอง ก็ตาม (เช่น “ไม่สามารถเชื่อมต่อกับ AnkiWeb” เมื่อเซิร์ฟเวอร์ของคุณล่ม)
การติดตั้ง/การรัน
มีหลายวิธีที่คุณสามารถติดตั้งและรันเซิร์ฟเวอร์ได้ คุณสามารถใช้:
- เซิร์ฟเวอร์ซิงค์ที่มาพร้อมกับ Anki เวอร์ชันเดสก์ท็อป
- เซิร์ฟเวอร์ซิงค์ขนาดเล็กแยกต่างหากซึ่งไม่รวมการพึ่งพา GUI ของ Anki มีการใช้งานใน Python และ Rust
จากบิลด์ที่แพ็คเกจแล้ว
สิ่งนี้ใช้เซิร์ฟเวอร์ซิงค์ที่สร้างขึ้นใน Anki เวอร์ชันเดสก์ท็อปตั้งแต่เวอร์ชัน 2.1.57+
บน Windows ในเซสชัน cmd.exe:
set SYNC_USER1=user:pass
"\Program Files\anki\anki-console" --syncserver
หรือ MacOS ใน Terminal.app:
SYNC_USER1=user:pass /Applications/Anki.app/Contents/MacOS/launcher --syncserver
แทนที่ ‘launcher’ ด้วย ‘anki’ สำหรับบิลด์ที่แพ็คเกจแล้วรุ่นเก่าก่อน 25.07
หรือ Linux:
SYNC_USER1=user:pass anki --syncserver
ด้วย Pip
เพื่อหลีกเลี่ยงการดาวน์โหลดการพึ่งพา GUI ของ 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 --locked --git https://github.com/ankitects/anki.git --tag 25.02.5 anki-sync-server
แทนที่ 25.02.5 ด้วยเวอร์ชัน Anki ล่าสุด
จะต้องติดตั้ง Protobuf (protoc)
หลังจากสร้างแล้ว คุณสามารถรันได้ด้วย:
SYNC_USER1=user:pass anki-sync-server
จากการเช็คเอาท์ซอร์ส
หากคุณได้โคลนที่เก็บ Anki จาก GitHub คุณสามารถติดตั้งจากที่นั่นได้:
./ninja extract:protoc ftl_repo
cargo install --path rslib/sync
ด้วย Docker
คุณสามารถค้นหา Dockerfile ที่ผู้ใช้มีส่วนร่วมและคำแนะนำบางอย่าง ที่นี่
ผู้ใช้หลายคน
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 อาจ ตอบสนองความต้องการของคุณได้