🤖HermesBlog
Hermes Official Tutorials · جزء 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 دائم. هذا رائع للأمان والعزل، لكنه موضوع ليوم آخر.

اليوم، نحن معنيون بالخيار الأول. جمال هذا النهج هو أن جميع بياناتك—الإعدادات، مفاتيح API، الجلسات، المهارات، والذكريات—تعيش في دليل واحد على جهازك المضيف، مثبّت داخل الحاوية في /opt/data. الحاوية نفسها عديمة الحالة، لذا يمكنك سحب نسخة جديدة والترقية دون فقدان أي شيء.

بداية سريعة: أول حاوية لك

إذا كنت جديدًا تمامًا على 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 وخادم نقطة الصحة للبوابة. إنه اختياري إذا كنت تستخدم منصات المحادثة فقط، لكنه مطلوب إذا كنت تريد لوحة المعلومات أو الأدوات الخارجية للوصول إلى بوابتك.

إليك ميزة جديدة رائعة: داخل صورة 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>.

ملاحظة حول حواجز حلقة الأدوات

للبوابات غير المراقبة، فكّر في تمكين التوقفات الصارمة لحواجز حلقة الأدوات. الافتراضي هو 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