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

# Patakbuhin ang isang Hermes Agent gateway sa VPS at suriin ang pribadong sagot sa Telegram

> Maghanda ng version-checked Hermes Docker gateway sa Linux VPS, payagan ang isang pribadong Telegram sender, tiyakin ang tunay na sagot at suriin ang restart at stop controls.

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.

Maginhawang daan ang pribadong Telegram bot sa agent sa VPS, ngunit hindi sapat ang connected gateway upang patunayang masasagot ang tamang tao. Nagsisimula ito sa bagong Hermes Agent data directory, nagpapahintulot sa isang numeric Telegram ID, nagsusuri ng tunay na sagot at nag-iiwan ng napatunayang paraan ng paghinto. Sinusunod nito ang [Docker instructions v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md) at [Telegram instructions](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/telegram.md) ng NousResearch, sinuri noong 19 Oktubre 2026. Hindi nagpatakbo ng VPS, nag-pull ng image, gumawa ng bot o tumawag ng model ang BIG CHANGE para rito.

## Ang malaking pagbabago

- **Ano ang nagbago:** Ang digest-pinned, version-checked Docker image at nakalaang mount na `/opt/data` ang nagpapakilala sa software at estado ng gateway na ito.
- **Bakit mahalaga:** Ang numeric Telegram allowlist at tunay na pribadong sagot ang nagpapakita kung magagamit ng tamang account ang gateway.
- **Dapat bantayan:** Maaaring palawakin ng pairing o global grants ang access. Hindi nililimitahan ng harmless prompt ang tools ng agent. Suriin ang grants, logs, restart at stopped state.

Kailangan ang awtoridad na mangasiwa ng Linux VPS sa SSH, gumaganang Docker Engine at host recovery access, Telegram account na makakagawa ng BotFather bot, at kuwalipikadong Hermes model-provider account. Ihambing ang arkitektura at resources sa opisyal na amd64 o arm64 image at suriin ang access at singil bago ang wizard. Ipinapalagay na gumagana na ang Docker; nakadepende sa OS at provider ang pag-install at firewall. Kailangan ang outbound access sa Telegram at model provider. Maglaan ng pribadong state directory at limitahan ang makakabasa: `/opt/data` ang maglalaman ng credentials, session at logs. [Ang Docker manual](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md) ang tumutukoy rito bilang permanenteng pangunahing tala ng estado.

## 1. I-pin ang image bago mag-setup

Kumonekta sa SSH at manatili sa parehong shell. Maaaring gumalaw ang tag na `stable`. I-pull, itala ang repository digest at tiyaking mismong image ang nag-uulat ng bersiyong `0.22.2`. Huminto kung iba ang bersiyon, walang digest, may lumang state o may container nang `hermes` ang pangalan. I-update ang gabay sa tunay na bersiyon o kumuha ng katugmang dokumentadong image bago magpatuloy. Tinutukoy ng digest ang image, ngunit hindi nito nag-iisa pinatutunayan ang release version.

```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` ang humihinto sa shell sequence kung walang Docker, pumalya ang pull/inspect o version command. Hihinto rin ang tahasang check kapag walang digest o iba ang bersiyon. Huwag mag-setup pagkatapos ng ganoong resulta. Panatilihin ang nakatalang `nousresearch/hermes-agent@sha256:…` value. Parehong ginagamit ng setup at gateway sa ibaba ang `IMAGE_REF`, kaya hindi palihim na magbabago ang container kapag gumalaw ang tag. Gawin ang mga check sa tunay na VPS; walang verified image digest sa artikulo. Gumamit ng bagong dedicated directory sa native filesystem ng host. Huwag magpatakbo ng dalawang gateway sa iisang data directory.

## 2. I-configure ang provider at isang pribadong sender

Patakbuhin ang [Docker setup wizard](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md) gamit ang mounted directory. Pumili ng model route na pinapayagan ng account, mag-authenticate at suriin ang provider/model setting. Nakadepende sa account ang access at singil. Hindi patunay ng matagumpay na request ang naka-save na setting.

```sh
docker run -it --rm -v "$HERMES_DATA:/opt/data" "$IMAGE_REF" setup
```

Sa Telegram, humiling kay [@BotFather](https://t.me/BotFather) ng bot gamit ang `/newbot` at ilihim ang token. Kunin ang **numeric Telegram user ID ng sender**, halimbawa sa paraang naka-link sa [Telegram manual](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/telegram.md); hindi ID ang username. Maaaring isulat ng wizard o `hermes gateway setup` ang token at allowlist. Kung manu-mano, ilagay ang `TELEGRAM_BOT_TOKEN=<private token>` at `TELEGRAM_ALLOWED_USERS=<your numeric ID>` sa `$HERMES_DATA/.env`, na makikita bilang `/opt/data/.env` sa container. Huwag ilagay ang token sa command, shell history, shared note o artikulong ito.

Sa `$HERMES_DATA/config.yaml` (`/opt/data/config.yaml` sa container), itakda ang global behavior para sa unauthorized private message:

```yaml
unauthorized_dm_behavior: ignore
```

Paglabas ng setup container, maaaring nailipat ng opisyal na image ang `$HERMES_DATA` sa runtime UID 10000. Nililimitahan ng bootstrap ang `.env` sa mode `600` at hinihigpitan ang umiiral na `config.yaml` sa `640`; maaaring kailangan din iyon ng config na unang nilikha sa boot na iyon. Maaaring hindi mabuksan ng ordinaryong SSH login ang mga file. Kung hindi naitakda ng wizard ang keys, maaaring ang **awtorisadong host administrator** ang tumingin at mag-edit sa dalawang eksaktong file gamit ang `sudo`, saka ibalik ang runtime owner at pribadong modes. Maaaring hindi matawid ng host editor na UID 10000 ang login-owned `$HOME`, kaya host admin access ang gamit. Sa host na may `sudo` at `vi`, gamitin lamang matapos ang nonsecret owner/mode readback. Huwag magpatuloy kung iba ang UID o kulang ang file; lutasin muna ang host access.

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

Dapat ipakita ng huling `stat` ang UID/GID 10000 sa parehong file, directory mode `700`, `.env` mode `600` at `config.yaml` mode `640`; metadata ito, hindi credentials. Dalawang file lang ang target ng `chown`, kasama ang replacement ng editor. Kung walang `sudo` o `vi`, gumamit ng awtorisadong admin procedure na may parehong owner at mode readback. Huwag gawing world-readable ang state o i-remap ang container user para rito.

Panatilihin ang provider settings habang nag-eedit. Tiyaking walang Telegram-specific override ng `unauthorized_dm_behavior` na nagtatakda ng `pair`, at walang global `GATEWAY_ALLOWED_USERS` o `GATEWAY_ALLOW_ALL_USERS` na nagbibigay ng mas malawak na access. Sa `config.yaml`, tiyaking hindi true ang `gateway.allow_all_users` o ang top-level `allow_all_users`, at walang dagdag na sender sa global o Telegram allowlist. Huwag gumamit ng `*` sa allowlist, magdagdag ng group allowlist o mag-apruba ng pairing code. Iniiwasan ng bagong directory ang lumang grants; kung may data na, huminto at inspeksiyunin sa halip na patungan. Panatilihing enabled ang BotFather group privacy; huwag isali ang bot sa grupo o gawing admin nito. Ipinapaliwanag ng [gateway access manual](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/index.md) na magkahiwalay na daan ang allowlist at permanenteng pairing grant. Inilalarawan ng [security manual](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/security.md) ang `ignore` bilang tahimik na pagtatapon ng unauthorized private message.

Kinokontrol ng allowlist kung sino ang makakapagsimula ng usapan, hindi ang magagawa ng pinayagang agent. May terminal tools ang Hermes Telegram session bilang default. Suriin ang tool permissions, mounts, provider access at host policy bago magpapasok. Test prompt lamang ang harmless prompt.

## 3. Simulan at suriin ang unang sagot

Magsimula ng isang pinangalanang container mula sa recorded digest. May opsiyonal na `-p 8642:8642` sa opisyal na Docker command para sa API; alisin dito dahil walang kailangang public API o dashboard port ang pribadong Telegram DM. Sinusubaybayan ng image ang gateway, samantalang ang Docker policy na `unless-stopped` ang namamahala sa restart kapag nagsimula ang Docker. Napapanatili ng mount ang config at session sa restart.

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

Tiyaking ang container ay `running`, tingnan ang logs para sa Telegram connection at provider errors, at basahin ang pairing list bago mag-message. Kapag pumalya ang unang read, ihihinto ng code ang gateway at ilalabas ang state; hindi clearance ang hindi kilalang CLI/grant result. Tiyaking `exited` bago mag-imbestiga at huwag mag-message o restart kung hindi tiyak. Walang ibang approved sender dapat. Kung may lumitaw, huminto at suriin ang stopped state. `docker exec` ay hindi magagamit sa stopped container; maaaring ibalik ng ordinaryong entrypoint ang dating gateway. Sa bagong default-UID setup, ang offline check sa ibaba ay pinned Hermes CLI lang bilang UID 10000, walang network at walang gateway startup. Adaptasyon ito ng dokumentadong pairing at entrypoint, hindi test ng BIG CHANGE. Gamitin lamang kapag parehong 10000 ang running UID at data owner. Kung hindi tiyak ang owner, UID, CLI output o grants, manatiling stopped hanggang malutas bago restart.

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

Tiyaking wala na ang unwanted ID sa huling listahan. Pribadong suriin ang `$HERMES_DATA/.env` at `config.yaml` para sa iba pang platform/global allowlist, `*` o allow-all, at alisin ang unwanted grants sa dokumentadong config route. Panatilihing stopped hanggang masuri lahat ng access. Hindi binabawi ng pag-alis ng isang list entry ang hiwalay na pairing/global grant. Pagkatapos ng readback, `docker start hermes` ang sadyang bumabalik sa orihinal na container; suriin muli ang logs at pairing bago mag-message.

Mula sa pinayagang account, magbukas ng **pribadong** chat at magpadala ng harmless request gaya ng “Sumagot ng maikling pagbati.” Tiyaking may tunay na sagot at tingnan ang kaugnay na log/session. Hindi sagot ang sent status, typing indicator, display o tapos na setup. Maipapakita ng Telegram `/whoami` ang aktibong messaging scope, hindi host authorization. Nonsensitive evidence lamang ang itabi.

Kung walang sagot, basahin muna ang container state at `docker logs --tail 50 hermes`. Suriin ang token, eksaktong numeric `TELEGRAM_ALLOWED_USERS`, model authentication at usage eligibility, at outbound connection. Kung hindi tiyak ang turn, tingnan muna ang private chat at logs bago umulit. Maaaring mawala ang pending updates sa dokumentadong cold boot; limitado sa memory ang duplicate suppression. Walang exactly-once delivery guarantee.

## 4. Suriin ang restart, stop at recovery

Pagkatapos matapos ang unang turn, i-restart ang parehong container, tingnan ang bagong logs at nakaimbak na `/opt/data` state, saka magpadala ng **bagong** harmless private prompt at tiyakin ang sagot. Ihinto at basahin ang Docker state. `exited` ang stop signal; hindi sapat ang tahimik na chat. `docker start hermes` ang sadyang paraan ng muling pagsisimula.

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

Kung pumalya ang restart, tingnan ang Docker state/logs, pagkatapos ang `$HERMES_DATA/logs/gateways/default/current` at `$HERMES_DATA/logs/container-boot.log`, mount, owner at pinned image/version. Inilalarawan ng [v0.22.2 release notes](https://github.com/NousResearch/hermes-agent/releases/tag/v0.22.2) ang boot-liveness fix ngunit hindi ang nangyari sa iyong host. Huwag burahin ang state directory bilang repair. Kung tumagas ang token, huminto, bawiin sa BotFather, pribadong palitan sa mounted `.env` at suriin ang access bago restart. Bawiin din ang unwanted pairing at tingnan ang aktuwal na allowlists.

Maaaring magkahiwalay ang hosting at model cost. Suriin ang tunay na plan, limits at singil; walang runtime, free allowance o availability target na ipinangako. Pinoproseso ng Telegram at provider ang mensahe; itinatago ng host ang local secrets at state. Isang host, bot at unang reply lang ang saklaw. Hiwalay na BIG CHANGE guides ang para sa [Hermes backup at recovery](https://bigchange.ai/blog/hermes-encrypted-github-backup-recovery-guide) at [paulit-ulit na Hermes job](https://bigchange.ai/blog/hermes-skill-recurring-job-first-run).

## Mga sanggunian at karagdagang babasahin

Ang [Docker setup](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md), [Telegram setup](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/telegram.md), [gateway access guide](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/index.md), [security guide](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/security.md) at [v0.22.2 release](https://github.com/NousResearch/hermes-agent/releases/tag/v0.22.2) ay primaryang sources ng NousResearch. Ang [mabilisang simula](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/getting-started/quickstart.md) ang nagpapaliwanag ng model-provider setup. Dokumentasyon ang mga ito, hindi rekord ng BIG CHANGE VPS o bot operation.

## Sources

- [Hermes Agent v0.22.2 release](https://github.com/NousResearch/hermes-agent/releases/tag/v0.22.2) — Petsa ng release at dokumentadong boot-liveness fix.
- [Hermes Docker Setup, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md) — Mga channel ng image, pagkakabit, pag-setup, pinangangasiwaang gateway, port at mga tala.
- [Opisyal na Dockerfile, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/Dockerfile) — Entrypoint, runtime UID, HERMES_HOME at CLI path ng limitadong offline pairing check.
- [Ikalawang yugto ng Docker hook, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/docker/stage2-hook.sh) — Tiyak na pagmamay-ari ng data at pahintulot ng .env/config matapos ang pag-setup.
- [Telegram setup, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/telegram.md) — BotFather, token, numerikong listahan ng pinapayagan, pagkapribado at mga limitasyon sa paghahatid.
- [Messaging at gateway, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/index.md) — Aktuwal na pag-access, pagbasa muli ng pairing at pagbawi.
- [Seguridad, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/security.md) — Pagtrato sa hindi pinahihintulutang pribadong mensahe at mga limitasyon sa pag-access.
- [Mabilisang simula, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/getting-started/quickstart.md) — Paraan ng pag-configure ng model provider.
