Jay.AI / Biblioteca Técnica / Hermes Agent / Apêndice Biblioteca

Volume 07 · Apêndice · Agosto de 2026

A VPS que não custa nada.

Do cadastro até o servidor rodando Docker com firewall fechado, backup ligado e SSH endurecido. Escrito para Windows, para uma conta nova, com os limites que a Oracle pratica hoje.

2 OCPUs ARM 12 GB de RAM 200 GB de disco R$ 0 por mês, sem prazo
Jaya Roberta sentada numa plataforma circular futurista, sustentando um globo luminoso numa das mãos e tocando um painel de ícones de ferramentas com a outra
Jay.AI Technical Library A máquina é de graça. A disciplina de configurá-la, não.
Guia independente. Não é documento oficial da Oracle e não tem vínculo com a empresa. Cada passo que envolve limite ou política traz o link da documentação oficial no rodapé. Confira lá antes de decidir qualquer coisa irreversível.
01

Criar a conta

Trinta minutos, e o único ponto do processo onde uma recusa é definitiva.

Comece em oracle.com/cloud/free. Você vai precisar de:

  • Nome, endereço e telefone reais.
  • CPF.
  • Cartão de crédito internacional físico. Virtual, descartável ou pré-pago costuma ser recusado pelo antifraude.
  • Uma autorização temporária de cerca de US$ 1 no cartão. Não é cobrança, cai sozinha.
Armadilha

Desative VPN e bloqueador de anúncio antes de abrir o formulário, e escreva o endereço exatamente como está no cadastro do cartão. Se a primeira tentativa falhar, não tente de novo com outro e-mail: múltiplas tentativas acionam o antifraude e aí a conta trava de vez. Uma conta gratuita por pessoa.

O que acontece nos primeiros 30 dias

A conta nasce com US$ 300 em créditos de teste, válidos por 30 dias. Isso confunde muita gente: durante esse período você consegue criar recursos que não são gratuitos, e eles somem quando o trial acaba. Regra prática: se o painel não marcar Always Free Eligible, não crie.

DIA 0 — DIA 30 · CRÉDITOS DE TESTE US$ 300 · dá para criar recurso PAGO DIA 30 ALWAYS FREE · SEM PRAZO DE VALIDADE 2 OCPUs ARM · 12 GB · 200 GB de disco continua de pé por tempo indeterminado CRIADO AQUI SEM O SELO funciona agora, some no dia 30
A confusão dos primeiros 30 dias. Os créditos de teste deixam você criar máquinas que não são gratuitas, e elas funcionam normalmente enquanto o trial dura. A régua é uma só: se o painel não marcar Always Free Eligible, aquilo tem prazo de validade, mesmo parecendo idêntico ao resto.

Passados os 30 dias, sem upgrade, a conta vira Always Free pura. Os recursos gratuitos continuam de pé por tempo indeterminado. Não é trial disfarçado.

02

Escolher a região

A decisão irreversível do manual inteiro.

A região que você escolhe no cadastro vira a home region da conta, e instância de computação Always Free só existe lá. Não dá para trocar depois em conta gratuita.

RegiãoIdentificadorNota
Brazil East — São Paulosa-saopaulo-1Menor latência de Brasília. Também a mais disputada.
Brazil Southeast — Vinhedosa-vinhedo-1Alguns milissegundos a mais, historicamente menos concorrida.

Para servidor de automação — n8n, bots, APIs internas — a diferença de latência entre as duas é irrelevante. O que importa é qual delas tem máquina ARM livre, e a Oracle não mostra isso antes de você tentar criar. Se São Paulo recusar de forma persistente, Vinhedo é uma troca barata.

03

Criar a VPS

Compute → Instances → Create instance.

Nome

Algo que você reconheça em seis meses, por exemplo jaya-server.

Image

Ubuntu 24.04 ou Oracle Linux 9. Ubuntu tem mais tutorial e mais imagem Docker pronta.

Shape

Change shape → Ampere → VM.Standard.A1.Flex. Confirme que aparece o selo Always Free Eligible. Se não aparecer, você está prestes a gerar fatura.

Capacidade

2 OCPUs e 12 GB de RAM, a cota inteira numa máquina só.

Rede

Crie uma VCN nova, com IP público atribuído.

SSH keys

Generate a key pair for me. Baixe a chave privada e guarde num lugar que você não vai formatar.

Boot volume

Mínimo de 47 GB. Sua cota total de disco é 200 GB.

Não escolha

A2, E4, E5, Intel, GPU ou qualquer shape sem o selo Always Free Eligible. Durante os 30 dias de crédito eles funcionam normalmente e você só descobre o problema quando o trial acaba.

ARM roda o Hermes, sim

O Volume 07 pede Ubuntu 24.04 x86_64, e esta máquina é aarch64. Não é incompatibilidade: a imagem oficial do Hermes publica linux/arm64 e linux/amd64 na mesma tag, com tratamento explícito de arquitetura no Dockerfile. Provisione ARM aqui e siga o volume com a mesma tag fixada.

Contexto que mudou em 2026

Até junho de 2026 a cota ARM era de 4 OCPUs e 24 GB. A Oracle cortou pela metade em 15 de junho de 2026, sem anúncio público. Praticamente todo tutorial que você achar no Google ainda promete 24 GB, está desatualizado. E há um detalhe cruel na mudança: instância existente que for terminada pode não ser recriável acima do limite novo. Ou seja, não destrua uma máquina boa achando que recria igual.

04

Quando aparecer “Out of capacity”

É a resposta mais comum na primeira tentativa. Não é erro seu.

O ARM gratuito vive lotado. Na ordem, tente:

Repetir em outro horário

Algumas horas depois, em faixa diferente. Madrugada costuma render.

Pedir metade

1 OCPU e 6 GB entram onde a cota cheia não entra. Você sobe agora e cresce depois.

Trocar de Availability Domain

Se a região tiver mais de um.

Plano B real, com uma condição

VM.Standard.E2.1.Micro, x86, também gratuita, mas com 1 GB de RAM. Dá para dois desses.

O que 1 GB significa na prática

A documentação do Hermes pede 1 GB como mínimo absoluto e 2 a 4 GB como recomendado, e avisa que a automação de navegador (Playwright/Chromium) é a funcionalidade mais faminta, exigindo pelo menos 2 GB sozinha. Na E2.1.Micro você fica no piso: o agente sobe, responde no Telegram e trabalha com texto, mas as ferramentas de navegador ficam desligadas. É escolha legítima; só não é a mesma máquina.

O upgrade para Pay As You Go, os dois lados

Você vai ler em fórum que migrar para PAYG resolve o “out of capacity”. Historicamente resolve mesmo: contas pagas têm prioridade de capacidade, e os recursos Always Free continuam gratuitos dentro da cota.

O custo é que você perde a rede de proteção. Numa conta gratuita, criar algo fora da cota simplesmente falha. Numa conta PAYG, funciona e cobra. Um clique distraído num shape errado vira fatura em dólar.

Se migrar, crie o cinto de segurança primeiro

Em 2026 o argumento ficou mais fraco: segundo o InfoQ, o suporte da Oracle deu informação conflitante sobre se o corte de cota atinge PAYG também. Esgote os quatro itens acima antes. Se migrar, a primeira coisa a fazer é criar um budget alert em Billing & Cost Management → Budgets, com alerta em US$ 1.

05

Conectar do Windows

Aqui trava a primeira vez, e não é culpa da Oracle.

Quando a instância ficar verde como Running, copie o IP público. O comando é:

Primeiro acessoPowerShell
# Ubuntu
ssh -i "C:\caminho\para\sua-chave.key" ubuntu@SEU_IP_PUBLICO

# Oracle Linux
ssh -i "C:\caminho\para\sua-chave.key" opc@SEU_IP_PUBLICO
O erro que vai aparecer

WARNING: UNPROTECTED PRIVATE KEY FILE! — o OpenSSH do Windows recusa a chave porque o arquivo herdou permissões amplas da pasta Downloads. Não é problema da chave.

No PowerShell, remova a herança e deixe só o seu usuário com leitura:

Corrigir permissões da chavePowerShell
icacls "C:\caminho\para\sua-chave.key" /inheritance:r
icacls "C:\caminho\para\sua-chave.key" /grant:r "$($env:USERNAME):(R)"

Rode o ssh de novo. Entra.

Regra sem exceção

A chave privada é a chave da casa. Não sobe para GitHub, não vai por WhatsApp, não entra em prompt de IA nenhuma, inclusive nesta conversa. Se ela vazar, a máquina é de quem tem o arquivo.

06

Os dois firewalls

O item que falta em quase todo tutorial, e o motivo nº 1 de “meu site não abre”.

Sua VPS está atrás de duas barreiras independentes. Abrir só uma não adianta, e o sintoma é enganoso: a porta parece aberta no painel e a conexão morre em silêncio.

AS DUAS ABERTAS Internet :80 :443 Security List / NSG camada 1 · painel da OCI ingress 80,443 = OK iptables / firewalld camada 2 · dentro da VPS regra ACIMA do REJECT app responde SÓ A CAMADA 1 ABERTA — O CASO QUE ENGANA Internet :80 :443 Security List / NSG aberta no painel iptables · REJECT pacote descartado aqui timeout silencioso
Por que abrir uma só não adianta. As duas barreiras são independentes e ficam em lugares diferentes: uma no painel web, outra dentro do sistema. Com a camada 1 aberta e a 2 fechada, o painel mostra a porta liberada e a conexão morre em silêncio, sem mensagem de erro. É o sintoma que faz todo mundo culpar a aplicação.
CamadaOnde ficaO que faz
Security List / NSGPainel web da OCI, dentro da VCNFiltra antes do pacote chegar na máquina.
iptables / firewalldDentro do sistema, já vem ligado na imagemFiltra depois. Bloqueia 80 e 443 por padrão.

Camada 1 — no painel

Networking → Virtual Cloud Networks → sua VCN → Security Lists → Default Security List → Add Ingress Rules:

  • Stateless: No
  • Source CIDR: 0.0.0.0/0
  • IP Protocol: TCP
  • Destination Port Range: 80,443

Camada 2 — dentro da máquina (Ubuntu)

A imagem Ubuntu da OCI já vem com regras de iptables e uma regra REJECT no fim da cadeia. Se você acrescentar a sua regra depois do REJECT, ela nunca é lida. Por isso: primeiro descubra a posição do REJECT.

Achar a linha do REJECTUbuntu
sudo iptables -L INPUT --line-numbers

Procure a linha REJECT all -- anywhere anywhere reject-with icmp-host-prohibited e anote o número dela. Supondo que seja 6, insira antes:

Abrir 80 e 443 acima do REJECTUbuntu
sudo iptables -I INPUT 6 -p tcp --dport 80 -m state --state NEW -j ACCEPT
sudo iptables -I INPUT 6 -p tcp --dport 443 -m state --state NEW -j ACCEPT
sudo netfilter-persistent save

Confira com sudo iptables -L INPUT --line-numbers que as duas linhas ficaram acima do REJECT. Sem o netfilter-persistent save, tudo volta ao normal no próximo reboot.

Aqui o Volume 07 e este manual divergem, de propósito

O capítulo de segurança do volume usa UFW com deny incoming, e está certo para uma VPS comum. Nas imagens Ubuntu da OCI, não: a própria Oracle recomenda editar o iptables direto, porque a imagem já vem com um conjunto de regras próprio. UFW por cima disso gera um estado confuso, difícil de depurar depois. Nesta máquina, siga este capítulo e pule o bloco de UFW do volume. O fail2ban e o resto do endurecimento continuam valendo.

Camada 2 — Oracle Linux 9

Abrir 80 e 443Oracle Linux 9
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload
07

Docker sem abrir buraco

Onde o firewall que você acabou de configurar deixa de valer.

Instalação, em ARM, é a mesma de sempre:

Instalar o DockerUbuntu ARM
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER
# saia e entre de novo no SSH para o grupo valer
O furo

O Docker escreve as próprias regras de rede e passa por cima do iptables. Um container publicado como -p 5678:5678 fica exposto na internet inteira mesmo com a porta 5678 fechada no seu firewall e na Security List. É assim que painel de n8n e banco de dados aparecem no Shodan.

ERRADO — 5678:5678 Internet iptables passa por cima contêiner 0.0.0.0:5678 porta 5678 fechada no painel porta 5678 fechada no iptables e ainda assim: exposta CERTO — 127.0.0.1:5678:5678 Internet proxy :80 :443 TLS contêiner 127.0.0.1 só o proxy está publicado o resto só existe de dentro superfície: uma porta
O furo mais comum de VPS caseira. O Docker escreve as próprias regras de rede e as insere antes das suas. Publicar em 0.0.0.0 expõe o contêiner mesmo com a porta fechada nas duas camadas de firewall. Amarrar em 127.0.0.1 devolve o controle: só o proxy reverso fica visível.

A correção é publicar sempre amarrado ao localhost, e colocar um proxy reverso na frente para quem precisa de acesso externo:

Publicação de portasdocker-compose.yml
# errado — exposto para a internet
ports:
  - "5678:5678"

# certo — só acessível de dentro da máquina
ports:
  - "127.0.0.1:5678:5678"

Na frente disso, um Caddy ou Nginx nas portas 80/443, com HTTPS e autenticação. Só ele fica publicado.

Arquitetura das imagens

Sua máquina é aarch64, não x86. Confirme com uname -m. A maioria das imagens grandes já publica linux/arm64, mas nem todas. Antes de brigar com um container que não sobe:

Confirmar suporte ARMUbuntu ARM
docker manifest inspect nome-da-imagem:tag | grep arm64

Sem resultado, aquela imagem não roda aí. Procure a variante ARM ou outro projeto.

08

Endurecer o SSH

Quinze minutos que separam um servidor seu de um servidor de outra pessoa.

IP público na internet começa a receber tentativa de login em minutos. Não é ataque direcionado, é varredura automática, e ela nunca para.

Atualizar e conferir a configuraçãoUbuntu
sudo apt update && sudo apt upgrade -y
sudo grep -E "^PasswordAuthentication|^PermitRootLogin" /etc/ssh/sshd_config

Você quer ver PasswordAuthentication no. As imagens da OCI já vêm assim, mas confirmar é barato. Se estiver yes, troque para no e rode sudo systemctl restart ssh sem fechar a sessão atual, e testando o login numa segunda janela antes de sair.

fail2ban e atualização automática de segurança

Instalar as duas proteçõesUbuntu
sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
Regra de portas

Abertas: 22 para SSH, 80 e 443 para web. Mais nada. Banco de dados, painel de administração e API interna se acessam por túnel SSH ou por uma rede privada como Tailscale, nunca publicados direto.

09

Backup

Sua cota inclui 5 backups de volume. Usar zero deles é escolha, não descuido.

No painel: Storage → Boot Volumes → seu volume → Create Manual Backup. O momento certo de tirar o primeiro é agora, com a máquina limpa e configurada, antes de instalar qualquer coisa. Esse é o ponto para onde você volta quando quebrar algo.

Cuidado com as Backup Policies

As políticas automáticas (Bronze, Silver, Gold) geram backups em série e podem estourar os 5 gratuitos. Em conta Always Free, prefira o backup manual em momentos que você escolhe: antes de uma mudança grande, depois de uma configuração que funcionou.

O que backup de volume não cobre

Snapshot de disco te devolve a máquina. Não te devolve um arquivo específico às pressas, e some junto se a conta cair. Para os dados que doem — banco do n8n, credenciais, arquivos de trabalho — mantenha uma cópia fora da Oracle: um rsync ou rclone agendado no cron para outro destino. Regra velha: backup que mora no mesmo lugar que o original não é backup.

10

Não perder a máquina

Duas formas de perder uma VPS gratuita, e as duas são silenciosas.

Recuperação por ociosidade

A Oracle se reserva o direito de recuperar instância Always Free considerada ociosa. O critério oficial é uma janela de 7 dias em que os três itens abaixo são verdadeiros ao mesmo tempo:

  • CPU no percentil 95 abaixo de 20%
  • Uso de rede abaixo de 20%
  • Uso de memória abaixo de 20%, este só se aplica a shapes A1

Vale conhecer o número real: 20% de 12 GB são 2,4 GB. Um n8n parado com dois ou três containers pode ficar abaixo disso e cair nos três critérios simultaneamente. Não existe truque oficial contra isso, e prometer um seria mentira: o que protege é uso de verdade. Se a máquina vai ficar realmente ociosa por semanas, ela está em risco, e vale saber disso antes de colocar algo importante nela.

Há um efeito colateral interessante no outro sentido. Basta uma das três métricas acima do limite para barrar a recuperação, e o Hermes com as ferramentas de navegador ativas trabalha na faixa de 2 a 4 GB, acima do corte de 2,4 GB. Nesse cenário o critério de memória sozinho protege a máquina, mesmo com a CPU ociosa. É margem estreita, não é garantia: depende de o Chromium ficar residente. Isso se mede depois de uma semana rodando, não se supõe.

Medir antes de confiarUbuntu
# depois de uma semana rodando, não antes
free -m
# a coluna "used" é o que a Oracle compara com os 20% de 12 GB

IP público

O IP efêmero acompanha a instância enquanto ela existir. Se você terminar a instância, o IP vai junto, e qualquer domínio apontado para ele quebra. A documentação Always Free que consultei não lista IP público reservado entre os recursos gratuitos; antes de reservar um, confira a cota no painel para não gerar cobrança.

Regra de sobrevivência

Conta gratuita não tem SLA e não tem suporte. Ela é excelente para automação, laboratório, bot e serviço interno. Não é lugar para a única cópia de nada.

11

Checklist final

Se todos estiverem marcados, o servidor está pronto para receber carga.

Jaya Roberta diante de um painel holográfico do Hermes Agent, com ícones de Telegram e Docker ligados por linhas de luz a um notebook
A máquina está pronta

Agora o inquilino.

Daqui em diante o Volume 07 assume: contêiner com tag fixada, bot do Telegram com allowlist fechada, segredos com chmod 600 e o teste negativo que separa “parece pronto” de pronto. Você já tem o mais difícil, um servidor que não desliga e não custa nada.