Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

เซิร์ฟเวอร์ซิงค์ที่โฮสต์เอง

ผู้ใช้ขั้นสูงที่ไม่สามารถหรือไม่ต้องการใช้ 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 อาจ ตอบสนองความต้องการของคุณได้