Приватан Telegram бот олакшава приступ агенту на VPS-у, али повезан пролаз не доказује да ће одговарати правој особи. Почињемо новим Hermes Agent директоријумом, допуштамо један бројчани Telegram ID, проверавамо стваран одговор и остављамо потврђен начин заустављања. Пратимо NousResearch Docker упутство в0.22.2 и Telegram упутство, проверена 19. октобра 2026. BIG CHANGE није управљао VPS-ом, преузео слику, направио бота ни позвао модел за овај водич.

Велика промена

  • Шта се променило: Docker слика везана за сажетак и проверену верзију, уз посебан /opt/data моунт, омогућава препознавање софтвера и стања овог пролаза.
  • Зашто је важно: Бројчана Telegram листа дозвољених и стваран приватан одговор показују да ли предвиђени налог може да користи пролаз.
  • На шта пазити: Упаривање или глобална права шире приступ; безазлен захтев не ограничава алате агента. Проверите дозволе, дневнике, поновно покретање и заустављено стање.

Потребни су овлашћење за управљање једним Linux VPS-ом преко SSH, исправан Docker Engine и приступ опоравку хоста, Telegram налог за прављење BotFather бота и одговарајући Hermes налог добављача модела. Проверите архитектуру и ресурсе према званичној amd64/arm64 слици, као и приступ и наплату пре чаробњака. Docker мора већ радити; инсталација и заштитни зид зависе од OS-а и добављача. Хост мора излазно приступати Telegram-у и моделу. Одвојите приватан директоријум стања и ограничите читаоце: /opt/data чува приступне податке, сесије и дневнике. Docker приручник тај моунт назива трајним меродавним извором стања.

1. Фиксирајте слику пре подешавања

Повежите се преко SSH и останите у истој командној љусци. Ознака stable може да се промени. Преузмите слику, забележите сажетак репозиторијума и потврдите да сама слика пријављује верзију 0.22.2. Станите при разлици, недостајућем сажетку, постојећим подацима или контејнеру имена hermes. Пре наставка освежите упутство за стварну верзију или набавите подударну документовану слику. Сажетак фиксира слику, али сам не доказује верзију.

Terminal
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 чаробњак за подешавање са монтираним директоријумом. Изаберите пут модела који налог дозвољава, аутентификујте се и проверите добављача/модел. Приступ и цена зависе од налога. Сачувана поставка не доказује успешан захтев моделу.

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

У Telegram-у тражите од @BotFather бота помоћу /newbot и чувајте токен приватно. Прибавите бројчани Telegram ID пошиљаоца, на пример методом повезаном у Telegram приручнику; корисничко име није 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-у или недостајућој датотеци станите и решите хост приступ.

Terminal
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 и да листе немају додатног пошиљаоца. Не користите * у листама, не додајте групне листе ни одобрења кодова за упаривање. Ново избегава наслеђена права; код старих података станите и прегледајте уместо преписивања. Оставите BotFather приватност група укључену, не додајте бота групи и не дајте му администраторску улогу. Приручник приступа пролазу раздваја листе и трајне дозволе упаривања као независне путеве. Безбедносни приручник описује ignore као тихо одбацивање неовлашћених приватних порука.

Листа контролише почетак разговора, не радње овлашћеног агента. Hermes Telegram сесије подразумевано имају терминалске алате. Пре дозволе проверите алате, Docker монтирања, добављача и политику хоста. Безазлен тест захтев је само захтев.

3. Покрените пролаз и проверите први одговор

Покрените један именован контејнер из забележеног сажетка. Објављена Docker команда има опциони -p 8642:8642 за API. Изоставите га јер приватна порука не тражи јавни API ни порт контролне табле. Слика надзире пролаз, а Docker политика unless-stopped управља поновним покретањем при старту Docker-а. Монтирани директоријум чува поставке и сесије.

Terminal
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 или права нејасни, оставите заустављено до решења пре рестарта.

Terminal
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 је намеран наставак касније.

Terminal
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, монтирање, власништво и фиксирану слику/верзију. Белешке издања в0.22.2 описују исправку провере рада при старту, не догађај на вашем хосту. Не бришите стање ради поправке. Ако токен исцури, станите, опозовите га у BotFather, приватно замените у монтираном .env и проверите приступ пре рестарта. Опозовите и нежељено упаривање и прегледајте стварне листе.

VPS и модел могу се посебно наплаћивати. Проверите свој пакет, лимите и трошкове; нема обећаног трајања, бесплатне квоте или доступности. Telegram и добављач обрађују поруке; хост чува тајне и стање. Проверава се први одговор једног хоста и бота. Други BIG CHANGE водичи обрађују Hermes резервну копију и опоравак и понављајући Hermes посао.

Извори и додатна литература

Упутства за Docker подешавање, Telegram подешавање, приступ пролазу, безбедност и издање в0.22.2 јесу NousResearch примарни извори. Брзи почетак објашњава добављача. Ово документује поступак, не BIG CHANGE рад VPS-а или бота.