* feat(docs): mirror every docs/ page in all 65 locales Extends the documentation mirrors from the 22-page core set (#13940) to every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors (6,208 new), language bars rewritten for the full locale list, state adopted so the blocking drift gate now covers all 152 pages. run-translation.mjs: an oversized block made only of table rows or list items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is cut at item boundaries and rejoined without a blank line — the single 16-40 KB request outlived the backend socket for verbose scripts. 48 older mirrors whose tables had lost rows were retranslated with --force. * docs(i18n): refresh mirrors for the sources the base changed since the branch cut Section-level retranslation of the 29 docs (and README.md) whose source or mirrors moved on release/v3.8.51 during the run, then state adoption; the drift gate is green again on the merged tree.
15 KiB
Termux Headless Setup (ไทย)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
OmniRoute สามารถทำงานเป็นเซิร์ฟเวอร์แบบ headless บน Android ผ่าน Termux ได้ แอปเดสก์ท็อป Electron ไม่รองรับใน Termux แต่แดชบอร์ดเว็บและ API ที่เข้ากันได้กับ OpenAI สามารถใช้งานได้จากเบราว์เซอร์ภายในเครื่องหรือจากอุปกรณ์อื่นในเครือข่ายเดียวกัน
ข้อกำหนดเบื้องต้น
ติดตั้ง Termux จาก F-Droid หรือ GitHub releases จากนั้นอัปเดตแพ็กเกจและติดตั้งเครื่องมือสำหรับบิลด์ที่จำเป็นต่อ dependency แบบ native เช่น better-sqlite3
pkg update
pkg upgrade
pkg install nodejs python build-essential git
เวอร์ชัน Node.js: OmniRoute ต้องใช้ Node
>=22.22.2 <23 || >=24.0.0 <27(ตรงกับenginesในpackage.json/SUPPORTED_NODE_RANGE) โดยทั่วไปnodejs-ltsของ Termux จะมาพร้อมกับ Node 20 LTS ซึ่ง ไม่รองรับอีกต่อไป — ให้ติดตั้งpkg install nodejs(เวอร์ชันปัจจุบัน) แทน และตรวจสอบว่าnode --versionแสดงเวอร์ชันในสาย 22.x/24.x ขึ้นไป
หากการคอมไพล์แพ็กเกจแบบ native ล้มเหลว ให้เรียกใช้คำสั่ง pkg install ข้างต้นอีกครั้ง แล้วลองติดตั้ง OmniRoute ใหม่
การติดตั้ง
เรียกใช้แพ็กเกจล่าสุดที่เผยแพร่โดยตรง:
npx -y omniroute@latest
คุณยังสามารถติดตั้งแบบ global ได้:
npm install -g omniroute
omniroute
การเรียกใช้
เริ่ม OmniRoute ในโหมดเซิร์ฟเวอร์แบบ headless:
omniroute
หรือ:
npx omniroute
แดชบอร์ดจะรอรับการเชื่อมต่อที่:
http://localhost:20128
เปิด URL ดังกล่าวในเบราว์เซอร์ Android หากคุณเรียกใช้ไคลเอนต์ภายใน Termux ให้ใช้โฮสต์และพอร์ตเดียวกันเป็น URL ฐานที่เข้ากันได้กับ OpenAI
การทำงานเบื้องหลัง
สำหรับโปรเซสเบื้องหลังแบบง่าย:
nohup omniroute > omniroute.log 2>&1 &
หากต้องการหยุด:
pkill -f omniroute
สำหรับการเริ่มทำงานอัตโนมัติหลังจากบูตอุปกรณ์ ให้ติดตั้งส่วนเสริม Termux:Boot และสร้างสคริปต์สำหรับบูต:
mkdir -p ~/.termux/boot
cat > ~/.termux/boot/omniroute.sh <<'EOF'
#!/data/data/com.termux/files/usr/bin/sh
cd "$HOME"
nohup omniroute > "$HOME/omniroute.log" 2>&1 &
EOF
chmod +x ~/.termux/boot/omniroute.sh
การเพิ่มประสิทธิภาพแบตเตอรี่ของ Android อาจหยุดโปรเซสเบื้องหลังที่ทำงานเป็นเวลานานได้ ให้ปิดการเพิ่มประสิทธิภาพแบตเตอรี่สำหรับ Termux หากต้องการให้เซิร์ฟเวอร์ออนไลน์อยู่ตลอดเวลา
การเข้าถึงจากอุปกรณ์อื่น
ค้นหาที่อยู่ IP ของโทรศัพท์บนเครือข่าย WiFi:
ip addr show wlan0
จากนั้นเปิดแดชบอร์ดจากอุปกรณ์อื่น:
http://PHONE_IP:20128
ตัวอย่างเช่น:
http://192.168.1.50:20128
ให้โทรศัพท์และไคลเอนต์อยู่บนเครือข่ายที่เชื่อถือได้เดียวกัน หากคุณเปิดให้เข้าถึง OmniRoute จากภายนอกโทรศัพท์ ให้เปิดใช้งาน API key และการยืนยันตัวตนสำหรับแดชบอร์ด
ไดเรกทอรีข้อมูล
ตามค่าเริ่มต้น OmniRoute จะจัดเก็บข้อมูลไว้ภายใต้ไดเรกทอรี home ของ Termux โดยใช้ลักษณะการทำงานของพาธข้อมูลฝั่งเซิร์ฟเวอร์เช่นเดียวกับบน Linux หากต้องการจัดเก็บฐานข้อมูลไว้ในตำแหน่งที่ระบุอย่างชัดเจน:
export DATA_DIR="$HOME/.omniroute"
omniroute
ข้อจำกัด
- Electron ไม่สามารถทำงานใน Termux ได้
- ไม่มี system tray หรือการผสานรวมกับเดสก์ท็อป
- การตั้งค่านี้เป็นแบบเซิร์ฟเวอร์เท่านั้น: ให้ใช้งานผ่านแดชบอร์ดบนเบราว์เซอร์
- dependency แบบ native อาจต้องคอมไพล์ภายในเครื่อง
- อุปกรณ์ Android ที่มีหน่วยความจำน้อยอาจต้องลดจำนวนคำขอที่ทำงานพร้อมกัน
- ฟีเจอร์ใบรับรอง MITM/ระบบอาจต้องกำหนดค่า trust store ระดับ Android จากภายนอก Termux
การแก้ไขปัญหา
แพลตฟอร์มที่ไม่รองรับ: android (ทุกคำขอส่งคืน HTTP 500)
อาการ: omniroute / omniroute serve แสดงข้อความ ✔ OmniRoute is running! แต่ทุกคำขอไปยังแดชบอร์ดหรือ API ส่งคืนเพียง 500 Internal Server Error ไฟล์ ~/.omniroute/logs/application/app.log ยังคงว่างเปล่า APP_LOG_LEVEL=debug ไม่แสดงข้อมูลที่เป็นประโยชน์ และเนื้อหาการตอบกลับเป็นข้อความธรรมดา (Internal Server Error) โดยไม่มีรายละเอียด JSON
สาเหตุ: บิลด์ Termux/Node บางรุ่นรายงานค่า process.platform === "android" โดย getCacheDirectory() ของ Next.js ไม่รองรับแพลตฟอร์มดังกล่าว ซึ่งจำเป็นต้องมี ~/.cache (หรือไดเรกทอรี tmp ทั่วไป) อยู่ ก่อนแล้ว มิฉะนั้นจะล้มเหลวขณะโหลด instrumentation hook พร้อมข้อความ:
Error: An error occurred while loading instrumentation hook: Unsupported platform: android
เนื่องจาก hook ไม่เคยโหลด ระบบบันทึก log จึงไม่เริ่มทำงาน ทำให้ข้อผิดพลาด 500 ดูเหมือนไม่สามารถวินิจฉัยได้เลย OmniRoute จะสร้าง ~/.cache (และตั้งค่า XDG_CACHE_HOME เมื่อยังไม่ได้กำหนด) ในจุดเริ่มต้นของ CLI ก่อนที่ Next.js จะเริ่มทำงาน เพื่อให้การตรวจสอบนี้สำเร็จบน Android/Termux
วิธีแก้ไขที่รองรับ (ไม่ต้องแก้ไขแพ็กเกจ):
mkdir -p ~/.cache
omniroute serve
ในบิลด์ OmniRoute ปัจจุบัน CLI จะดำเนินการนี้โดยอัตโนมัติบน Android/Termux — การติดตั้งใหม่ด้วย npx -y omniroute@latest / แบบ global ไม่ควรต้องทำขั้นตอนนี้ด้วยตนเอง หากคุณยังพบข้อผิดพลาดหลังจากอัปเกรด ให้สร้าง ~/.cache หนึ่งครั้งตามข้างต้นแล้วเริ่มใหม่
อย่า แก้ไข dist/server.js เพื่อบังคับให้ process.platform = "linux" การแก้ไขแพ็กเกจในลักษณะดังกล่าวจะถูกเขียนทับทุกครั้งที่ติดตั้งใหม่หรืออัปเกรด และไม่จำเป็นเมื่อมีไดเรกทอรีแคชแล้ว
ข้อผิดพลาดในการบิลด์ better-sqlite3
ติดตั้ง toolchain สำหรับบิลด์ของ Termux:
pkg install nodejs python build-essential
จากนั้นเรียกใช้อีกครั้ง:
npx -y omniroute@latest
พอร์ตถูกใช้งานอยู่แล้ว
ตรวจสอบว่าโปรเซสใดกำลังรอรับการเชื่อมต่อบนพอร์ตเริ่มต้น:
ss -ltnp | grep 20128
หยุดโปรเซสเดิม:
pkill -f omniroute
ไม่สามารถเข้าถึงแดชบอร์ดจากอุปกรณ์อื่น
ตรวจสอบว่าอุปกรณ์ทั้งสองอยู่บนเครือข่าย WiFi เดียวกัน จากนั้นทดสอบจาก Termux:
curl http://localhost:20128
หากการเข้าถึงภายในเครื่องใช้งานได้ แต่การเข้าถึงผ่าน LAN ใช้งานไม่ได้ ให้ตรวจสอบการแยกอุปกรณ์ของ hotspot/WiFi บน Android รวมถึงไฟร์วอลล์หรือโปรไฟล์ VPN บนโทรศัพท์