МИР НЕ СТОИТ НА МЕСТЕ.RSS
BIG CHANGE.

Версия Markdown

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

# Запустите один шлюз Hermes Agent на VPS и проверьте личный ответ в Telegram

> Настройте проверенный по версии шлюз Hermes Docker на Linux VPS, допустите одного отправителя Telegram, проверьте настоящий ответ, перезапуск и остановку.

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.

Личный Telegram-бот удобен для доступа к агенту на VPS, но подключение не доказывает ответ нужному человеку. Начинаем с нового каталога Hermes Agent, допускаем один числовой Telegram ID, проверяем настоящий ответ и подтверждённый способ остановки. Основа — [инструкции Docker v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md) и [инструкции Telegram](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/telegram.md) от NousResearch, проверенные 19 октября 2026 года. BIG CHANGE не эксплуатировала VPS, не загружала образ, не создавала бота и не вызывала модель для статьи.

## Главное изменение

- **Что изменилось:** Фиксированный по дайджесту и проверенный по версии Docker-образ с отдельным монтированием `/opt/data` позволяет определить ПО и состояние шлюза.
- **Почему это важно:** Числовой список допуска Telegram и реальный личный ответ показывают доступ нужной учётной записи.
- **На что обратить внимание:** Сопряжение и глобальные права расширяют доступ; безобидный запрос не ограничивает инструменты агента. Проверьте права, журналы, перезапуск и остановку.

Нужны полномочия управлять Linux VPS через SSH, работающий Docker Engine и доступ восстановления хоста, Telegram-аккаунт с созданием бота BotFather и подходящий аккаунт поставщика модели Hermes. Сверьте архитектуру и ресурсы с официальным amd64/arm64-образом и условия доступа/оплаты до мастера настройки. Docker уже должен работать; установка и межсетевой экран зависят от ОС и поставщика. Хосту нужны исходящие соединения к Telegram и модели. Выделите закрытый каталог состояния и ограничьте чтение: `/opt/data` хранит секреты, сеансы и журналы. [Руководство Docker](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md) называет это монтирование постоянным авторитетным источником состояния.

## 1. Зафиксируйте образ до настройки

Подключитесь по SSH и используйте ту же оболочку. Метка `stable` может измениться. Загрузите образ, запишите дайджест репозитория и подтвердите версию самого образа `0.22.2`. При различии, отсутствии дайджеста, старом состоянии или контейнере с именем `hermes` остановитесь. Обновите инструкции под реальную версию или найдите документированный соответствующий образ до продолжения. Дайджест фиксирует образ, но сам не доказывает версию.

```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` останавливает цепочку при недоступном Docker, ошибке загрузки/проверки или команды версии. Явные проверки также останавливают пустой дайджест и другую версию. После такого результата настройку не продолжайте. Сохраните значение `nousresearch/hermes-agent@sha256:…`. Настройка и шлюз ниже используют `IMAGE_REF`, поэтому смена метки незаметно не заменит контейнер. Это проверки читателя на настоящем VPS; подтверждённого дайджеста в статье нет. Используйте новый отдельный каталог на родной файловой системе хоста, никогда не запускайте два шлюза с общими данными.

## 2. Настройте поставщика и одного личного отправителя

Запустите [мастер настройки Docker](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md) с подключённым каталогом. Выберите разрешённый модельный маршрут, пройдите аутентификацию и проверьте поставщика/модель. Доступ и оплата зависят от аккаунта. Сохранённые настройки не подтверждают успешный запрос.

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

В Telegram попросите у [@BotFather](https://t.me/BotFather) бота через `/newbot` и держите токен в секрете. Узнайте **числовой Telegram ID отправителя**, например способом из [руководства Telegram](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/telegram.md). Имя пользователя — не 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 или отсутствии файла остановитесь и разрешите доступ.

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

Итоговый вывод `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 включённой, не добавляйте бота в группу и не делайте администратором. [Руководство доступа к шлюзу](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/index.md) различает списки и постоянные разрешения сопряжения. [Руководство безопасности](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/security.md) описывает `ignore` как тихое отбрасывание неразрешённых личных сообщений.

Список ограничивает начало беседы, а не действия допущенного агента. Сеансы Hermes Telegram по умолчанию имеют терминальные инструменты. До допуска проверьте инструменты, монтирования, поставщика и политику хоста. Безобидный тестовый запрос остаётся лишь запросом.

## 3. Запустите шлюз и проверьте ответ

Запустите один именованный контейнер из записанного дайджеста. Опубликованная команда Docker содержит необязательный `-p 8642:8642` для API. Здесь опустите его: личному Telegram не нужен публичный API или порт панели. Образ следит за процессом шлюза, политика Docker `unless-stopped` управляет перезапуском при старте Docker. Каталог сохраняет настройки и сеансы после перезапуска.

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

Подтвердите состояние `running`, соединение Telegram и ошибки поставщика в журнале, список сопряжений до запроса. Если первоначальное чтение не удалось, блок останавливает шлюз и выводит состояние. Неизвестный результат CLI/прав не даёт разрешения. Подтвердите `exited` перед расследованием, без отправки и рестарта при сомнении. Иных одобренных отправителей быть не должно; если есть, остановите и проверьте. `docker exec` не работает на остановленном контейнере, а обычная точка входа может вернуть прежний шлюз. Для новой установки со стандартным UID офлайн-проверка запускает только фиксированный Hermes CLI как UID 10000, без сети и запуска шлюза. Это адаптация документированных команд и входа, не проверка BIG CHANGE. Используйте лишь при подтверждённых рабочем UID и владельце данных 10000. При неясном владельце, UID, выводе CLI или правах держите остановленным и решите до рестарта.

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

Подтвердите отсутствие нежелательного 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` намеренно продолжает позже.

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

При сбое рестарта проверьте Docker и журналы, затем `$HERMES_DATA/logs/gateways/default/current` и `$HERMES_DATA/logs/container-boot.log`, монтирование, владельца и фиксированную версию. [Примечания v0.22.2](https://github.com/NousResearch/hermes-agent/releases/tag/v0.22.2) описывают исправление работоспособности при старте, а не события на вашем хосте. Не удаляйте состояние для ремонта. При утечке токена остановите, отзовите в BotFather, приватно замените в смонтированном `.env` и проверьте доступ до рестарта. Отзовите лишнее сопряжение и изучите фактические списки.

VPS и модель могут оплачиваться отдельно. Проверьте тариф, ограничения и реальные платежи. Нет обещаний времени, бесплатного лимита или доступности. Telegram и поставщик обрабатывают сообщения, хост хранит секреты и состояние. Это первая проверка одного хоста и бота. Другие руководства BIG CHANGE описывают [резервирование и восстановление Hermes](https://bigchange.ai/blog/hermes-encrypted-github-backup-recovery-guide) и [периодическую задачу Hermes](https://bigchange.ai/blog/hermes-skill-recurring-job-first-run).

## Источники и дополнительные материалы

Материалы по [настройке Docker](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md), [настройке Telegram](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/telegram.md), [доступу шлюза](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/index.md), [безопасности](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/security.md) и [выпуску v0.22.2](https://github.com/NousResearch/hermes-agent/releases/tag/v0.22.2) являются первоисточниками NousResearch. [Быстрый старт](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/getting-started/quickstart.md) объясняет поставщика. Это документация процедуры, не журнал работы VPS или бота BIG CHANGE.

## Sources

- [Выпуск Hermes Agent v0.22.2](https://github.com/NousResearch/hermes-agent/releases/tag/v0.22.2) — Дата и документированное исправление проверки работы при старте.
- [Настройка Docker Hermes, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md) — Каналы образов, монтирование, настройка, надзор, порт и журналы.
- [Официальный Dockerfile, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/Dockerfile) — Точка входа, рабочий UID, HERMES_HOME и CLI-путь ограниченной офлайн-проверки.
- [Хук второго этапа Docker, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/docker/stage2-hook.sh) — Владелец данных и права .env/config после настройки.
- [Настройка Telegram, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/telegram.md) — BotFather, токен, числовой допуск, приватность и пределы доставки.
- [Сообщения и шлюз, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/index.md) — Фактический доступ, проверка сопряжения и отзыв.
- [Безопасность, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/security.md) — Неразрешённые личные сообщения и доступ.
- [Быстрый старт, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/getting-started/quickstart.md) — Путь настройки поставщика модели.