AI-translated from English; not yet reviewed by a fluent editor.
# Execute um gateway Hermes Agent em um VPS e confira uma resposta privada no Telegram
> Configure um gateway Hermes Docker com versão conferida em um VPS Linux, permita um remetente privado no Telegram, confirme uma resposta real e verifique reinício e parada.
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.
Um bot privado do Telegram facilita chegar a um agente no VPS, mas uma conexão não prova que a pessoa certa receberá resposta. Começamos com um diretório Hermes Agent novo, permitimos um ID numérico, verificamos uma resposta real e deixamos uma parada conferida. Seguimos as [instruções Docker v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md) e [instruções Telegram](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/telegram.md) da NousResearch, verificadas em 19 de outubro de 2026. A BIG CHANGE não operou VPS, baixou imagem, criou bot ou chamou modelo para este guia.
## A grande mudança
- **O que mudou:** Uma imagem Docker fixada por digest e conferida por versão, com um mount dedicado `/opt/data`, identifica software e estado deste gateway.
- **Por que importa:** A lista numérica de permitidos e uma resposta privada real mostram se a conta pretendida pode usar o gateway.
- **O que observar:** Pareamento ou permissões globais ampliam acesso; um pedido inofensivo não limita ferramentas. Confira permissões, registros, reinício e parada.
Você precisa de autoridade para administrar um VPS Linux por SSH, Docker Engine funcionando e acesso de recuperação do host, conta Telegram para criar bot via BotFather e conta elegível de provedor Hermes. Compare arquitetura e recursos à imagem oficial amd64 ou arm64, e confira acesso e cobrança antes do assistente. Pressupõe-se Docker operacional; instalação e firewall dependem do sistema e provedor. O host precisa alcançar Telegram e modelo por conexões de saída. Reserve diretório privado de estado e restrinja leitores: `/opt/data` guardará credenciais, sessões e registros. [O manual Docker](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md) chama esse mount de fonte persistente de referência.
## 1. Fixe a imagem antes da configuração
Conecte via SSH e mantenha o mesmo shell. A tag `stable` pode mudar. Baixe, registre o digest do repositório e confirme a versão que a própria imagem informa: `0.22.2`. Pare se for diferente, faltar digest, já houver estado ou um contêiner chamado `hermes`. Atualize as instruções para a versão real ou obtenha imagem documentada correspondente antes de seguir. O digest fixa a imagem, mas não prova sozinho sua versão.
```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` interrompe a sequência se Docker estiver indisponível, falhar o download/inspect ou o comando de versão. As verificações explícitas também param um digest vazio ou outra versão. Não prossiga à configuração nesses casos. Guarde o valor `nousresearch/hermes-agent@sha256:…` registrado. Configuração e gateway usam `IMAGE_REF`, impedindo troca silenciosa por mudança posterior da tag. O leitor deve verificar no VPS real; o artigo não fornece digest validado. Use diretório novo dedicado no sistema de arquivos nativo. Nunca execute dois gateways nos mesmos dados.
## 2. Configure provedor e um remetente privado
Execute o [assistente de configuração Docker](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md) com o diretório montado. Escolha rota de modelo permitida, autentique e inspecione provedor/modelo. Acesso e custo dependem da conta. Configuração salva não prova pedido bem-sucedido.
```sh
docker run -it --rm -v "$HERMES_DATA:/opt/data" "$IMAGE_REF" setup
```
No Telegram, peça a [@BotFather](https://t.me/BotFather) um bot com `/newbot` e mantenha o token privado. Obtenha o **ID numérico Telegram do remetente**, por exemplo pelo método indicado no [manual Telegram](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/telegram.md); nome de usuário não é ID. O assistente ou `hermes gateway setup` escreve token e lista. Manualmente, coloque `TELEGRAM_BOT_TOKEN=<private token>` e `TELEGRAM_ALLOWED_USERS=<your numeric ID>` em `$HERMES_DATA/.env`, visível como `/opt/data/.env` dentro do contêiner. Não exponha token em comandos, histórico, notas compartilhadas ou neste artigo.
Em `$HERMES_DATA/config.yaml` (`/opt/data/config.yaml` no contêiner), defina o comportamento global de mensagens privadas não autorizadas:
```yaml
unauthorized_dm_behavior: ignore
```
Após a saída do contêiner de configuração, a imagem pode ter mudado `$HERMES_DATA` para o UID de execução10000. O início restringe `.env` ao modo `600` e um `config.yaml` existente a `640`; uma configuração criada nesse início pode exigir igual restrição. Um login SSH comum talvez não abra esses arquivos. Se faltarem chaves, um **administrador autorizado do host** pode inspecionar e editar os dois arquivos exatos com `sudo` e restaurar proprietário e modos privados. Um editor como UID 10000 pode não atravessar um `$HOME` do usuário de login; por isso se usa administração do host. Em host com `sudo` e `vi`, use após conferir metadados de proprietário/modo sem segredos. Com outro UID ou arquivo ausente, pare e resolva o acesso primeiro.
```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"
```
A saída final de `stat` deve mostrar UID/GID 10000 nos dois arquivos, modo do diretório `700`, `.env` modo `600` e `config.yaml` modo `640`. São metadados, não credenciais. O `chown` atinge só os dois arquivos, incluindo substituição criada pelo editor. Se não houver `sudo` ou `vi`, use administração autorizada com a mesma conferência. Não torne os dados legíveis por todos nem remapeie o usuário do contêiner.
Preserve os ajustes do provedor ao editar. Nenhuma substituição Telegram de `unauthorized_dm_behavior` deve definir `pair`, nem ajuste global `GATEWAY_ALLOWED_USERS` ou `GATEWAY_ALLOW_ALL_USERS` ampliar acesso. Em `config.yaml`, confira também que nem `gateway.allow_all_users` nem o parâmetro superior `allow_all_users` sejam true, e nenhuma lista global/Telegram tenha remetente adicional. Não use `*` em listas, adicione grupos ou aprove códigos de pareamento. Diretório novo evita permissões herdadas; com dados anteriores, pare e inspecione sem sobrescrever. Mantenha privacidade de grupos do BotFather, não adicione o bot a grupos nem o torne administrador. O [manual de acesso do gateway](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/index.md) trata listas e pareamentos persistentes como caminhos separados. O [manual de segurança](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/security.md) descreve `ignore` como descarte silencioso de mensagens não autorizadas.
A lista controla quem inicia conversa, não o que faz o agente autorizado. Sessões Telegram Hermes incluem terminal por padrão. Revise ferramentas, mounts, provedor e política do host antes de permitir o remetente. Pedido inofensivo de teste é apenas pedido.
## 3. Inicie e confira a primeira resposta
Inicie um contêiner nomeado pelo digest registrado. O comando Docker publicado contém `-p 8642:8642` opcional para API; omita, pois mensagem privada dispensa porta pública de API ou painel. A imagem supervisiona o gateway; a política Docker `unless-stopped` controla reinício quando o Docker inicia. O diretório mantém ajustes e sessões nos reinícios.
```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
```
Confirme estado `running`, veja conexão Telegram e erros nos registros e leia pareamentos antes do pedido. Se qualquer leitura inicial falhar, o bloco para o gateway e mostra estado; resultado CLI/permissão desconhecido não autoriza seguir. Confirme `exited` antes de investigar, sem mensagem ou reinício na incerteza. Não deve haver outro remetente aprovado; se houver, pare e confira a parada. `docker exec` não roda contra contêiner parado; a entrada comum pode restaurar um gateway anterior. Na instalação nova com UID padrão, a verificação offline abaixo roda só a CLI Hermes fixada como UID 10000, sem rede e sem iniciar gateway. É adaptação dos comandos e entrada documentados, não teste BIG CHANGE. Use só após confirmar UID ativo e proprietário 10000. Se proprietário, UID, saída CLI ou permissões forem incertos, mantenha parado e resolva antes de reiniciar.
```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
```
Confirme que o ID indesejado saiu da lista final. Examine em privado `$HERMES_DATA/.env` e `config.yaml` para outras listas de plataforma/globais, `*` ou permissão total. Remova concessões pelo caminho documentado. Mantenha parado até revisar todos os acessos. Apagar uma entrada não revoga pareamento independente ou permissão global. Após conferir, `docker start hermes` retoma deliberadamente o contêiner original; confira registros e pareamentos antes de conversar.
Na conta permitida abra um chat **privado** com o bot e envie algo inofensivo como “Responda com uma saudação breve”. Confirme resposta real e registro/sessão correspondente. Mensagem enviada, digitação, status ou configuração concluída não são resposta. O comando Telegram `/whoami` mostra o escopo ativo, não prova autorização do host. Guarde só evidência não sensível.
Sem resposta, leia primeiro estado e `docker logs --tail 50 hermes`. Confira token, valor numérico exato de `TELEGRAM_ALLOWED_USERS`, autenticação e elegibilidade do provedor e saída de rede. Se o turno for incerto, leia chat e registros antes de repetir. O início a frio pode descartar atualizações pendentes; deduplicação é limitada à memória. Não há garantia de entrega exatamente uma vez.
## 4. Confira reinício, parada e recuperação
Terminado o primeiro turno, reinicie o mesmo contêiner, veja registros novos e estado retido em `/opt/data`, depois envie pedido privado inofensivo **novo** e confirme a resposta. Pare e leia o estado Docker. `exited` sinaliza parada; silêncio no chat não basta. `docker start hermes` é a retomada intencional mais tarde.
```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
```
Se falhar, confira Docker e registros, depois `$HERMES_DATA/logs/gateways/default/current` e `$HERMES_DATA/logs/container-boot.log`, mount, proprietário e imagem/versão fixadas. As [notas v0.22.2](https://github.com/NousResearch/hermes-agent/releases/tag/v0.22.2) descrevem correção da atividade no início, não o ocorrido no seu host. Não apague o estado para reparar. Se token vazar, pare, revogue no BotFather, troque em privado no arquivo montado `.env` e revise acesso antes de reiniciar. Revogue pareamentos indesejados e examine listas efetivas.
VPS e modelo podem cobrar separadamente. Confira plano, limites e custos reais; não se promete duração, franquia gratuita ou disponibilidade. Telegram e provedor processam mensagens; o host retém segredos e estado. É uma verificação de primeira resposta de um host e bot. Outros guias BIG CHANGE cobrem [backup e recuperação do Hermes](https://bigchange.ai/blog/hermes-encrypted-github-backup-recovery-guide) e [um trabalho recorrente do Hermes](https://bigchange.ai/blog/hermes-skill-recurring-job-first-run).
## Fontes e leitura adicional
Os guias de [configuração Docker](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md), [configuração Telegram](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/telegram.md), [acesso do gateway](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/index.md), [segurança](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/security.md) e [versão v0.22.2](https://github.com/NousResearch/hermes-agent/releases/tag/v0.22.2) são fontes primárias da NousResearch. O [início rápido](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/getting-started/quickstart.md) explica o provedor. Documentam procedimento, não operação de VPS ou bot pela BIG CHANGE.
## Sources
- [Versão Hermes Agent v0.22.2](https://github.com/NousResearch/hermes-agent/releases/tag/v0.22.2) — Data e correção documentada da atividade no início.
- [Configuração Docker Hermes, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/docker.md) — Canais de imagem, montagem, configuração, supervisão, porta e registros.
- [Dockerfile oficial, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/Dockerfile) — Entrada, UID de execução, HERMES_HOME e caminho CLI para verificação offline limitada.
- [Hook da segunda etapa Docker, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/docker/stage2-hook.sh) — Propriedade dos dados e permissões .env/config depois de configurar.
- [Configuração Telegram, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/telegram.md) — BotFather, token, lista numérica, privacidade e limites de entrega.
- [Mensagens e gateway, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/messaging/index.md) — Acesso efetivo, conferência de pareamento e revogação.
- [Segurança, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/user-guide/security.md) — Mensagens não autorizadas e limites de acesso.
- [Início rápido, v0.22.2](https://raw.githubusercontent.com/NousResearch/hermes-agent/v0.22.2/website/docs/getting-started/quickstart.md) — Rota de configuração do provedor de modelo.
Newsletter da BIG CHANGE
A visão ampla, no seu ritmo.
Matérias recentes sobre IA e robótica, mudanças que merecem atenção e ideias práticas para usar. Escolha um briefing diário, um resumo semanal ou uma perspectiva mensal.
Next scheduled send (UTC): . Your first edition arrives at the next scheduled send after you confirm.
Sua privacidade, sua escolha.
O armazenamento necessário ajuda a proteger o site e a lembrar suas escolhas. O Google Analytics opcional permanece desativado até você autorizá-lo. Você pode ler todas as matérias usando apenas o armazenamento necessário. Detalhes de privacidade