AI-translated from English; not yet reviewed by a fluent editor.
# شغل بوابة Hermes Agent واحدة على VPS وتحقق من رد Telegram خاص
> جهز بوابة Hermes Docker متحققة الإصدار على Linux VPS، اسمح بمرسل خاص واحد في Telegram، وتحقق من رد حقيقي ثم إعادة التشغيل والتوقف.
By BIG CHANGE Editorial
Published: 2026-10-19T20:31:34.981Z
Updated: 2026-10-19T20:31:34.981Z
Canonical: https://bigchange.ai/blog/hermes-vps-docker-private-telegram-first-reply

AI-generated conceptual illustration by BIG CHANGE; no actual Telegram interface, Hermes deployment or observed reply is depicted.
يسهل بوت Telegram خاص الوصول لوكيل على VPS، لكن اتصال البوابة لا يثبت أن الشخص المقصود يتلقى ردا. نبدأ بدليل بيانات Hermes Agent جديد، نسمح بمعرف Telegram رقمي واحد ونفحص ردا فعليا ووسيلة توقف متحققة. نتبع [تعليمات Docker v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md) و [تعليمات Telegram](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/telegram.md) من NousResearch، فحصت في 19 أكتوبر 2026. لم تشغل BIG CHANGE خادما أو تسحب الصورة أو تنشئ بوتا أو تستدع نموذجا لهذا الدليل.
## التغيير الكبير
- **ما الذي تغير:** صورة Docker مثبتة بالبصمة ومتحققة الإصدار مع تركيب مخصص `/opt/data` تجعل برنامج البوابة وحالتها قابلين للتحديد.
- **لماذا يهم:** قائمة السماح الرقمية ورد خاص حقيقي يبينان إن كان الحساب المقصود يستطيع استخدامها.
- **ما ينبغي الانتباه إليه:** الاقتران والمنح العامة قد يوسعان الوصول، والطلب الآمن لا يقيد أدوات الوكيل. افحص المنح والسجلات وإعادة التشغيل والتوقف.
تحتاج صلاحية إدارة Linux VPS عبر SSH، وDocker Engine عامل ووصول لاسترداد المضيف، وحساب Telegram ينشئ بوت BotFather، وحساب مزود نموذج Hermes مؤهل. طابق البنية والموارد مع صورة amd64 أو arm64 الرسمية، وراجع الوصول والفوترة قبل المعالج. نفترض Docker عاملا؛ التثبيت والجدار الناري حسب النظام والمزود. يلزم اتصال صادر بـTelegram والمزود. خصص دليل حالة خاصا وحدد من يقرأه: `/opt/data` يحوي بيانات الاعتماد والجلسات والسجلات. [دليل Docker](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md) يسمي التركيب المصدر الدائم المعتمد للحالة.
## 1. ثبت الصورة قبل الإعداد
اتصل بـSSH وابق في الصدفة نفسها لهذه الأوامر. الوسم `stable` قد يتحرك. اسحب الصورة وسجل بصمة المستودع وتحقق من أن الصورة نفسها تبلغ الإصدار `0.22.2`. توقف عند اختلافه أو غياب البصمة أو وجود بيانات سابقة أو حاوية باسم `hermes`. حدث التعليمات للنسخة الفعلية أو احصل على صورة موثقة مطابقة قبل الاستمرار. البصمة تثبت الصورة ولا تثبت وحدها إصدارها.
```sh
set -eu
docker info >/dev/null
docker container inspect hermes >/dev/null 2>&1 && { echo 'Container hermes already exists; stop here.'; exit 1; }
HERMES_DATA="$HOME/.hermes"
if [ -e "$HERMES_DATA" ]; then echo 'Hermes data path already exists; stop here.'; exit 1; fi
mkdir -m 700 "$HERMES_DATA"
docker pull nousresearch/hermes-agent:stable
docker image inspect nousresearch/hermes-agent:stable --format '{{json .RepoDigests}}'
IMAGE_REF="$(docker image inspect nousresearch/hermes-agent:stable --format '{{index .RepoDigests 0}}')"
if ! printf '%s\n' "$IMAGE_REF" | grep -Eq '^nousresearch/hermes-agent@sha256:[0-9a-f]{64}$'; then
echo 'No valid repository digest; stop here.'; exit 1
fi
printf 'Pinned image: %s\n' "$IMAGE_REF"
VERSION_OUTPUT="$(docker run --rm "$IMAGE_REF" --version)"
printf 'Image version: %s\n' "$VERSION_OUTPUT"
if ! printf '%s\n' "$VERSION_OUTPUT" | grep -Eq '(^|[^0-9])v?0[.]22[.]2([^0-9]|$)'; then
echo 'Image version is not 0.22.2; stop here.'; exit 1
fi
```
`set -eu` يوقف تسلسل الصدفة عند تعذر Docker أو فشل السحب أو الفحص أو أمر الإصدار. تتوقف الاختبارات الصريحة أيضا عند بصمة فارغة أو إصدار مختلف. لا تكمل الإعداد بعد ذلك. احفظ قيمة `nousresearch/hermes-agent@sha256:…` المسجلة. الإعداد والبوابة يستخدمان `IMAGE_REF`، فلا يغير تحرك الوسم الحاوية خفية. هذه فحوص القارئ على VPS الفعلي؛ لا توجد بصمة متحققة في المقال. استخدم دليلا جديدا مخصصا على نظام ملفات المضيف الأصلي، ولا تشغل بوابتين على دليل البيانات نفسه.
## 2. أعد المزود ومرسل Telegram الخاص الواحد
شغل [معالج إعداد Docker](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md) بالدليل المركب. اختر مسار نموذج يسمح به الحساب، وأكمل المصادقة وافحص المزود/النموذج. الوصول والرسوم حسب الحساب. إعداد محفوظ لا يثبت نجاح طلب النموذج.
```sh
docker run -it --rm -v "$HERMES_DATA:/opt/data" "$IMAGE_REF" setup
```
في Telegram اطلب من [@BotFather](https://t.me/BotFather) بوتا عبر `/newbot` واحتفظ بالرمز سرا. احصل على **معرف Telegram الرقمي للمرسل**، مثلا بطريقة التحقق المرتبطة من [دليل Telegram](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/telegram.md)؛ اسم المستخدم ليس معرفا. المعالج أو `hermes gateway setup` يكتب الرمز والقائمة. يدويا، ضع `TELEGRAM_BOT_TOKEN=<private token>` و `TELEGRAM_ALLOWED_USERS=<your numeric ID>` في `$HERMES_DATA/.env` الذي يظهر باسم `/opt/data/.env` بالحاوية. لا تضع الرمز في الأوامر أو التاريخ أو الملاحظات المشتركة أو المقال.
في `$HERMES_DATA/config.yaml` (`/opt/data/config.yaml` داخل الحاوية)، حدد سلوك الرسائل الخاصة غير المصرح بها عالميا:
```yaml
unauthorized_dm_behavior: ignore
```
بعد خروج حاوية الإعداد، قد تنقل الصورة الرسمية ملكية `$HERMES_DATA` إلى UID التشغيل 10000. يقيد الإقلاع `.env` بالنمط `600` ويشدد ملف `config.yaml` الموجود إلى `640`؛ والتهيئة المنشأة لأول مرة آنذاك قد تحتاج التشديد نفسه. قد لا يفتح مستخدم SSH العادي الملفات. إن لم يضبط المعالج المفاتيح، يستطيع **مسؤول مضيف مخول** فحص وتعديل الملفين الدقيقين عبر `sudo` ثم إعادة ملكية التشغيل والأنماط الخاصة. محرر مضيف كـUID 10000 قد لا يعبر `$HOME` المملوك لحساب الدخول؛ لذا نستخدم إدارة المضيف. على مضيف فيه `sudo` و `vi` استخدمه بعد قراءة غير سرية للمالك والنمط. لا تكمل مع UID مختلف أو ملف ناقص؛ حل الوصول أولا.
```sh
sudo stat -c '%u:%g %a %n' "$HERMES_DATA" "$HERMES_DATA/.env" "$HERMES_DATA/config.yaml"
# Expected: directory owner 10000 and mode 700; .env owner 10000 and mode 600.
# config.yaml should have owner 10000; its first-boot mode can vary.
sudo vi "$HERMES_DATA/.env"
sudo vi "$HERMES_DATA/config.yaml"
sudo chown 10000:10000 "$HERMES_DATA/.env" "$HERMES_DATA/config.yaml"
sudo chmod 700 "$HERMES_DATA"
sudo chmod 600 "$HERMES_DATA/.env"
sudo chmod 640 "$HERMES_DATA/config.yaml"
sudo stat -c '%u:%g %a %n' "$HERMES_DATA" "$HERMES_DATA/.env" "$HERMES_DATA/config.yaml"
```
يجب أن يعرض خرج `stat` الأخير UID/GID 10000 للملفين ونمط الدليل `700`, `.env` بالنمط `600` و `config.yaml` بالنمط `640`. هذه بيانات وصفية وليست أسرارا. يستهدف `chown` هذين الملفين فقط، بما فيه بديل المحرر. إن غاب `sudo` أو `vi`، اتبع إدارة المضيف المخولة مع القراءة نفسها. لا تجعل الحالة مقروءة للجميع ولا تعد تعيين مستخدم الحاوية.
احفظ إعدادات المزود عند التعديل. لا ينبغي لتجاوز Telegram الخاص لـ `unauthorized_dm_behavior` أن يحدد `pair`، ولا لإعداد عام `GATEWAY_ALLOWED_USERS` أو `GATEWAY_ALLOW_ALL_USERS` توسيع الوصول. في `config.yaml` تحقق أيضا من أن كلا من `gateway.allow_all_users` والإعداد الأعلى `allow_all_users` ليس true، ولا يوجد مرسل إضافي في القوائم العامة أو Telegram. لا تستخدم `*` بالقوائم أو تضف مجموعات أو توافق رموز اقتران. الجديد يتجنب المنح الموروثة؛ إذا وجدت بيانات فتوقف وافحص دون استبدال. أبق خصوصية مجموعات BotFather مفعلة، ولا تضف البوت لمجموعة أو تجعله مسؤولا. يوضح [دليل وصول البوابة](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/index.md) أن القوائم والمنح الدائمة للاقتران مساران منفصلان. يصف [دليل الأمان](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/security.md) الخيار `ignore` بأنه إسقاط صامت لرسائل غير المصرح لهم.
القائمة تضبط من يبدأ محادثة لا ما يستطيع الوكيل المخول فعله. جلسات Hermes Telegram تشمل أدوات طرفية افتراضيا. راجع الأدوات وتركيبات Docker والمزود وسياسة المضيف قبل السماح. الطلب الاختباري الآمن مجرد طلب.
## 3. ابدأ وتحقق من الرد الأول
ابدأ حاوية مسماة واحدة من البصمة المسجلة. أمر Docker المنشور يحوي `-p 8642:8642` اختياريا للـAPI؛ احذفه هنا لأن الرسالة الخاصة لا تحتاج API أو منفذ لوحة عامة. تشرف الصورة على العملية، وسياسة Docker `unless-stopped` تحكم إعادة الحاوية عند بدء Docker. يحفظ الدليل الإعدادات والجلسات عبر إعادة التشغيل.
```sh
docker run -d --name hermes --restart unless-stopped \
-v "$HERMES_DATA:/opt/data" "$IMAGE_REF" gateway run
if ! {
docker inspect hermes --format '{{.Image}} {{.State.Status}}' &&
[ "$(docker inspect hermes --format '{{.State.Status}}')" = running ] &&
docker logs --tail 50 hermes &&
docker exec -u hermes hermes hermes pairing list
}; then
echo 'State, logs or pairing check failed; stopping before any message.'
docker stop hermes || true
docker inspect hermes --format '{{.State.Status}}' || true
exit 1
fi
```
أكد أن الحاوية `running`، افحص اتصال Telegram وأخطاء المزود بالسجلات، واقرأ الاقتران قبل الطلب. عند فشل القراءة الأولى يوقف الكود البوابة ويطبع الحالة؛ نتيجة CLI أو منح مجهولة ليست تصريحا. أكد `exited` قبل التحقيق ولا ترسل أو تعيد التشغيل في الغموض. يجب ألا يوجد مرسل آخر معتمد؛ إن وجد فتوقف وافحص حالة التوقف. `docker exec` لا يعمل على حاوية متوقفة، والدخول العادي للصورة قد يعيد بوابة كانت تعمل. في تثبيت جديد بالـUID الافتراضي، يشغل الفحص دون اتصال CLI Hermes المثبت فقط كـUID 10000 بلا شبكة وبلا تشغيل البوابة. هو تكييف للأوامر والدخول الموثقين، لا اختبار BIG CHANGE. استخدمه فقط بعد تأكيد UID العامل ومالك البيانات 10000. إذا غمضت الملكية أو UID أو الخرج أو المنح فاتركها متوقفة وحل ذلك قبل إعادة التشغيل.
```sh
if [ "$(docker exec -u hermes hermes id -u)" != 10000 ] || [ "$(stat -c %u "$HERMES_DATA")" != 10000 ]; then
echo 'Runtime UID or data owner differs; stop for a host-specific repair.'; docker stop hermes; exit 1
fi
docker stop hermes
if [ "$(docker inspect hermes --format '{{.State.Status}}')" != exited ]; then
echo 'Container is not exited; do not mount state in another container.'; exit 1
fi
docker run --rm --network none --user 10000:10000 \
--entrypoint /opt/hermes/.venv/bin/hermes \
-v "$HERMES_DATA:/opt/data" "$IMAGE_REF" pairing list
# For a listed unwanted Telegram user, read the exact numeric ID first:
printf 'Unwanted numeric Telegram user ID: '; IFS= read -r UNWANTED_ID
if ! printf '%s\n' "$UNWANTED_ID" | grep -Eq '^[0-9]+$'; then echo 'Invalid ID; leave gateway stopped.'; exit 1; fi
docker run --rm --network none --user 10000:10000 \
--entrypoint /opt/hermes/.venv/bin/hermes \
-v "$HERMES_DATA:/opt/data" "$IMAGE_REF" pairing revoke telegram "$UNWANTED_ID"
docker run --rm --network none --user 10000:10000 \
--entrypoint /opt/hermes/.venv/bin/hermes \
-v "$HERMES_DATA:/opt/data" "$IMAGE_REF" pairing list
```
أكد غياب المعرف غير المرغوب من القائمة النهائية. افحص سرا `$HERMES_DATA/.env` و `config.yaml` بحثا عن قوائم أخرى عامة أو للمنصة، `*` أو إعداد السماح للجميع، وأزل المنح غير المرغوبة بالمسار الموثق. تبقى البوابة متوقفة حتى فحص كل الطرق. إزالة إدخال لا تلغي اقترانا مستقلا أو منحة عامة. بعد التحقق، `docker start hermes` يعيد الحاوية الأصلية عمدا؛ افحص السجلات والاقتران مجددا قبل الرسائل.
من الحساب المسموح، افتح محادثة **خاصة** مع البوت وأرسل طلبا آمنا مثل «أجب بتحية قصيرة». تحقق من رد حقيقي وسجله أو جلسته. الإرسال ومؤشر الكتابة والحالة واكتمال الإعداد ليست ردا. أمر Telegram `/whoami` يبين نطاق الرسائل النشط، لا إذن المضيف. احفظ أدلة غير حساسة فقط.
دون رد، اقرأ الحالة و `docker logs --tail 50 hermes` أولا. افحص الرمز والقيمة الرقمية الدقيقة لـ `TELEGRAM_ALLOWED_USERS` ومصادقة المزود وأهلية الاستخدام والخروج الشبكي. إذا غمضت الجولة فاقرأ المحادثة والسجلات قبل الإعادة. الإقلاع البارد قد يسقط تحديثات معلقة ومنع التكرار محدود بالذاكرة. لا ضمان لتسليم مرة واحدة بالضبط.
## 4. افحص إعادة التشغيل والتوقف والاسترداد
بعد انتهاء الجولة الأولى أعد الحاوية نفسها وافحص السجلات الجديدة وحالة `/opt/data` المحتفظ بها، ثم أرسل طلبا خاصا آمنا **جديدا** وتحقق من الرد. أوقف واقرأ حالة Docker. `exited` هو إشارة التوقف؛ صمت المحادثة لا يكفي. `docker start hermes` هو الاستئناف المقصود لاحقا.
```sh
docker restart hermes
docker logs --tail 50 hermes
docker inspect hermes --format '{{.State.Status}}'
# After the restarted gateway is ready, send a new private test message.
docker stop hermes
docker inspect hermes --format '{{.State.Status}}'
# Expected after stop: exited
# When intentionally resuming later: docker start hermes
```
عند فشل البدء افحص Docker والسجلات ثم `$HERMES_DATA/logs/gateways/default/current` و `$HERMES_DATA/logs/container-boot.log` والتركيب والملكية والصورة/الإصدار المثبت. تشرح [ملاحظات v0.22.2](https://github.com/NousResearch/hermes-agent/releases/tag/v0.22.2) إصلاح حيوية الإقلاع ولا تثبت ما حدث بمضيفك. لا تحذف الحالة للإصلاح. إذا تسرب الرمز فتوقف وأبطله في BotFather واستبدله سرا في الملف المركب `.env` ثم افحص الوصول قبل البدء. ألغ أيضا الاقتران غير المرغوب وافحص القوائم الفعلية.
قد يتقاضى VPS والنموذج رسوما منفصلة. راجع الخطة والحدود والرسوم؛ لا وعد بوقت أو حصة مجانية أو توافر. تعالج Telegram والمزود الرسائل ويحتفظ المضيف بالأسرار والحالة. هذا أول رد لمضيف وبوت واحدين. أدلة BIG CHANGE الأخرى تغطي [نسخ Hermes الاحتياطي واسترداده](https://bigchange.ai/blog/hermes-encrypted-github-backup-recovery-guide) و [مهمة Hermes دورية](https://bigchange.ai/blog/hermes-skill-recurring-job-first-run).
## المصادر وقراءات إضافية
مواد [إعداد Docker](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md), [إعداد Telegram](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/telegram.md), [وصول البوابة](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/index.md), [الأمان](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/security.md) و [إصدار v0.22.2](https://github.com/NousResearch/hermes-agent/releases/tag/v0.22.2) مصادر أولية من NousResearch. يشرح [البدء السريع](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/getting-started/quickstart.md) إعداد المزود. هذه وثائق إجراء لا سجل تشغيل BIG CHANGE لخادم أو بوت.
## Sources
- [إصدار Hermes Agent v0.22.2](https://github.com/NousResearch/hermes-agent/releases/tag/v0.22.2) — التاريخ وإصلاح حيوية الإقلاع الموثق.
- [إعداد Docker لـHermes، v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md) — قنوات الصور والتركيب والإعداد والإشراف والمنفذ والسجلات.
- [Dockerfile الرسمي، v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/Dockerfile) — الدخول وUID التشغيل وHERMES_HOME ومسار CLI لفحص الاقتران المحدود دون اتصال.
- [خطاف مرحلة Docker الثانية، v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/docker/stage2-hook.sh) — ملكية البيانات وأذونات .env/config بعد الإعداد.
- [إعداد Telegram، v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/telegram.md) — BotFather والرمز والقائمة الرقمية والخصوصية وحدود التسليم.
- [المراسلة والبوابة، v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/index.md) — الوصول الفعلي وقراءة الاقتران وإبطاله.
- [الأمان، v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/security.md) — الرسائل الخاصة غير المصرح بها وحدود الوصول.
- [البدء السريع، v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/getting-started/quickstart.md) — مسار إعداد مزود النموذج.
نشرة BIG CHANGE البريدية
الصورة الأوسع. على وتيرتك.
قصص حديثة عن الذكاء الاصطناعي والروبوتات، وتحولات تستحق المتابعة، وأفكار عملية للتطبيق. اختر موجزًا يوميًا أو خلاصة أسبوعية أو رؤية شهرية.
Next scheduled send (UTC): . Your first edition arrives at the next scheduled send after you confirm.
خصوصيتك، خيارك.
يساعد التخزين الضروري على حماية الموقع وتذكّر خياراتك. تظل Google Analytics الاختيارية متوقفة حتى تسمح بها. يمكنك قراءة كل قصة باستخدام التخزين الضروري فقط. تفاصيل الخصوصية