AI-translated from English; not yet reviewed by a fluent editor.

# VPS पर एक Hermes Agent गेटवे चलाएँ और निजी Telegram उत्तर जाँचें

> Linux VPS पर संस्करण-जाँचा Hermes Docker गेटवे बनाएँ, एक निजी 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

![Conceptual charcoal illustration of one hand holding an unbranded phone with two blank message shapes on its screen.](https://bigchange.ai/api/media/file/hermes-private-reply-check-hero-v1.png)
AI-generated conceptual illustration by BIG CHANGE; no actual Telegram interface, Hermes deployment or observed reply is depicted.

निजी Telegram बॉट VPS एजेंट तक पहुँच आसान करता है, पर जुड़ा गेटवे सही व्यक्ति को उत्तर मिलने का प्रमाण नहीं। हम नए Hermes Agent डेटा फ़ोल्डर से शुरू कर एक संख्यात्मक Telegram ID स्वीकारते, असली उत्तर तथा सत्यापित रोक नियंत्रण जाँचते हैं। आधार NousResearch के [v0.22.2 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) हैं, जिन्हें 19 अक्टूबर 2026 को जाँचा। BIG CHANGE ने इस लेख के लिए VPS नहीं चलाया, इमेज नहीं खींची, बॉट नहीं बनाया, मॉडल कॉल नहीं किया।

## बड़ा बदलाव

- **क्या बदला:** डाइजेस्ट से तय, संस्करण-जाँची Docker इमेज और अलग `/opt/data` माउंट से इस गेटवे के सॉफ़्टवेयर व स्थिति की पहचान होती है।
- **यह क्यों महत्त्वपूर्ण है:** Telegram संख्यात्मक अनुमति सूची और असली निजी उत्तर बताते हैं कि सही खाता गेटवे इस्तेमाल कर सकता है या नहीं।
- **किन बातों पर ध्यान दें:** पेयरिंग या वैश्विक अनुमतियाँ पहुँच बढ़ा सकती हैं; निरापद अनुरोध एजेंट के टूल सीमित नहीं करता। अनुमतियाँ, लॉग, रीस्टार्ट व रोक जाँचें।

एक Linux VPS को SSH से प्रशासित करने का अधिकार, चालू Docker Engine और होस्ट पुनर्प्राप्ति पहुँच, BotFather से बॉट बनाने वाला Telegram खाता तथा योग्य Hermes मॉडल प्रदाता खाता चाहिए। VPS संरचना व संसाधन आधिकारिक amd64/arm64 इमेज से मिलाएँ; विज़ार्ड से पहले प्रदाता की पहुँच व बिल शर्तें देखें। Docker पहले से काम करता माना गया है; स्थापना व फ़ायरवॉल OS/प्रदाता पर निर्भर हैं। होस्ट से 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. प्रदाता और एक निजी प्रेषक सेट करें

माउंट किए फ़ोल्डर से [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 उपयोगकर्ता ID** पाएँ, जैसे [Telegram पुस्तिका](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/telegram.md) में जुड़े ID जाँच तरीके से। उपयोगकर्ता नाम ID नहीं। विज़ार्ड या `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 के लिए है; यहाँ हटाएँ क्योंकि निजी Telegram को सार्वजनिक 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 सेटअप में नीचे ऑफ़लाइन जाँच केवल तय Hermes CLI को UID 10000, बिना नेटवर्क और बिना गेटवे शुरू किए चलाती है। यह दस्तावेज़ी कमांड/प्रवेश का रूपांतरण है, BIG CHANGE का परीक्षण नहीं। चालू UID और डेटा स्वामी दोनों 10000 पुष्ट हों तभी चलाएँ। स्वामित्व, UID, CLI आउटपुट या अनुमति अस्पष्ट हो तो रोक बनाए रखें और रीस्टार्ट से पहले हल करें।

```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
```

अंतिम सूची में अनचाही ID न हो। निजी रूप से `$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 का VPS/बॉट संचालन रिकॉर्ड नहीं।

## Sources

- [Hermes Agent v0.22.2 रिलीज़](https://github.com/NousResearch/hermes-agent/releases/tag/v0.22.2) — रिलीज़ तारीख व दस्तावेज़ी बूट सक्रियता सुधार।
- [Hermes Docker सेटअप, 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) — मॉडल प्रदाता सेटअप का रास्ता।
