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 dan petunjuk Telegram 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 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.
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
fiset -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 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.
docker run -it --rm -v "$HERMES_DATA:/opt/data" "$IMAGE_REF" setupDi Telegram minta kepada @BotFather bot lewat /newbot dan rahasiakan token. Dapatkan ID pengguna Telegram numerik pengirim, misalnya metode pada manual Telegram; 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:
unauthorized_dm_behavior: ignoreSetelah 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.
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 membedakan daftar izin dan pairing persisten sebagai jalur terpisah. Manual keamanan 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.
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
fiPastikan 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.
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 listPastikan 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.
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 hermesJika 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 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 dan pekerjaan Hermes berulang.
Sumber dan bacaan lanjutan
Dokumen pengaturan Docker, pengaturan Telegram, akses gateway, keamanan dan rilis v0.22.2 adalah sumber primer NousResearch. Mulai cepat menjelaskan penyedia. Ini dokumentasi prosedur, bukan catatan operasi VPS/bot BIG CHANGE.



