Docker + Hermes Agent: สองวิธีในการใช้งาน
Event Hooks — Auto-Trigger at Key Moments — easy-to-understand guide based on official docs (updated 2026-08-09)
Docker + Hermes Agent: สองวิธีในการใช้งาน
หากคุณเคยสงสัยว่า Docker เข้ามาเกี่ยวข้องกับ Hermes Agent อย่างไร คุณมาถูกที่แล้ว จริงๆ แล้วมีสองวิธีที่ทั้งสองอย่างนี้ทำงานร่วมกันได้ และควรรู้ความแตกต่างก่อนที่คุณจะเริ่มพิมพ์คำสั่ง docker run
สองโหมดของ Docker
- รัน Hermes ใน Docker — ตัว agent เองอยู่ในคอนเทนเนอร์ นี่คือจุดโฟกัสหลักของคู่มือนี้
- ใช้ Docker เป็นเทอร์มินัลแบ็กเอนด์ — Hermes รันบนเครื่องโฮสต์ของคุณ แต่ทุกคำสั่งที่มันรันจะเกิดขึ้นภายใน Docker sandbox เดียวที่คงอยู่ตลอด sandbox นั้นจะอยู่รอดข้ามการเรียกใช้เครื่องมือ
/newและแม้แต่ซับเอเจนต์ ตราบใดที่กระบวนการ Hermes ยังทำงานอยู่
บทความนี้ครอบคลุมตัวเลือกที่ 1 สิ่งสำคัญที่ต้องรู้: ข้อมูลทั้งหมดของคุณ (คอนฟิก, คีย์ API, เซสชัน, สกิล, ความทรงจำ) อยู่ในไดเรกทอรีเดียวบนเครื่องโฮสต์ของคุณ ซึ่งถูกเมานต์ที่ /opt/data ภายในคอนเทนเนอร์ ตัวอิมเมจไม่มีสถานะ (stateless) ดังนั้นคุณสามารถดึงเวอร์ชันใหม่ได้ทุกเมื่อโดยไม่สูญเสียการตั้งค่าของคุณ
เริ่มต้นอย่างรวดเร็ว: การตั้งค่าครั้งแรก
หากนี่เป็นครั้งแรกของคุณ ให้สร้างไดเรกทอรีข้อมูลและเริ่มคอนเทนเนอร์แบบอินเทอร์แอคทีฟเพื่อรันตัวช่วยตั้งค่า:
mkdir -p ~/.hermes
docker run -it --rm \
-v ~/.hermes:/opt/data \
nousresearch/hermes-agent setup
คำสั่งนี้จะนำคุณเข้าสู่ตัวช่วยตั้งค่า ซึ่งจะถามคีย์ API ของคุณและเขียนลงใน ~/.hermes/.env คุณต้องทำเพียงครั้งเดียวเท่านั้น ระหว่างนั้น ก็เป็นโอกาสดีที่จะตั้งค่าระบบแชท (Telegram, Discord ฯลฯ) เพื่อให้เกตเวย์ของคุณมีที่สำหรับพูดคุย
⚠️ คำเตือน: หลีกเลี่ยงการใช้คอนโซล VPS บนเบราว์เซอร์สำหรับคำสั่งติดตั้งเหล่านี้ ผู้ให้บริการบางราย (เช่น Hetzner) ทำให้อักขระพิเศษเพี้ยนได้ —
:อาจกลายเป็น;,@อาจแสดงผลผิดเพี้ยน และคีย์ API ที่วางอาจเสียหายอย่างเงียบๆ ให้เชื่อมต่อผ่าน SSH เสมอ เพื่อการป้อนคำสั่งที่ปลอดภัยจากการคัดลอกวาง หากจำเป็นต้องใช้คอนโซลเบราว์เซอร์ ให้พิมพ์คำสั่งด้วยตนเองและตรวจสอบ:,@,=และ/ทุกตัวอีกครั้ง
เคล็ดลับมือโปร: ภายในคอนเทนเนอร์ ให้รัน hermes setup --portal สักครั้ง — รีเฟรชโทเคนจะถูกเก็บไว้ในวอลุ่ม ~/.hermes ที่คุณเมานต์ไว้
การรันในโหมดเกตเวย์
เมื่อตั้งค่าเสร็จแล้ว ให้รันคอนเทนเนอร์ในเบื้องหลังเป็นเกตเวย์ถาวร:
docker run -d \
--name hermes \
--restart unless-stopped \
-v ~/.hermes:/opt/data \
-p 8642:8642 \
nousresearch/hermes-agent gateway run
พอร์ต 8642 เปิดเผยเซิร์ฟเวอร์ API ที่เข้ากันได้กับ OpenAI ของเกตเวย์และเอนด์พอยต์สุขภาพ (health endpoint) พอร์ตนี้ไม่จำเป็นหากคุณใช้เฉพาะแพลตฟอร์มแชท แต่จำเป็นหากคุณต้องการแดชบอร์ดหรือเครื่องมือภายนอกเข้าถึงเกตเวย์
มีอะไรใหม่: เกตเวย์แบบซูเปอร์ไวซ์
นี่คือการเปลี่ยนแปลงครั้งใหญ่: ภายในอิมเมจ Docker อย่างเป็นทางการ gateway run ตอนนี้ ถูกซูเปอร์ไวซ์โดยอัตโนมัติด้วย s6-overlay หากเกตเวย์คราแชร์ มันจะรีสตาร์ทภายในไม่กี่วินาทีโดยไม่สูญเสียคอนเทนเนอร์ แดชบอร์ด (เมื่อเปิดใช้งาน) ก็ถูกซูเปอร์ไวซ์ควบคู่กันไปด้วย
คุณจะเห็นข้อความสั้นๆ หนึ่งบรรทัดใน docker logs ที่ยืนยันการอัปเกรดนี้ หากต้องการเลือกไม่ใช้และได้พฤติกรรมแบบเดิม (คอนเทนเนอร์ออก = เกตเวย์ออก) ให้ส่ง --no-supervise หรือตั้งค่า HERMES_GATEWAY_NO_SUPERVISE=1 สิ่งนี้มีประโยชน์สำหรับการทดสอบแบบ CI smoke test แต่สำหรับโปรดักชัน การซูเปอร์ไวซ์แบบค่าเริ่มต้นดีกว่าอย่างชัดเจน
การหยุดฮาร์ดสต็อปของ Tool-Loop
การตั้งค่าสำคัญอย่างหนึ่งสำหรับเกตเวย์ที่ทำงานแบบไม่มีคนดูแล: tool_loop_guardrails.hard_stop_enabled มีค่าเริ่มต้นเป็น false ซึ่งใช้ได้ดีสำหรับเซสชันอินเทอร์แอคทีฟที่มนุษย์สามารถเห็นคำเตือนได้ แต่ในการติดตั้งแบบไม่มีคนดูแล คำเตือนเพียงอย่างเดียวอาจไม่สามารถหยุด agent ที่ติดอยู่ในลูปได้ หากคุณต้องการพฤติกรรมแบบเซอร์กิตเบรกเกอร์ ให้เปิดใช้งานใน config.yaml ของโปรไฟล์คุณ:
tool_loop_guardrails:
hard_stop_enabled: true
hard_stop_after:
exact_failure: 5
idempotent_no_progress: 5
การเปิดเผยเซิร์ฟเวอร์ API
เซิร์ฟเวอร์ API ถูกจำกัดด้วย API_SERVER_ENABLED=true หากต้องการเปิดเผยเกินกว่า 127.0.0.1 ภายในคอนเทนเนอร์ ให้ตั้งค่า API_SERVER_HOST=0.0.0.0 และ API_SERVER_KEY ด้วย (อย่างน้อย 8 อักขระ — สร้างได้ด้วย openssl rand -hex 32):
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
หมายเหตุด้านความปลอดภัย: การเปิดพอร์ตใดๆ บนเครื่องที่เชื่อมต่ออินเทอร์เน็ตคือความเสี่ยง อย่าทำเว้นแต่คุณจะเข้าใจผลกระทบทั้งหมดอย่างถ่องแท้
การรันแดชบอร์ด
เว็บแดชบอร์ดในตัวทำงานเป็นบริการ s6-rc ที่ถูกซูเปอร์ไวซ์ควบคู่ไปกับเกตเวย์ในคอนเทนเนอร์เดียวกัน เพียงตั้งค่า HERMES_DASHBOARD=1:
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-supervise จะรีสตาร์ทโดยอัตโนมัติหลังจากหน่วงเวลาสั้นๆ เอาต์พุตของมันจะไปที่ docker logs <container>
โลโก้ไปอยู่ที่ไหน
สำหรับแผนผังการกำหนดเส้นทางทั้งหมด (เกตเวย์รายโปรไฟล์, แดชบอร์ด, boot reconciler และ docker logs ทั้งคอนเทนเนอร์) ให้ดูส่วนเฉพาะในเอกสารประกอบ เวอร์ชันสั้น: ทุกอย่างจะไปลงเอยที่ docker logs ในที่สุด แต่มีคำนำหน้าที่ชัดเจนเพื่อให้คุณแยกแยะได้ว่าอะไรเป็นอะไร
สรุป
Docker มอบวิธีที่สะอาดและอัปเกรดได้ในการรัน Hermes Agent คอนเทนเนอร์ไม่มีสถานะ ข้อมูลของคุณอยู่บนโฮสต์อย่างปลอดภัย และการซูเปอร์ไวซ์แบบ s6 ใหม่หมายความว่าเกตเวย์ของคุณจะยังคงทำงานต่อไปแม้จะคราแชร์ ไม่ว่าคุณจะรันการตั้งค่าแบบง่ายๆ หรือชุดแดชบอร์ด + เซิร์ฟเวอร์ API เต็มรูปแบบ คำสั่งข้างต้นจะพาคุณไปถึงที่นั่นได้ภายในไม่กี่นาที
📖 เอกสารทางการ
この記事は Hermes Agent のเอกสารทางการに基づいています:เอกสารทางการ › user-guide/features/hooks