🤖HermesBlog
Hermes Official Tutorials · Parte 168/9/2026

บทช่วยสอน 16: การปรับใช้ด้วย Docker

Tutorial 16: Docker Deployment — easy-to-understand guide based on official docs

Hermes tutorial

บทช่วยสอน 16: การปรับใช้ด้วย Docker

ยินดีต้อนรับกลับมา นักสำรวจ Hermes ทุกคน! ในบทช่วยสอนที่แล้ว เราได้ทำความคุ้นเคยกับการรัน Hermes Agent บนเครื่องของเราโดยตรง วันนี้เราจะยกระดับขึ้นไปอีกขั้น: เราจะนำ Hermes ไปไว้ในคอนเทนเนอร์ Docker นี่คือตัวเปลี่ยนเกมสำหรับการทำให้การตั้งค่าของคุณสะอาด พกพาได้ และอัปเกรดง่าย

สองวิธีที่ Docker พบกับ Hermes

ก่อนที่เราจะลงลึก สิ่งสำคัญคือต้องเข้าใจว่า Docker และ Hermes Agent สามารถทำงานร่วมกันได้สองวิธีที่แตกต่างกัน:

  1. การรัน Hermes ใน Docker – ตัวเอเจนต์เองอาศัยอยู่ภายในคอนเทนเนอร์ นี่คือสิ่งที่เราจะโฟกัสในวันนี้
  2. Docker เป็นแบ็กเอนด์เทอร์มินัล – Hermes รันบนโฮสต์ของคุณ แต่ทุกคำสั่งที่มันรันจะเกิดขึ้นภายในแซนด์บ็อกซ์ Docker แบบถาวร วิธีนี้ยอดเยี่ยมสำหรับความปลอดภัยและการแยกส่วน แต่เป็นหัวข้อสำหรับวันอื่น

วันนี้เราจะพูดถึงตัวเลือกที่ 1 ทั้งหมด จุดเด่นของวิธีนี้คือข้อมูลทั้งหมดของคุณ—คอนฟิก คีย์ API เซสชัน สกิล และความทรงจำ—อยู่ในไดเรกทอรีเดียวบนโฮสต์ของคุณ ซึ่งถูกเมานต์เข้าไปในคอนเทนเนอร์ที่ /opt/data ตัวคอนเทนเนอร์เองไม่มีสถานะ (stateless) ดังนั้นคุณสามารถดึงเวอร์ชันใหม่และอัปเกรดได้โดยไม่สูญเสียอะไรเลย

เริ่มต้นอย่างรวดเร็ว: คอนเทนเนอร์แรกของคุณ

หากคุณเพิ่งเริ่มใช้ Hermes เส้นทางที่ง่ายที่สุดคือการสร้างไดเรกทอรีข้อมูลและรันวิซาร์ดการตั้งค่าแบบโต้ตอบ วิซาร์ดจะแนะนำคุณผ่านการป้อนคีย์ API และบันทึกลงใน ~/.hermes/.env

mkdir -p ~/.hermes
docker run -it --rm \
  -v ~/.hermes:/opt/data \
  nousresearch/hermes-agent setup

ข้อควรระวัง: หลีกเลี่ยงคอนโซล VPS บนเบราว์เซอร์ (เช่นของ Hetzner Cloud) สำหรับคำสั่งเหล่านี้ เพราะมักจะทำให้อักขระพิเศษอย่าง :, @, และ = เพี้ยนไป ซึ่งอาจทำให้อาร์กิวเมนต์ docker run ของคุณเสียหายอย่างเงียบ ๆ ให้เชื่อมต่อผ่าน SSH (ssh root@<host>) เสมอเพื่อการวางโค้ดที่ปลอดภัย หากจำเป็นต้องใช้คอนโซลบนเบราว์เซอร์ ให้พิมพ์คำสั่งด้วยตนเองและตรวจสอบทุกตัวอักษรอีกครั้ง

เมื่อคุณอยู่ในวิซาร์ดแล้ว แนะนำอย่างยิ่งให้ตั้งค่าระบบแชท (Telegram, Discord ฯลฯ) เพื่อให้เกตเวย์ของคุณมีที่สำหรับส่งข้อความ

การรันในโหมดเกตเวย์

เมื่อตั้งค่าเสร็จแล้ว คุณจะต้องรัน Hermes เป็นเกตเวย์พื้นหลังแบบถาวร นี่คือวิธีที่มันเชื่อมต่อกับแพลตฟอร์มแชทของคุณและทำงานตลอด 24/7

docker run -d \
  --name hermes \
  --restart unless-stopped \
  -v ~/.hermes:/opt/data \
  -p 8642:8642 \
  nousresearch/hermes-agent gateway run

แฟล็ก -p 8642:8642 เปิดเผยเซิร์ฟเวอร์ API ที่เข้ากันได้กับ OpenAI ของเกตเวย์และเอนด์พอยต์สุขภาพ (health endpoint) แฟล็กนี้เป็นตัวเลือกหากคุณใช้เฉพาะแพลตฟอร์มแชท แต่จำเป็นหากคุณต้องการแดชบอร์ดหรือเครื่องมือภายนอกเข้าถึงเกตเวย์ของคุณ

นี่คือฟีเจอร์ใหม่เจ๋ง ๆ: ภายในอิมเมจ Docker อย่างเป็นทางการ gateway run ตอนนี้ถูกดูแลโดย s6-overlay โดยอัตโนมัติ ซึ่งหมายความว่าหากกระบวนการเกตเวย์ล่ม มันจะถูกรีสตาร์ทภายในไม่กี่วินาทีโดยไม่สูญเสียคอนเทนเนอร์ คุณจะเห็นร่องรอยใน docker logs ที่ยืนยันการอัปเกรด หากคุณต้องการพฤติกรรมแบบเดิม (ที่คอนเทนเนอร์ออกเมื่อเกตเวย์ออก) ให้ส่ง --no-supervise หรือตั้งค่า HERMES_GATEWAY_NO_SUPERVISE=1 สำหรับการใช้งานในโปรดักชัน ค่าเริ่มต้นแบบมีผู้ดูแลนั้นดีกว่าอย่างชัดเจน

การเปิดเผยเซิร์ฟเวอร์ API

โดยค่าเริ่มต้น เซิร์ฟเวอร์ API จะถูกจำกัดด้วย API_SERVER_ENABLED=true เพื่อเปิดเผยมันเกินกว่า 127.0.0.1 ภายในคอนเทนเนอร์ คุณจะต้องตั้งค่าตัวแปรสภาพแวดล้อมสองสามตัว:

docker run -d \
  --name hermes \
  --restart unless-stopped \
  -v ~/.hermes:/opt/data \
  -p 8642:8642 \
  -e API_SERVER_ENABLED=true \
  -e API_SERVER_HOST=0.0.0.0 \
  -e API_SERVER_KEY="$(openssl rand -hex 32)" \
  -e API_SERVER_CORS_ORIGINS='*' \
  nousresearch/hermes-agent gateway run

API_SERVER_KEY ต้องมีความยาวอย่างน้อย 8 ตัวอักษร—สร้างด้วย openssl rand -hex 32 สำคัญ: การเปิดพอร์ตใด ๆ บนเครื่องที่เชื่อมต่ออินเทอร์เน็ตคือความเสี่ยงด้านความปลอดภัย อย่าทำเว้นแต่คุณจะเข้าใจผลกระทบอย่างถ่องแท้

การรันแดชบอร์ด

ต้องการแดชบอร์ดเว็บเพื่อตรวจสอบเกตเวย์ของคุณหรือไม่? ตั้งค่า HERMES_DASHBOARD=1 และเปิดพอร์ต 9119:

docker run -d \
  --name hermes \
  --restart unless-stopped \
  -v ~/.hermes:/opt/data \
  -p 8642:8642 \
  -p 9119:9119 \
  -e HERMES_DASHBOARD=1 \
  nousresearch/hermes-agent gateway run

แดชบอร์ดก็ถูกดูแลโดย s6 เช่นกัน ดังนั้นมันจะรีสตาร์ทอัตโนมัติหากล่ม ผลลัพธ์ของมันจะไปที่ docker logs <container>

หมายเหตุเกี่ยวกับการ์ดป้องกันลูปเครื่องมือ (Tool-Loop Guardrails)

สำหรับเกตเวย์ที่ทำงานโดยไม่มีคนดูแล ให้พิจารณาเปิดใช้งานการหยุดแบบฮาร์ดสำหรับการ์ดป้องกันลูปเครื่องมือ ค่าเริ่มต้นคือ false ซึ่งใช้ได้ดีสำหรับเซสชันแบบโต้ตอบที่มนุษย์สามารถเห็นคำเตือนได้ แต่ในเกตเวย์ที่ไม่มีคนดูแล เอเจนต์ที่ติดอยู่ในลูปอาจไม่มีวันหยุด เพิ่มสิ่งนี้ลงใน config.yaml ของโปรไฟล์คุณ:

tool_loop_guardrails:
  hard_stop_enabled: true
  hard_stop_after:
    exact_failure: 5
    idempotent_no_progress: 5

สรุป

นี่คือเรื่องราวการปรับใช้ด้วย Docker! ตอนนี้คุณมีคอนเทนเนอร์แบบไม่มีสถานะที่อัปเกรดได้ โดยมีข้อมูลทั้งหมดของคุณถูกเมานต์อย่างปลอดภัยบนโฮสต์ ในบทช่วยสอนถัดไป เราจะสำรวจแดชบอร์ดในรายละเอียดมากขึ้น เจอกันใหม่บทหน้า ขอให้มีความสุขกับการทำคอนเทนเนอร์!

📖 เอกสารทางการ

この記事は Hermes Agent のเอกสารทางการに基づいています:เอกสารทางการ › user-guide/docker