SSD Nodes Learn 🎉 VPS เริ่ม $5.50/เดือน
คู่มือ Matt Connorโดย Matt Connor

วิธีติดตั้ง DeepSeek Harness บน VPS ให้ปลอดภัย

เรียนรู้วิธีติดตั้ง DeepSeek Harness บน Linux VPS พร้อมการล็อกเวอร์ชัน npm และการเข้าถึง Web UI ผ่าน SSH tunnel บนพอร์ต 3080 เพื่อป้องกันการเข้าถึงจากสาธารณะอย่างปลอดภัย

DeepSeek Harness คืออะไร

DeepSeek Harness (dsh) คือรันไทม์ของเอเจนต์ที่พัฒนาด้วย Node.js ซึ่งคุณสามารถรันบน VPS (virtual private server) ได้ วิธีการใช้งานที่ปลอดภัยที่สุดคือการผูกไว้กับ 127.0.0.1 และเข้าถึงผ่าน SSH (secure shell) tunnel โดยตัวโปรแกรมจะให้บริการเว็บ UI (user interface) บนพอร์ต 3080 แทนการทำงานผ่านเทอร์มินัล เนื่องจากเว็บเซิร์ฟเวอร์นี้ไม่มีระบบรหัสผ่านในตัว การเปิดพอร์ต 3080 สู่สาธารณะจึงทำให้ใครก็ตามที่พบพอร์ตนี้สามารถเข้าถึงเอเจนต์ที่อ่านไฟล์และรันคำสั่งในฐานะผู้ใช้ Linux ของคุณได้

DeepSeek ได้เผยแพร่ซอฟต์แวร์นี้เมื่อวันที่ 13 สิงหาคม 2026 ภายใต้สัญญาอนุญาต MIT ในรูปแบบแพ็กเกจ npm ชื่อ @deepseek-ai/dsh โครงการนี้ระบุว่าเป็นรุ่นทดสอบสำหรับนักพัฒนา (developer preview) และแจ้งเตือนว่าอาจมีการเปลี่ยนแปลงที่ส่งผลกระทบต่อความเข้ากันได้ (breaking changes) หมายเลขเวอร์ชันทั้งหมดที่ระบุไว้ด้านล่างเป็นข้อมูล ณ เดือนสิงหาคม 2026 ดังนั้นโปรดตรวจสอบที่เก็บข้อมูล (repository) ก่อนนำไปติดตั้งบนเซิร์ฟเวอร์ที่สำคัญ

แนวคิดหลักที่อยู่เบื้องหลังการออกแบบทั้งหมดคือ ทุกอย่างคือปลั๊กอิน ไม่ว่าจะเป็นตัวปรับแต่งโมเดล (model adapter), ระบบลงทะเบียนเครื่องมือ (tool registry), บันทึกเซสชัน (session log), แซนด์บ็อกซ์ (sandbox), ตัวจัดตารางเวลา (scheduler) และลูปการทำงานของเอเจนต์ (agent loop) ล้วนเป็นปลั๊กอินที่โหลดเข้าสู่บริบทเดียวกัน และสามารถเปลี่ยนแทนที่ได้ทั้งหมด ไม่มีแกนหลักที่มีสิทธิพิเศษเหนือกว่าปลั๊กอินอื่น นี่คือสิ่งที่ทำให้ Harness น่าทดลองใช้งาน แต่ในขณะเดียวกันก็เป็นจุดที่ความเสี่ยงที่แท้จริงแฝงอยู่

Harness ไม่ใช่โมเดล

Harness ทำหน้าที่รันลูปของ agent ส่วนการประมวลผลเชิงตรรกะจะเกิดขึ้นในโมเดลที่อยู่ที่อื่น ดังนั้นระบบจะไม่ทำงานจนกว่าคุณจะระบุ API (application programming interface) key หรือที่อยู่ของ model endpoint ที่คุณโฮสต์ด้วยตนเอง

คุณสามารถตั้งค่าส่วนนี้ได้ใน UI ภายใต้เมนู Settings แล้วเลือก Models ในแคตตาล็อกจะมีบัตรสำเร็จรูปสำหรับผู้ให้บริการ API รายใหญ่ (DeepSeek, OpenAI, Anthropic) ซึ่งคุณสามารถวาง key ลงไปได้ ตัวเลือกที่น่าสนใจคือ "Add a custom provider" ซึ่งจะให้คุณระบุ provider ID, ชื่อที่แสดง, base URL, โปรโตคอล API และข้อมูลรับรอง โดยระบบจะสื่อสารผ่านโปรโตคอลที่รองรับ OpenAI ดังนั้น gateway หรือเซิร์ฟเวอร์ภายในเครื่องใดก็ตามที่ใช้โปรโตคอลนี้จะสามารถใช้งานได้ นอกจากนี้ custom provider ยังสามารถสอบถามไปยัง endpoint GET /models ที่รองรับ OpenAI เพื่อดึงรายการโมเดลมาให้คุณโดยอัตโนมัติ

นี่คือวิธีชี้เป้าให้ harness ไปยังโมเดลที่อยู่บน VPS เดียวกัน โดย Ollama จะเปิด API ที่รองรับ OpenAI ไว้ที่ http://127.0.0.1:11434/v1/ และต้องการให้กรอกฟิลด์ API key ด้วยสตริงใดก็ได้ โดยนิยมใช้ ollama เนื่องจากฟิลด์นี้เป็นฟิลด์บังคับแต่จะถูกละเว้นในภายหลัง คำถามที่ยากกว่าคือโมเดลที่มีขนาดเล็กพอจะรันบน VPS ของคุณนั้นมีประสิทธิภาพเพียงพอที่จะขับเคลื่อน agent หรือไม่ ซึ่ง ความแตกต่างระหว่าง Ollama และ vLLM ในฐานะเซิร์ฟเวอร์โมเดลภายในเครื่อง จะเป็นตัวกำหนดว่าคุณต้องใช้ RAM มากน้อยเพียงใด

Key ที่พิมพ์ลงใน UI จะเป็นแบบเขียนได้อย่างเดียว (write-only) โดย harness จะจัดเก็บไว้ใน $DSH_HOME/.credentials.yaml และเก็บไว้เพียงการอ้างอิงข้อมูลรับรองใน settings.yaml เท่านั้น โดยค่าเริ่มต้นของ $DSH_HOME คือ ~/.dsh ให้ถือว่าไฟล์นั้นเป็นไฟล์รหัสผ่าน เพราะมันคือไฟล์รหัสผ่านจริงๆ ใครก็ตามที่อ่านไฟล์นี้ได้จะสามารถใช้ยอดเงินในบัญชี API ของคุณได้

สิ่งที่ต้องเตรียมก่อนการติดตั้ง

  • VPS ที่รัน Ubuntu 24.04 หรือ Linux เวอร์ชันปัจจุบันอื่น ๆ พร้อมสิทธิ์การเข้าถึงผ่าน SSH
  • Node.js 22.19 หรือใหม่กว่าในสาย 22.x หรือ Node.js 24 ขึ้นไป ซึ่งเป็นเวอร์ชันที่โปรเจกต์ใช้ในการ build และทดสอบ
  • บัญชีผู้ใช้ทั่วไป ไม่ใช่ root เนื่องจาก agent จะรันคำสั่ง shell ในฐานะผู้ใช้ที่เริ่มกระบวนการนั้น
  • pnpm ใน PATH หากคุณวางแผนจะติดตั้งปลั๊กอิน เนื่องจากคำสั่งปลั๊กอินจะเรียกใช้งานผ่าน shell
  • ปิดพอร์ต 3080 บน firewall ของคุณและบน network firewall แยกต่างหากของผู้ให้บริการ

แพ็กเกจ nodejs ของ Ubuntu เองนั้นเก่ากว่าเวอร์ชันที่ระบบต้องการ ดังนั้นให้ติดตั้ง Node จาก NodeSource หรือ nvm แทนการใช้ apt install nodejs หากเป็น VPS ใหม่ การ ทำ hardening ให้ SSH ก่อนเริ่มงานอื่น ถือว่าคุ้มค่ากับเวลา 10 นาทีที่เสียไป เพราะอุโมงค์ที่คุณกำลังจะใช้งานนั้นจะปลอดภัยเท่ากับตัว SSH server ที่อยู่เบื้องหลังเท่านั้น

การติดตั้ง DeepSeek Harness บน VPS โดยล็อกเวอร์ชันไว้

node --version
npx @deepseek-ai/dsh@0.1.0-rc.6 web

npx จะดาวน์โหลดแพ็กเกจและรันไบนารี dsh ของมัน web เป็นนามแฝงของ --profile web ซึ่งจะเริ่มการทำงานของแอปพลิเคชันบนเบราว์เซอร์ และกระบวนการจะแสดงที่อยู่ที่มันกำลังรอรับการเชื่อมต่ออยู่ โดยค่าเริ่มต้นคือ http://127.0.0.1:3080

ให้ล็อกเวอร์ชันไว้ npx @deepseek-ai/dsh web จะแก้ไขค่าไปยังสิ่งที่แท็ก latest ชี้ไป ณ ขณะที่คุณรันคำสั่ง และโปรเจกต์นี้ได้ปล่อย release candidate ออกมาหลายตัวแล้ว พร้อมทั้งแจ้งว่าจะมีการเปลี่ยนแปลงที่อาจทำให้ระบบเดิมใช้งานไม่ได้ (breaking changes) 0.1.0-rc.6 คือสิ่งที่ latest ชี้ไปเมื่อวันที่ 13 สิงหาคม 2026 การล็อกเวอร์ชันหมายความว่าเซิร์ฟเวอร์ที่คุณตั้งค่าในวันนี้จะมีพฤติกรรมเหมือนเดิมในเดือนหน้า ดังนั้นการอัปเกรดจึงกลายเป็นการตัดสินใจของคุณ แทนที่จะเป็นเหตุการณ์ไม่คาดฝันที่คุณเพิ่งมาพบภายหลัง

สำหรับการใช้งานประจำวัน ให้ติดตั้งเพียงครั้งเดียวแทนการแก้ไขค่าใหม่ทุกครั้งที่เริ่มโปรแกรม

npm install -g @deepseek-ai/dsh@0.1.0-rc.6
dsh --profile web --help

บรรทัดที่สองนั้นควรค่าแก่การรัน เพราะตัวเรียกใช้งาน (launcher) และเว็บแอปพลิเคชันมีชุดแฟล็กที่แยกจากกัน dsh --help จะแสดงตัวเลือกของตัวเรียกใช้งานเอง ส่วน dsh --profile web --help จะแสดงแฟล็กที่เว็บแอปพลิเคชันรองรับ ซึ่งเป็นที่ที่ --port, --host และ --trusted-host ที่สามารถระบุซ้ำได้นั้นอยู่

ตอนนี้ให้ยืนยันว่ามันกำลังรอรับการเชื่อมต่อที่ใด

ss -tlnp | grep 3080

คอลัมน์ที่อยู่ภายในเครื่อง (local address) ควรแสดงเป็น 127.0.0.1:3080 หากแสดงเป็น 0.0.0.0:3080 แสดงว่า UI สามารถเข้าถึงได้จากอินเทอร์เน็ต และคุณควรหยุดกระบวนการทำงานทันทีก่อนที่จะดำเนินการอื่นใดต่อ

เหตุผลที่คุณไม่ควรเปิดพอร์ต 3080 สู่สาธารณะ

เว็บเซิร์ฟเวอร์นี้ไม่มีเลเยอร์การยืนยันตัวตน การตั้งค่าของมันมีเพียงการระบุ host และ port ที่จะรับฟัง ซึ่งเป็นช่องทางเข้าถึงทั้งหมดที่มี การควบคุมการเข้าถึงสำหรับการใช้งานนอก localhost เป็นเพียงการตั้งค่า trusted-host แยกต่างหาก ซึ่งไม่ใช่หน้าจอสำหรับล็อกอิน

ลองพิจารณาสิ่งที่อยู่หลังพอร์ตนั้น ตัว agent สามารถแก้ไขไฟล์ใน workspace และรัน shell command ได้ อีกทั้ง credential ของผู้ให้บริการของคุณยังถูกเก็บไว้ในดิสก์ที่อยู่ใกล้กัน ดังนั้นการเปิดพอร์ต 3080 ทิ้งไว้จึงเท่ากับการเปิด remote shell ที่มีอินเทอร์เฟซแชท โดยรันในสิทธิ์ของผู้ใช้ที่สั่งเริ่มโปรแกรมและมี API key ของคุณแนบอยู่ ผู้โจมตีไม่จำเป็นต้องใช้ช่องโหว่ใดๆ พวกเขาเพียงแค่ต้องการเลขพอร์ต และเครื่องมือสแกนจะพบเลขพอร์ตภายในไม่กี่ชั่วโมงหลังจากโฮสต์ออนไลน์

CLI (command line interface) มีนโยบายสอดคล้องกับเรื่องนี้ ตั้งแต่เวอร์ชัน 0.1.0-rc.6 เป็นต้นไป มันจะไม่รองรับ --host 0.0.0.0 โดยเจตนาและจะหยุดทำงานพร้อมแสดงข้อความแจ้งการใช้งานแทนที่จะเริ่มโปรแกรม การปฏิเสธนี้เป็นฟีเจอร์หนึ่ง ดังนั้นอย่าพยายามหาแพตช์เพื่อลบฟีเจอร์นี้ออก

มีอีกสองวิธีที่เหมาะสมหากการใช้ tunnel ไม่ตอบโจทย์ของคุณ วิธีแรกคือการนำเครื่องไปไว้ใน private overlay network เพื่อให้มันมีที่อยู่ IP ที่เฉพาะอุปกรณ์ของคุณเท่านั้นที่สามารถเข้าถึงได้ ซึ่งเป็นสิ่งที่ เซิร์ฟเวอร์ควบคุม Headscale ที่คุณโฮสต์เอง มอบให้คุณ หรือวิธีที่สองคือการใช้ reverse proxy วางไว้ด้านหน้าเพื่อยืนยันตัวตนก่อนที่คำขอจะไปถึงพอร์ต 3080 เช่น การใช้ เซิร์ฟเวอร์ Authentik single sign-on เพื่อทำ forward auth ทั้งนี้ การใช้ reverse proxy โดยไม่มีการยืนยันตัวตนวางไว้ด้านหน้า ไม่ถือเป็นการควบคุมความปลอดภัย แต่มันเป็นเพียงการทำให้ URL ยาวขึ้นเท่านั้น

การเข้าถึง Web UI ผ่าน SSH tunnel

ให้รันคำสั่งนี้บนแล็ปท็อปของคุณ ไม่ใช่บนเซิร์ฟเวอร์

ssh -N -L 3080:127.0.0.1:3080 you@your-server

-L เป็นการเปิดพอร์ต 3080 บนแล็ปท็อปของคุณและส่งต่อทุกการเชื่อมต่อที่เข้ามาผ่านเซสชัน SSH ที่เข้ารหัสไว้ ส่วน 127.0.0.1:3080 จะถูกประมวลผลที่ฝั่งเซิร์ฟเวอร์ ดังนั้นการเชื่อมต่อจะไปถึง harness ผ่าน loopback เสมือนว่าคุณกำลังใช้งานอยู่ที่เครื่องนั้นโดยตรง ส่วน -N คือคำสั่งไม่ให้เปิด remote shell เนื่องจากคุณต้องการเพียงแค่การส่งต่อพอร์ตเท่านั้น

จากนั้นให้เปิด http://127.0.0.1:3080 ในเบราว์เซอร์ของคุณ หากพอร์ต 3080 ถูกใช้งานอยู่บนแล็ปท็อป ให้เปลี่ยนตัวเลขด้านซ้ายมือเป็น ssh -N -L 3180:127.0.0.1:3080 you@your-server แล้วเข้าใช้งานที่ http://127.0.0.1:3180 แทน ตัวเลขด้านซ้ายคือพอร์ตในเครื่องท้องถิ่น ส่วนตัวเลขด้านขวาคือพอร์ตบนเซิร์ฟเวอร์ ดังนั้นจึงเปลี่ยนเฉพาะตัวเลขด้านซ้ายเท่านั้น

บันทึกคำสั่งไว้ใน ~/.ssh/config เพื่อหลีกเลี่ยงการพิมพ์ซ้ำ

Host dsh
  HostName 203.0.113.10
  User deploy
  IdentityFile ~/.ssh/id_ed25519
  LocalForward 3080 127.0.0.1:3080

หลังจากนั้น ssh -N dsh จะเริ่มการทำงานของ tunnel หากเบราว์เซอร์แจ้งว่าการเชื่อมต่อถูกปฏิเสธ มักหมายความว่า tunnel ทำงานอยู่แต่ไม่มีบริการใดรอรับการเชื่อมต่อที่ฝั่งปลายทาง เนื่องจาก SSH จะส่งต่อพอร์ตให้ไม่ว่า harness จะทำงานอยู่หรือไม่ก็ตาม ให้ตรวจสอบเซิร์ฟเวอร์ด้วยคำสั่ง ss ที่ระบุไว้ข้างต้น

รักษาการทำงานของ harness ไว้หลังจากที่คุณออกจากระบบ

คำสั่ง npx จะยุติการทำงานพร้อมกับ shell ของคุณ แต่ systemd user service จะยังคงทำงานอยู่ และจะนำ harness กลับมาทำงานใหม่หลังจากเกิดการขัดข้องหรือการรีบูต

loginctl enable-linger $USER
mkdir -p ~/.config/systemd/user
command -v dsh

enable-linger มีความสำคัญเนื่องจากโดยปกติแล้ว user service จะหยุดทำงานเมื่อ session สุดท้ายของคุณสิ้นสุดลง ดังนั้นหากไม่มีการตั้งค่านี้ harness จะยุติการทำงานทันทีที่คุณปิด tunnel ให้นำ absolute path ที่แสดงโดย command -v dsh ไปใส่ไว้ใน unit เนื่องจาก systemd จะไม่ค้นหา PATH ที่ shell ของคุณสร้างขึ้นในขณะล็อกอิน

[Unit]
Description=DeepSeek Harness web UI
After=network-online.target

[Service]
Type=simple
WorkingDirectory=%h/projects/site
ExecStart=/usr/local/bin/dsh web
Restart=on-failure
RestartSec=5

[Install]
WantedBy=default.target

WorkingDirectory ไม่ใช่เรื่องของความสวยงาม กระบวนการ dsh จะใช้ไดเรกทอรีที่เรียกใช้งานเป็นตำแหน่งเริ่มต้นในระบบไฟล์ ดังนั้นหาก service ถูกเริ่มในตำแหน่งที่ไม่ถูกต้อง จะทำให้ agent ได้รับ workspace เริ่มต้นที่ไม่ถูกต้อง อย่างไรก็ตาม คุณยังสามารถเลือก workspace ใน UI ได้

systemctl --user daemon-reload
systemctl --user enable --now dsh
systemctl --user status dsh

unit ที่ไม่ยอมเริ่มทำงานมักเกิดจาก path ของ ExecStart ไม่ถูกต้อง หรือเป็น Node version ที่ binary ปฏิเสธการทำงาน ซึ่ง journalctl --user -u dsh -n 50 จะระบุชื่อที่ถูกต้องไว้ รูปแบบเดียวกันนี้ครอบคลุมถึง การรักษา coding agent ให้ทำงานอยู่บน VPS และรูปแบบความล้มเหลวก็เหมือนกันทุกประการ

สิ่งที่ปลั๊กอินสามารถทำได้

ปลั๊กอินคือโมดูลที่ทำหน้าที่เพิ่มบริการ, เหตุการณ์ที่มีการระบุประเภท (typed events) และผลลัพธ์ที่ย้อนกลับได้ (reversible effects) ให้กับบริบทที่ใช้ร่วมกัน จุดเชื่อมต่อส่วนขยาย (extension points) คือส่วนที่ควรศึกษาอย่างละเอียด:

  • ลงทะเบียนผู้ให้บริการโมเดล (model provider) บน ctx.llm
  • เพิ่มเครื่องมือสำหรับโมเดลบน ctx.tools
  • จัดเตรียม shell backend เบื้องหลัง ctx.shell
  • จัดเตรียมการเข้าถึงระบบไฟล์หรือนโยบายเบื้องหลัง ctx.fs
  • ลงทะเบียนคำสั่งสำหรับผู้ใช้บน ctx.commands
  • รันงานเบื้องหลังผ่าน ctx.jobs
  • ครอบกระบวนการที่ถูกเรียกใช้ (spawned processes) ด้วย backend ctx.sandbox
  • ดักจับคำขอและการเรียกใช้เครื่องมือผ่านเหตุการณ์ agent/* และ tools/*
  • ขยายสถานะเซสชันแบบถาวร (durable session state)
  • ควบคุม UI ผ่าน ctx.agents

ให้อ่านรายการข้างต้นในมุมมองของผู้โจมตี ปลั๊กอินสามารถจัดเตรียมเลเยอร์ระบบไฟล์และเลเยอร์ shell ได้ อีกทั้งยังสามารถแทรกตัวอยู่ตรงกลางของการเรียกใช้เครื่องมือทุกครั้งที่โมเดลทำ ไม่มีกล่องโต้ตอบขออนุญาตใดๆ กั้นระหว่างปลั๊กอินกับจุดเชื่อมต่อเหล่านี้ เนื่องจากปลั๊กอินเป็นเพียงโค้ด Node ปกติที่ถูกโหลดเข้าสู่กระบวนการเดียวกับส่วนอื่นๆ การติดตั้งปลั๊กอินจึงเท่ากับการรันโค้ดของบุคคลภายนอกด้วยสิทธิ์ของเอเจนต์ของคุณ และสิทธิ์ของเอเจนต์ของคุณก็คือสิทธิ์ของผู้ใช้ Unix ของคุณนั่นเอง

นี่คือการตัดสินใจเรื่องความเชื่อใจแบบเดียวกับที่คุณทำเมื่อเชื่อมต่อ MCP server เข้ากับเอเจนต์บน VPS โดยที่ MCP คือโปรโตคอลบริบทของโมเดล (Model Context Protocol) และนี่คือเหตุผลว่าทำไม การรันเอเจนต์เขียนโค้ดอย่างปลอดภัยบน VPS จึงต้องเริ่มต้นที่บัญชีผู้ใช้ที่รันโปรแกรมนั้นแทนที่จะเริ่มที่ตัวโมเดล และเหตุผลที่ การโจมตีผ่านห่วงโซ่อุปทานของ npm ส่งผลกระทบรุนแรงต่อเซิร์ฟเวอร์: ขั้นตอนการติดตั้งคือจุดที่เกิดการบุกรุก และไม่มีการแจ้งเตือนใดๆ ให้คุณทราบ

แหล่งที่มาของปลั๊กอิน

ปลั๊กอินจะอยู่ในโปรไฟล์ โดยโปรไฟล์คือชุดการตั้งค่าที่มีชื่อเรียกซึ่งจัดเก็บไว้ภายใต้ $DSH_HOME (ค่าเริ่มต้นคือ ~/.dsh) และไดเรกทอรีของแต่ละโปรไฟล์จะเก็บปลั๊กอินภายนอก (out-of-tree) ที่ติดตั้งไว้ CLI จะจัดการปลั๊กอินเหล่านี้โดยส่งต่ออาร์กิวเมนต์ของคุณไปยัง pnpm โดยตรง โดยใช้ไดเรกทอรีโปรไฟล์เป็นไดเรกทอรีทำงาน

dsh plugin --profile web add github:deepseek-harness/turtle-ui
dsh plugin --profile web remove turtle-ui

เนื่องจากอาร์กิวเมนต์ถูกส่งไปยัง pnpm โดยไม่มีการเปลี่ยนแปลง add, remove, update และ why จึงทำงานในลักษณะเดียวกับในโปรเจกต์ pnpm ทั่วไป และปลั๊กอินสามารถเป็นได้ทั้งแพ็กเกจ npm หรือการอ้างอิงจาก GitHub ทั้งนี้ pnpm จะต้องมีอยู่ใน PATH ก่อน สำหรับ Node 22 ขึ้นไป corepack enable pnpm จะทำหน้าที่เพิ่มเข้าไปให้

การค้นหาปลั๊กอินทำผ่าน GitHub topic ผู้พัฒนาปลั๊กอินจะเพิ่ม topic ชื่อ dsh-plugin ลงใน repository ของตน และการเรียกดู topic นั้นคือวิธีที่คุณจะพบว่ามีปลั๊กอินใดบ้าง topic คือป้ายกำกับที่ผู้พัฒนาติดไว้ที่ repository ของตนเอง ซึ่งไม่มีการตรวจสอบหรือลงนามรับรองใดๆ และหน้าแสดงรายการ topic จะเรียงลำดับตามจำนวนดาว ซึ่งเป็นการวัดความนิยมมากกว่าความปลอดภัย

แนวทางปฏิบัติ 4 ประการที่จะช่วยให้คุณจัดการเรื่องนี้ได้: อ่านซอร์สโค้ดก่อนติดตั้ง เนื่องจากปลั๊กอินส่วนใหญ่มีขนาดเล็กพอที่จะอ่านจบภายในสิบนาที, ระบุเวอร์ชันหรือ commit ที่แน่นอนแทนการติดตาม branch, รัน harness ภายใต้ผู้ใช้ที่ไม่มีสิทธิ์เข้าถึงข้อมูลอื่นบน VPS ที่คุณพร้อมจะล้างเครื่องติดตั้งใหม่ได้เสมอ และกำหนด API key เฉพาะสำหรับ agent พร้อมวงเงินการใช้งานที่แยกต่างหากจาก key ที่บริการในระบบ production ของคุณใช้งาน

หากคุณต้องการเปรียบเทียบการออกแบบก่อนตัดสินใจเลือก the Omnigent multi-agent harness คือทางเลือกที่ตอบโจทย์ปัญหาเดียวกันด้วยโครงสร้างที่แตกต่างกัน ซึ่งจะทำให้เห็นข้อดีข้อเสียชัดเจนขึ้นเมื่อเริ่มใช้งานปลั๊กอินจริง

สิ่งที่มักจะเกิดปัญหาเป็นอันดับแรก

Node มีเวอร์ชันเก่าเกินไป โปรเจกต์นี้กำหนดเป้าหมายที่ Node 22.19 และเวอร์ชันที่ใหม่กว่าในสาย 22.x หรือ Node 24 ขึ้นไป ซึ่งเป็นเวอร์ชันที่ใช้ในการทดสอบ CI หากใช้ runtime ที่เก่ากว่าจะทำให้เกิดความล้มเหลวขณะเริ่มทำงาน เนื่องจากโค้ดใช้ไวยากรณ์และ API ที่ไม่มีในเวอร์ชันนั้น ให้รัน node --version ก่อนดำเนินการอื่นใด

พอร์ต 3080 ถูกใช้งานอยู่ อาจเกิดจากมี harness ตัวที่สองทำงานค้างอยู่, กระบวนการที่หยุดทำงานไปแล้วแต่ยังไม่คืนพอร์ต หรือแอปพลิเคชันอื่นที่ใช้พอร์ต 3080 เช่นกัน ให้ค้นหาด้วย ss -tlnp | grep 3080 จากนั้นให้หยุดกระบวนการดังกล่าว หรือเริ่มการทำงานของ harness ที่พอร์ตอื่นด้วย dsh web --port 3180 โดย --port เป็นส่วนของเว็บแอปพลิเคชัน ดังนั้นจึงต้องรันหลังจาก web

เบราว์เซอร์ไม่สามารถเชื่อมต่อผ่านอุโมงค์ (tunnel) ได้ ตรวจสอบให้แน่ใจว่าคุณเข้าถึง 127.0.0.1 ไม่ใช่ที่อยู่สาธารณะของเซิร์ฟเวอร์ เนื่องจากพอร์ตที่ทำ forward ไว้จะมีอยู่เฉพาะบนแล็ปท็อปของคุณเท่านั้น จากนั้นตรวจสอบว่า harness กำลังฟังพอร์ตอยู่บนเซิร์ฟเวอร์จริงหรือไม่ เพราะ SSH จะทำการตั้งค่าการ forward ให้โดยไม่สนใจว่าปลายทางจะมีบริการตอบรับหรือไม่

dsh plugin ล้มเหลวทันที คำสั่งนี้เป็น wrapper ที่ครอบ pnpm อยู่ ดังนั้นหากไม่มีไฟล์ binary pnpm จะทำให้คำสั่งหยุดทำงานก่อนที่การทำงานของปลั๊กอินจะเริ่มขึ้น

เอเจนต์มองไม่เห็นโปรเจกต์ของคุณ workspace จะใช้ไดเรกทอรีที่กระบวนการเริ่มต้นทำงานเป็นค่าเริ่มต้น ดังนั้นหาก unit ใดมี WorkingDirectory เป็นไดเรกทอรี home ของคุณ เอเจนต์ก็จะมองเห็นเฉพาะไดเรกทอรี home ของคุณเท่านั้น ให้เลือก workspace ใน UI หรือแก้ไข unit ดังกล่าวแล้วโหลดใหม่

FAQ

การเปิดเผย DeepSeek Harness web UI บนพอร์ต 3080 ปลอดภัยหรือไม่?

ไม่ปลอดภัย เว็บเซิร์ฟเวอร์นี้ไม่มีระบบล็อกอินในตัว และเอเจนต์ที่ทำงานอยู่เบื้องหลังสามารถแก้ไขไฟล์และรันคำสั่ง shell ในฐานะผู้ใช้ที่เริ่มกระบวนการทำงานนั้น รวมถึงมีการจัดเก็บ API key ของผู้ให้บริการไว้ในดิสก์ด้วย ให้คงการตั้งค่า listener ไว้ที่ 127.0.0.1 และเข้าถึงผ่าน SSH tunnel เท่านั้น หรือจะใช้ private overlay network หรือ reverse proxy ที่มีการตรวจสอบสิทธิ์ทุกคำขอก่อนส่งไปยังพอร์ตดังกล่าวก็ได้ สำหรับเวอร์ชัน 0.1.0-rc.6 ตัว CLI จะปฏิเสธ --host 0.0.0.0 และหยุดทำงานพร้อมแสดงข้อผิดพลาดการใช้งาน ซึ่งสะท้อนให้เห็นว่าผู้พัฒนาคิดอย่างไรกับแนวคิดนี้

ฉันจำเป็นต้องใช้ DeepSeek API key หรือสามารถใช้โมเดลในเครื่องได้?

ใช้ได้ทั้งสองแบบ เนื่องจาก harness เป็นเพียง runtime ไม่ใช่ตัวโมเดล ภายใต้เมนู Settings แล้วเลือก Models คุณสามารถวางคีย์ลงในบัตรของผู้ให้บริการในแคตตาล็อก หรือเลือก "Add a custom provider" แล้วระบุ base URL ที่รองรับโปรโตคอลแบบเดียวกับ OpenAI ได้ เซิร์ฟเวอร์ Ollama ในเครื่องจะตอบสนองที่ http://127.0.0.1:11434/v1/ และยอมรับสตริงใดก็ได้ในช่อง API key โดยคีย์จะถูกบันทึกไว้ที่ $DSH_HOME/.credentials.yaml ซึ่งค่าเริ่มต้นคือ ~/.dsh/.credentials.yaml

การติดตั้งปลั๊กอิน DeepSeek Harness จะให้สิทธิ์อะไรแก่ปลั๊กอินบ้าง?

ปลั๊กอินจะได้รับสิทธิ์เดียวกับบัญชีผู้ใช้ที่รัน harness อยู่ เนื่องจากปลั๊กอินคือโค้ด Node ที่โหลดเข้าสู่กระบวนการทำงานเดียวกัน จุดเชื่อมต่อส่วนขยาย (extension points) จึงครอบคลุมถึง shell backend, เลเยอร์ของระบบไฟล์, tool registry และเหตุการณ์ที่ล้อมรอบการเรียกใช้เครื่องมือทุกอย่าง ไม่มีระบบ sandbox แยกปลั๊กอินออกจากส่วนเหล่านี้เว้นแต่ปลั๊กอินนั้นจะจัดเตรียม sandbox มาเอง โปรดอ่านซอร์สโค้ดก่อนทำการติดตั้ง และรัน harness ด้วยบัญชีผู้ใช้ที่ไม่มีไฟล์สำคัญใดๆ อยู่

ฉันควรติดตั้งเวอร์ชันใด และมันจะยังคงทำงานได้ต่อไปหรือไม่?

ควรติดตั้งเวอร์ชันที่ระบุเจาะจง เช่น npx @deepseek-ai/dsh@0.1.0-rc.6 web ซึ่งเป็นเวอร์ชันที่แท็ก latest ชี้ไปเมื่อวันที่ 13 สิงหาคม 2026 โครงการนี้ระบุว่าเป็นเพียงรุ่น developer preview และคาดว่าจะมีการเปลี่ยนแปลงที่ส่งผลต่อความเข้ากันได้ (breaking changes) ดังนั้นคำสั่งที่ไม่ได้ระบุเวอร์ชันอาจทำงานแตกต่างกันไปในแต่ละวัน โปรดตรวจสอบ repository ก่อนทำการอัปเกรด และเตรียมใจไว้ว่าคีย์การตั้งค่าและอินเทอร์เฟซของปลั๊กอินอาจมีการเปลี่ยนแปลงตราบเท่าที่เวอร์ชันยังคงขึ้นต้นด้วย 0

#deepseek#agent-harness#self-hosting#nodejs#plugins