AI-translated from English; not yet reviewed by a fluent editor.
# Ein Hermes Agent Gateway auf einem VPS betreiben und eine private Telegram-Antwort prüfen
> Ein versionsgeprüftes Hermes Docker Gateway auf einem Linux-VPS einrichten, einen privaten Telegram-Absender zulassen, eine echte Antwort und Neustart sowie Stopp prüfen.
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.
Ein privater Telegram-Bot kann einen Agenten auf einem VPS erreichbar machen. Eine Verbindung beweist aber keine Antwort an die richtige Person. Wir beginnen mit einem neuen Hermes Agent Datenverzeichnis, erlauben eine numerische ID, prüfen eine echte Antwort und einen verlässlichen Stopp. Grundlage sind NousResearchs [Docker-Anweisungen v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md) und [Telegram-Anweisungen](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/telegram.md), geprüft am 19. Oktober 2026. BIG CHANGE hat dafür keinen VPS betrieben, kein Image abgerufen, keinen Bot erstellt und kein Modell aufgerufen.
## Die große Veränderung
- **Was sich ändert:** Ein per Digest fixiertes und versionsgeprüftes Docker-Image mit eigenem `/opt/data`-Mount macht Software und Zustand dieses Gateways identifizierbar.
- **Warum das wichtig ist:** Numerische Telegram-Zulassung und eine tatsächliche private Antwort zeigen, ob das vorgesehene Konto zugreifen kann.
- **Worauf zu achten ist:** Pairing oder globale Rechte können Zugriff erweitern. Ein harmloser Prompt begrenzt Werkzeuge nicht. Prüfen Sie Rechte, Logs, Neustart und Stoppzustand.
Sie benötigen Befugnis zur Verwaltung eines Linux-VPS per SSH, funktionierendes Docker Engine und Host-Wiederherstellungszugang, ein Telegram-Konto mit BotFather-Boterstellung und ein geeignetes Hermes-Modellanbieterkonto. Prüfen Sie Architektur und Ressourcen gegen das offizielle amd64-/arm64-Image sowie Zugang und Abrechnung vor dem Assistenten. Docker wird als betriebsbereit vorausgesetzt; Installation und Firewall hängen von OS und Anbieter ab. Der Host braucht ausgehenden Zugang zu Telegram und Modellanbieter. Reservieren Sie ein privates Zustandsverzeichnis mit eingeschränkten Lesern: `/opt/data` enthält Zugangsdaten, Sitzungen und Logs. [Das Docker-Handbuch](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md) bezeichnet den Mount als dauerhafte maßgebliche Datenquelle.
## 1. Image vor der Einrichtung fixieren
Verbinden Sie sich per SSH und bleiben Sie im selben Shell. Der Tag `stable` kann sich ändern. Rufen Sie ihn ab, notieren Sie den Repository-Digest und prüfen Sie die vom Image selbst gemeldete Version `0.22.2`. Stoppen Sie bei Abweichung, fehlendem Digest, vorhandenen Daten oder einem Container namens `hermes`. Aktualisieren Sie die Anleitung für die tatsächliche Version oder beschaffen Sie ein passendes dokumentiertes Image. Ein Digest fixiert das Image, beweist aber nicht dessen 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` stoppt die Befehlsfolge bei fehlendem Docker, fehlgeschlagenem Abruf oder Inspect sowie Versionsbefehl. Die expliziten Prüfungen stoppen leeren Digest oder andere Version. Fahren Sie danach nicht mit Einrichtung fort. Bewahren Sie den notierten `nousresearch/hermes-agent@sha256:…`-Wert. Einrichtung und Gateway verwenden `IMAGE_REF`, damit spätere Tagänderungen den Container nicht unbemerkt ändern. Leser müssen dies am echten VPS prüfen; der Artikel enthält keinen verifizierten Image-Digest. Nutzen Sie ein neues eigenes Verzeichnis im nativen Host-Dateisystem, niemals zwei Gateways am selben Datenverzeichnis.
## 2. Anbieter und einen privaten Telegram-Absender einrichten
Starten Sie den [Docker-Einrichtungsassistenten](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md) mit dem gemounteten Verzeichnis. Wählen Sie einen erlaubten Modellweg, authentifizieren Sie sich und prüfen Sie Anbieter/Modell. Rechte und Kosten hängen vom Konto ab. Gespeicherte Einstellungen beweisen keinen erfolgreichen Modellaufruf.
```sh
docker run -it --rm -v "$HERMES_DATA:/opt/data" "$IMAGE_REF" setup
```
Fordern Sie in Telegram bei [@BotFather](https://t.me/BotFather) mit `/newbot` einen Bot an und halten Sie das Token geheim. Ermitteln Sie die **numerische Telegram-Benutzer-ID des Absenders**, etwa mit der im [Telegram-Handbuch](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/telegram.md) verlinkten Methode. Ein Benutzername ist keine ID. Assistent oder `hermes gateway setup` können Token und Zulassungsliste schreiben. Manuell kommen `TELEGRAM_BOT_TOKEN=<private token>` und `TELEGRAM_ALLOWED_USERS=<your numeric ID>` in `$HERMES_DATA/.env`, das im Container als `/opt/data/.env` erscheint. Kein Token in Befehle, Verlauf, gemeinsame Notizen oder diesen Artikel.
In `$HERMES_DATA/config.yaml` (`/opt/data/config.yaml` im Container) stellen Sie das globale Verhalten unerlaubter Direktnachrichten ein:
```yaml
unauthorized_dm_behavior: ignore
```
Nach Ende des Einrichtungscontainers hat das offizielle Image möglicherweise `$HERMES_DATA` der Laufzeit-UID 10000 zugeordnet. Der Start begrenzt `.env` auf Modus `600` und verschärft eine vorhandene `config.yaml` auf `640`. Eine erstmals dabei erzeugte Konfiguration kann dieselbe Verschärfung brauchen. Ein gewöhnlicher SSH-Nutzer kann sie daher eventuell nicht öffnen. Fehlende Schlüssel kann ein **befugter Hostadministrator** in den zwei exakten Dateien mit `sudo` prüfen und ändern, danach Besitzer und private Modi wiederherstellen. Ein Hosteditor als UID 10000 kann ein login-eigenes `$HOME` womöglich nicht durchqueren; deshalb nutzt der Befehl Hostadministratorzugriff. Auf einem Host mit `sudo` und `vi` erst nach geheimnisfreier Besitzer-/Modusprüfung verwenden. Bei anderer UID oder fehlender Datei nicht fortfahren, sondern den Hostzugriff klären.
```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"
```
Die abschließende Ausgabe von `stat` muss UID/GID 10000 für beide Dateien, Verzeichnismodus `700`, `.env`-Modus `600` und `config.yaml`-Modus `640` zeigen. Sie enthält Metadaten statt Zugangsdaten. Der `chown` zielt nur auf beide Dateien, einschließlich Editor-Ersatzdateien. Fehlt `sudo` oder `vi`, verwenden Sie autorisierte Hostverwaltung mit derselben Kontrolle. Machen Sie Daten nicht weltweit lesbar und ordnen Sie den Containerbenutzer nicht neu zu.
Bewahren Sie Anbieterwerte beim Editieren. Keine Telegram-spezifische `unauthorized_dm_behavior`-Überschreibung darf `pair` setzen, kein globales `GATEWAY_ALLOWED_USERS` oder `GATEWAY_ALLOW_ALL_USERS` weitere Rechte geben. In `config.yaml` dürfen außerdem weder `gateway.allow_all_users` noch das oberste `allow_all_users` true sein, und globale oder Telegram-Listen dürfen keine weiteren Absender enthalten. Verwenden Sie kein `*` in Listen, keine Gruppenlisten und bestätigen Sie keine Pairing-Codes. Neu vermeidet geerbte Rechte; bei bestehenden Daten stoppen und prüfen statt überschreiben. BotFathers Gruppenprivatsphäre bleibt an. Bot weder in Gruppen aufnehmen noch zum Gruppenadmin machen. Das [Gateway-Zugriffshandbuch](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/index.md) beschreibt Listen und dauerhafte Pairing-Rechte als getrennte Wege. Das [Sicherheitshandbuch](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/security.md) beschreibt `ignore` als stilles Verwerfen unerlaubter Direktnachrichten.
Die Liste begrenzt Gesprächsbeginn, nicht Handlungen eines zugelassenen Agenten. Hermes Telegram Sitzungen enthalten standardmäßig Terminalwerkzeuge. Prüfen Sie Werkzeuge, Docker-Mounts, Anbieterzugriff und Hostregeln vor Zulassung. Ein harmloser Testprompt ist nur ein Prompt.
## 3. Starten und erste Antwort prüfen
Starten Sie einen benannten Container mit aufgezeichnetem Digest. Der veröffentlichte Docker-Befehl enthält optional `-p 8642:8642` für API-Zugriff. Lassen Sie es weg: private Telegram-Nachrichten brauchen keinen öffentlichen API-/Dashboard-Port. Das Image überwacht das Gateway, die Docker-Richtlinie `unless-stopped` regelt den Containerneustart beim Docker-Start. Das Mount bewahrt Konfiguration und Sitzungen über Neustarts.
```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
```
Bestätigen Sie den Zustand `running`, prüfen Sie Telegram-Verbindung und Anbieterfehler in Logs sowie die Pairing-Liste vor dem Prompt. Scheitert ein anfängliches Lesen, stoppt der Block das Gateway und zeigt Zustand. Ein unbekanntes CLI-/Rechteergebnis ist keine Freigabe. Bestätigen Sie `exited` vor Untersuchungen und senden oder starten Sie bei Unsicherheit nicht neu. Kein weiterer Absender darf genehmigt sein. Andernfalls stoppen und Stoppzustand prüfen. `docker exec` funktioniert nicht am gestoppten Container; der normale Image-Einstieg kann ein früher laufendes Gateway wiederherstellen. Bei neuer Standard-UID-Installation führt die Offlineprüfung nur die fixierte Hermes CLI als UID 10000 ohne Netzwerk und Gateway-Start aus. Dies ist eine Anpassung dokumentierter Befehle und Einstiegspunkte, kein BIG CHANGE Test. Nur verwenden, wenn Laufzeit-UID und Datenbesitzer beide 10000 bestätigt sind. Bei Unsicherheit über Eigentum, UID, CLI oder Rechte gestoppt lassen und vor Neustart lösen.
```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
```
Bestätigen Sie, dass die unerwünschte ID nicht mehr in der letzten Liste steht. Prüfen Sie privat `$HERMES_DATA/.env` und `config.yaml` auf andere Plattform-/globale Listen, `*` oder Vollzugriff und entfernen Sie unerwünschte Rechte dokumentiert. Bis alle Wege geprüft sind, bleibt das Gateway gestoppt. Ein gelöschter Listeneintrag widerruft keine unabhängigen Pairing-/Globalrechte. Danach setzt `docker start hermes` absichtlich den Originalcontainer fort. Vor Nachrichten Logs und Liste erneut prüfen.
Öffnen Sie vom erlaubten Konto einen **privaten** Botchat und senden Sie etwas Harmloses wie „Antworte mit einer kurzen Begrüßung“. Prüfen Sie echte Antwort und zugehörigen Log-/Sitzungseintrag. Gesendet, Tippanzeige, Status oder fertige Einrichtung sind keine Antwort. Telegrams `/whoami` zeigt den aktiven Nachrichtenumfang, beweist aber keine Hostberechtigung. Nur nicht sensible Belege speichern.
Ohne Antwort zuerst Containerzustand und `docker logs --tail 50 hermes` lesen. Prüfen Sie Token, exakten numerischen `TELEGRAM_ALLOWED_USERS`-Wert, Anbieteranmeldung, Nutzungsberechtigung und ausgehende Verbindung. Bei unklarem Ergebnis Chat und Logs vor Wiederholung lesen. Dokumentierter Kaltstart kann offene Updates verwerfen; Duplikatsperre ist im Speicher begrenzt. Genau-einmal-Zustellung ist nicht garantiert.
## 4. Neustart, Stopp und Wiederherstellung prüfen
Nach dem ersten abgeschlossenen Austausch denselben Container neu starten, frische Logs und behaltenen `/opt/data`-Zustand prüfen, dann einen **neuen** harmlosen privaten Prompt mit Antwort prüfen. Stoppen Sie den Container und lesen Sie Docker-Zustand. `exited` ist das Stoppsignal, ein stiller Chat allein nicht. `docker start hermes` setzt später bewusst fort.
```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
```
Bei Startfehlern Docker-Zustand und Logs, danach `$HERMES_DATA/logs/gateways/default/current` und `$HERMES_DATA/logs/container-boot.log`, Mount, Eigentum und fixiertes Image/Version prüfen. Die [v0.22.2 Versionshinweise](https://github.com/NousResearch/hermes-agent/releases/tag/v0.22.2) erklären eine Boot-Verfügbarkeitskorrektur, nicht den tatsächlichen Vorgang auf Ihrem Host. Daten nicht zur Reparatur löschen. Bei Tokenleck stoppen, in BotFather widerrufen, privat im gemounteten `.env` ersetzen und Zugriff vor Neustart prüfen. Auch unerwünschtes Pairing widerrufen und wirksame Listen prüfen.
VPS und Modell können getrennt kosten. Prüfen Sie echten Tarif, Grenzen und Gebühren. Laufzeit, Gratisnutzung oder Verfügbarkeitsziel sind nicht zugesagt. Telegram und Anbieter verarbeiten Nachrichten, das Hostverzeichnis bewahrt Geheimnisse und Zustand. Dies prüft erste Antwort eines Hosts und Bots. Separate BIG CHANGE Anleitungen behandeln [Hermes-Sicherung und Wiederherstellung](https://bigchange.ai/blog/hermes-encrypted-github-backup-recovery-guide) und [einen wiederkehrenden Hermes-Job](https://bigchange.ai/blog/hermes-skill-recurring-job-first-run).
## Quellen und weiterführende Informationen
Die [Docker-Einrichtung](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md), [Telegram-Einrichtung](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/telegram.md), [Gateway-Zugriffsanleitung](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/index.md), [Sicherheitsanleitung](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/security.md) und [v0.22.2 Veröffentlichung](https://github.com/NousResearch/hermes-agent/releases/tag/v0.22.2) sind NousResearch-Primärquellen. Der [Schnellstart](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/getting-started/quickstart.md) erklärt Anbieter-Setup. Das sind Verfahrensquellen, keine BIG CHANGE VPS-/Bot-Betriebsnachweise.
## Sources
- [Hermes Agent v0.22.2 Veröffentlichung](https://github.com/NousResearch/hermes-agent/releases/tag/v0.22.2) — Release-Datum und dokumentierte Start-Verfügbarkeitskorrektur.
- [Hermes Docker Einrichtung, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md) — Imagekanäle, Mount, Setup, überwachte Ausführung, Port und Logs.
- [Offizielles Dockerfile, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/Dockerfile) — Einstiegspunkt, Laufzeit-UID, HERMES_HOME und CLI-Pfad für begrenzte Offline-Pairing-Prüfung.
- [Docker-Start-Hook der zweiten Stufe, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/docker/stage2-hook.sh) — Gezieltes Dateneigentum und .env/config-Rechte nach Einrichtung.
- [Telegram-Einrichtung, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/telegram.md) — BotFather, Token, numerische Zulassung, Privatsphäre und Zustellgrenzen.
- [Nachrichten und Gateway, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/index.md) — Wirksamer Zugriff, Pairing-Prüfung und Widerruf.
- [Sicherheit, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/security.md) — Unerlaubte Direktnachrichten und Zugriffsgrenzen.
- [Schnellstart, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/getting-started/quickstart.md) — Einrichtungsweg des Modellanbieters.
Der Newsletter von BIG CHANGE
Das große Ganze. In Ihrem Tempo.
Aktuelle Storys über KI und Robotik, beobachtenswerte Veränderungen und praktische Ideen zur Anwendung. Wählen Sie ein tägliches Briefing, eine wöchentliche Zusammenfassung oder eine monatliche Perspektive.
Next scheduled send (UTC): . Your first edition arrives at the next scheduled send after you confirm.
Ihr Datenschutz, Ihre Entscheidung.
Notwendiger Speicher schützt die Website und merkt sich Ihre Einstellungen. Optionales Google Analytics bleibt deaktiviert, bis Sie es erlauben. Sie können alle Geschichten auch nur mit notwendigem Speicher lesen. Datenschutzdetails