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

# Jalankan satu gateway Hermes Agent di VPS dan periksa balasan Telegram privat

> Siapkan gateway Hermes Docker yang versinya diperiksa di Linux VPS, izinkan satu pengirim privat, pastikan balasan nyata lalu periksa restart dan stop.

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.

Bot Telegram privat memudahkan akses ke agen di VPS, tetapi koneksi gateway tidak membuktikan orang yang dituju mendapat balasan. Kita mulai dari direktori Hermes Agent baru, mengizinkan satu ID numerik, memeriksa jawaban nyata dan kendali berhenti terverifikasi. Ini mengikuti [petunjuk Docker v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md) dan [petunjuk Telegram](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/telegram.md) dari NousResearch, diperiksa 19 Oktober 2026. BIG CHANGE tidak mengoperasikan VPS, menarik image, membuat bot atau memanggil model untuk panduan ini.

## Perubahan besar

- **Yang berubah:** Image Docker yang dipatok digest dan diperiksa versinya, bersama mount khusus `/opt/data`, membuat perangkat lunak dan status gateway dapat dikenali.
- **Mengapa penting:** Daftar izin ID Telegram dan balasan privat nyata menunjukkan apakah akun tujuan dapat memakai gateway.
- **Yang perlu diperhatikan:** Pairing atau izin global memperluas akses; prompt tidak berbahaya tidak membatasi alat agen. Periksa izin, log, restart dan status berhenti.

Perlu wewenang mengelola satu Linux VPS lewat SSH, Docker Engine berfungsi dan akses pemulihan host, akun Telegram untuk membuat bot BotFather, serta akun penyedia model Hermes yang memenuhi syarat. Cocokkan arsitektur/sumber daya dengan image resmi amd64 atau arm64 dan periksa akses/tagihan sebelum wizard. Docker diasumsikan sudah bekerja; instalasi dan firewall bergantung OS/penyedia. Host harus bisa terhubung keluar ke Telegram dan model. Sediakan direktori status privat dan batasi pembaca: `/opt/data` menyimpan kredensial, sesi dan log. [Manual Docker](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md) menyebut mount ini sumber status persisten yang berwenang.

## 1. Patok image sebelum pengaturan

Hubungkan SSH dan tetap di shell yang sama. Tag `stable` bisa berubah. Tarik, catat digest repositori dan pastikan image sendiri melaporkan versi `0.22.2`. Berhenti jika berbeda, digest hilang, sudah ada data atau kontainer bernama `hermes`. Perbarui petunjuk menurut versi nyata atau dapatkan image terdokumentasi yang cocok sebelum lanjut. Digest mematok image, tidak membuktikan versi sendirian.

```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` menghentikan rangkaian jika Docker tidak tersedia, pull/inspect atau perintah versi gagal. Pemeriksaan eksplisit juga menghentikan digest kosong atau versi lain. Jangan lanjut mengatur setelah hasil itu. Simpan nilai `nousresearch/hermes-agent@sha256:…` tercatat. Pengaturan dan gateway memakai `IMAGE_REF`, sehingga perubahan tag tidak diam-diam mengganti kontainer. Ini pemeriksaan pembaca pada VPS nyata; tidak ada digest terverifikasi dalam artikel. Pakai direktori baru khusus pada sistem berkas asli host, jangan dua gateway memakai data yang sama.

## 2. Atur penyedia dan satu pengirim privat

Jalankan [wizard pengaturan Docker](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md) dengan direktori termount. Pilih rute model yang diizinkan, autentikasi dan periksa penyedia/model. Akses dan biaya bergantung akun. Pengaturan tersimpan tidak membuktikan permintaan model berhasil.

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

Di Telegram minta kepada [@BotFather](https://t.me/BotFather) bot lewat `/newbot` dan rahasiakan token. Dapatkan **ID pengguna Telegram numerik pengirim**, misalnya metode pada [manual Telegram](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/telegram.md); nama pengguna bukan ID. Wizard atau `hermes gateway setup` bisa menulis token dan daftar izin. Manual, letakkan `TELEGRAM_BOT_TOKEN=<private token>` dan `TELEGRAM_ALLOWED_USERS=<your numeric ID>` di `$HERMES_DATA/.env`, yang tampil sebagai `/opt/data/.env` dalam kontainer. Jangan taruh token pada perintah, riwayat, catatan bersama atau artikel.

Pada `$HERMES_DATA/config.yaml` (`/opt/data/config.yaml` dalam kontainer), atur perilaku global DM tanpa izin:

```yaml
unauthorized_dm_behavior: ignore
```

Setelah kontainer pengaturan keluar, image mungkin telah mengubah `$HERMES_DATA` menjadi milik UID runtime 10000. Bootstrap membatasi `.env` ke mode `600` dan memperketat `config.yaml` yang ada menjadi `640`; konfigurasi yang baru dibuat saat itu dapat perlu pengetatan sama. Pengguna SSH biasa mungkin tidak bisa membuka berkas. Jika kunci belum ditetapkan, **administrator host berwenang** dapat memeriksa dan mengedit dua berkas tepat itu dengan `sudo`, lalu memulihkan pemilik runtime dan mode privat. Editor host UID 10000 mungkin tidak melewati `$HOME` milik pengguna login; karenanya memakai hak administrator. Pada host dengan `sudo` dan `vi`, gunakan setelah pembacaan pemilik/mode tanpa rahasia. Jangan lanjut pada UID berbeda atau berkas hilang; selesaikan akses host dahulu.

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

Keluaran akhir `stat` harus menunjukkan UID/GID 10000 untuk kedua berkas, mode direktori `700`, `.env` mode `600` dan `config.yaml` mode `640`. Ini metadata, bukan kredensial. `chown` hanya menargetkan dua berkas termasuk pengganti buatan editor. Bila tidak ada `sudo` atau `vi`, gunakan prosedur admin sah dengan pembacaan sama. Jangan membuat data terbaca semua orang atau memetakan ulang pengguna kontainer.

Pertahankan pengaturan penyedia saat mengedit. Override Telegram untuk `unauthorized_dm_behavior` tidak boleh menetapkan `pair`, dan pengaturan global `GATEWAY_ALLOWED_USERS` atau `GATEWAY_ALLOW_ALL_USERS` tidak memperluas akses. Di `config.yaml`, pastikan pula `gateway.allow_all_users` serta tingkat teratas `allow_all_users` bukan true dan tak ada pengirim tambahan di daftar global/Telegram. Jangan pakai `*` dalam daftar, tambahkan daftar grup atau setujui kode pairing. Direktori baru menghindari izin warisan; jika berisi data, berhenti dan periksa tanpa menimpa. Privasi grup BotFather tetap aktif; jangan masukkan bot ke grup atau jadikan admin. [Manual akses gateway](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/index.md) membedakan daftar izin dan pairing persisten sebagai jalur terpisah. [Manual keamanan](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/security.md) menjelaskan `ignore` sebagai pembuangan diam-diam DM tanpa izin.

Daftar membatasi siapa memulai percakapan, bukan tindakan agen sah. Sesi Telegram Hermes memiliki alat terminal secara default. Tinjau alat, mount, penyedia dan kebijakan host sebelum mengizinkan. Prompt uji tidak berbahaya tetap hanya prompt.

## 3. Mulai gateway dan periksa balasan pertama

Mulai satu kontainer bernama dari digest tercatat. Perintah Docker terbit memuat `-p 8642:8642` opsional untuk API; abaikan karena DM privat tak perlu port API atau dasbor publik. Image mengawasi gateway, kebijakan Docker `unless-stopped` mengatur restart saat Docker mulai. Mount mempertahankan konfigurasi dan sesi setelah 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
```

Pastikan kontainer `running`, periksa koneksi Telegram/galat penyedia pada log dan daftar pairing sebelum mengirim. Jika pembacaan awal gagal, blok menghentikan gateway dan mencetak status. Hasil CLI/izin tak dikenal bukan izin lanjut. Pastikan `exited` sebelum menyelidiki; jangan mengirim/restart dalam ketidakpastian. Tidak boleh ada pengirim sah lain. Jika ada, hentikan dan periksa status berhenti. `docker exec` tak bisa dijalankan pada kontainer berhenti; entrypoint biasa mungkin mengembalikan gateway lama. Pada instalasi baru UID default, pemeriksaan offline di bawah hanya menjalankan Hermes CLI yang dipatok sebagai UID 10000 tanpa jaringan atau startup gateway. Ini adaptasi dokumentasi perintah/entrypoint, bukan uji BIG CHANGE. Gunakan hanya setelah memastikan UID aktif dan pemilik data 10000. Jika pemilik, UID, CLI atau izin tak pasti, tetap berhenti sampai selesai sebelum 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
```

Pastikan ID tak diinginkan hilang dari daftar akhir. Periksa privat `$HERMES_DATA/.env` dan `config.yaml` untuk daftar platform/global lain, `*` atau pengaturan izinkan-semua; cabut izin melalui konfigurasi terdokumentasi. Gateway berhenti sampai semua jalur diperiksa. Menghapus satu entri tidak mencabut pairing independen atau izin global. Sesudah pembacaan, `docker start hermes` sengaja melanjutkan kontainer asli. Periksa log/pairing lagi sebelum pesan.

Dari akun diizinkan, buka chat **privat** dengan bot dan kirim permintaan aman seperti “Balas dengan sapaan singkat”. Pastikan jawaban nyata dan catatan log/sesi terkait. Terkirim, indikator mengetik, status atau pengaturan selesai bukan balasan. Perintah Telegram `/whoami` menunjukkan lingkup pesan aktif, bukan otorisasi host. Simpan bukti tidak sensitif saja.

Tanpa balasan baca status dan `docker logs --tail 50 hermes` dahulu. Periksa token, nilai numerik tepat `TELEGRAM_ALLOWED_USERS`, autentikasi/kelayakan penyedia serta koneksi keluar. Jika giliran tak pasti, baca chat/log sebelum mengulang. Cold boot terdokumentasi bisa membuang pembaruan tertunda, sedangkan deduplikasi terbatas dalam memori. Tak ada jaminan pengiriman tepat sekali.

## 4. Periksa restart, berhenti dan pemulihan

Setelah giliran pertama selesai, restart kontainer sama, baca log baru dan status `/opt/data` tersimpan, lalu kirim permintaan privat aman **baru** dan pastikan balasannya. Hentikan dan baca status Docker. `exited` adalah tanda berhenti; chat diam tidak cukup. `docker start hermes` cara sengaja melanjutkan nanti.

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

Jika restart gagal, periksa Docker/log lalu `$HERMES_DATA/logs/gateways/default/current` dan `$HERMES_DATA/logs/container-boot.log`, mount, pemilik dan image/versi dipatok. [Catatan v0.22.2](https://github.com/NousResearch/hermes-agent/releases/tag/v0.22.2) mendeskripsikan perbaikan liveness startup, bukan kejadian host Anda. Jangan hapus data untuk memperbaiki. Bila token bocor, hentikan, cabut di BotFather, ganti privat dalam `.env` termount dan periksa akses sebelum restart. Cabut pairing tak diinginkan dan periksa daftar efektif.

VPS dan model bisa bertarif terpisah. Periksa paket, batas dan biaya nyata; tak ada janji waktu, kuota gratis atau ketersediaan. Telegram/penyedia memproses pesan, host menyimpan rahasia/status. Ini pemeriksaan satu host, bot dan balasan pertama. Panduan BIG CHANGE lain membahas [pencadangan dan pemulihan Hermes](https://bigchange.ai/blog/hermes-encrypted-github-backup-recovery-guide) dan [pekerjaan Hermes berulang](https://bigchange.ai/blog/hermes-skill-recurring-job-first-run).

## Sumber dan bacaan lanjutan

Dokumen [pengaturan Docker](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md), [pengaturan Telegram](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/telegram.md), [akses gateway](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/index.md), [keamanan](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/security.md) dan [rilis v0.22.2](https://github.com/NousResearch/hermes-agent/releases/tag/v0.22.2) adalah sumber primer NousResearch. [Mulai cepat](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/getting-started/quickstart.md) menjelaskan penyedia. Ini dokumentasi prosedur, bukan catatan operasi VPS/bot BIG CHANGE.

## Sources

- [Rilis Hermes Agent v0.22.2](https://github.com/NousResearch/hermes-agent/releases/tag/v0.22.2) — Tanggal dan perbaikan startup-liveness terdokumentasi.
- [Pengaturan Docker Hermes, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md) — Kanal image, mount, pengaturan, pengawasan, port dan log.
- [Dockerfile resmi, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/Dockerfile) — Entrypoint, UID runtime, HERMES_HOME dan jalur CLI pemeriksaan offline terbatas.
- [Hook tahap kedua Docker, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/docker/stage2-hook.sh) — Pemilik data dan izin .env/config setelah pengaturan.
- [Pengaturan Telegram, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/telegram.md) — BotFather, token, daftar numerik, privasi dan batas pengiriman.
- [Pesan dan gateway, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/index.md) — Akses efektif, pembacaan pairing dan pencabutan.
- [Keamanan, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/security.md) — DM tanpa izin dan batas akses.
- [Mulai cepat, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/getting-started/quickstart.md) — Jalur pengaturan penyedia model.
