Acesso externo (domínio e túnel Cloudflare)¶
A internet de casa usa CGNAT: a operadora compartilha um IP público entre vários clientes, então não dá para abrir portas no roteador. A solução é o Cloudflare Tunnel: o programa cloudflared, rodando na VM, abre uma conexão de saída para a Cloudflare, e o tráfego do seu domínio volta por ela até o Nginx. Não precisa de IP público nem de port forwarding, e ainda ganha HTTPS grátis.
Pré-requisito: o site já abre pelo IP da VM na rede local (Frontend e Nginx).
1. Domínio na Cloudflare¶
O domínio braggo.com.br foi registrado no Registro.br e adicionado na Cloudflare (plano Free). Para ele funcionar, os servidores DNS no Registro.br precisam ser os nameservers que a Cloudflare indicou para a sua conta.
Confira em dash.cloudflare.com, no domínio, na tela de visão geral: o status deve estar Ativo. Depois de trocar os nameservers, pode levar de alguns minutos até cerca de 24 horas para a Cloudflare reconhecer. Enquanto o status estiver "Pendente", o túnel nomeado ainda não vai servir o domínio.
Invalid nameservers logo depois da troca
O Registro.br deixa o domínio "em transição" por cerca de 1h15 antes de publicar os novos servidores. Nesse tempo a Cloudflare mostra Invalid nameservers. Não refaça a troca: espere e clique em Check nameservers.
Depois de ativo, o e-mail do domínio tem seus próprios registros: veja E-mail (Resend).
2. Teste rápido, sem domínio (opcional)¶
Serve para provar que o caminho VM → Cloudflare funciona antes de configurar o túnel definitivo. Depois de instalar o cloudflared (passo 3):
cloudflared tunnel --url http://localhost:80
Ele imprime uma URL temporária https://algo-aleatorio.trycloudflare.com. Abra no navegador: deve aparecer o seu site. Encerre com Ctrl+C. Essa URL muda a cada execução e não deve ser usada em produção.
3. Instalar o cloudflared na VM¶
sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared any main' | sudo tee /etc/apt/sources.list.d/cloudflared.list
sudo apt update
sudo apt install -y cloudflared
cloudflared --version
Os três primeiros comandos cadastram o repositório oficial da Cloudflare no apt, com a chave de assinatura, e o apt install instala o programa. Assim as atualizações chegam junto com as do sistema. Se algum desses endereços mudar, a página "Downloads" do cloudflared na documentação da Cloudflare tem as instruções atuais.
4. Criar o túnel nomeado¶
Este método é gerenciado pelo painel da Cloudflare, sem arquivos de configuração na VM. Os nomes de menu da Cloudflare mudam de vez em quando; se algo estiver diferente, procure o equivalente.
- Acesse o painel Zero Trust da Cloudflare (dash.cloudflare.com → Zero Trust). Na primeira vez, ele pede para escolher o nome da organização e o plano Free.
- Vá em Networks → Tunnels → Create a tunnel.
- Escolha o tipo Cloudflared e dê um nome, por exemplo
braggo. - Na tela de instalação, escolha Debian e 64-bit. O painel mostra um comando que começa com
sudo cloudflared service installseguido de um token longo. Copie o comando inteiro. -
Cole e rode esse comando na VM:
sudo cloudflared service install TOKEN_GERADO_PELO_PAINELEle instala o
cloudflaredcomo serviço do systemd, que sobe junto com a VM e reconecta sozinho se a internet cair. -
De volta ao painel, o conector deve aparecer como Healthy (ou "Connected").
O token é um segredo
Quem tem o token consegue se passar pelo seu túnel. Não cole em chats, repositórios ou prints. Se vazar, gere um novo no painel (Rotate token) e reinstale o serviço.
5. Apontar o domínio para o Nginx¶
Ainda no assistente do túnel (ou depois, em Networks → Tunnels → braggo → Configure → Published application routes), adicione uma rota:
| Campo | Valor |
|---|---|
| Subdomain | (vazio, para o domínio raiz) |
| Domain | braggo.com.br |
| Path | (vazio) |
| Service type | HTTP |
| URL | localhost:80 |
Isso diz: "quem acessar braggo.com.br, entregue para o Nginx na própria VM, porta 80". A Cloudflare cria automaticamente o registro DNS (CNAME) do domínio para o túnel.
Para o www funcionar também, adicione uma segunda rota igual, com Subdomain www. (Se preferir redirecionar o www para o domínio raiz, faça isso por uma regra de redirecionamento no painel da Cloudflare em vez de uma segunda rota.)
6. Verificar¶
Na VM:
sudo systemctl status cloudflared
sudo journalctl -u cloudflared -n 50 --no-pager
O status deve ser active (running) e o log deve mostrar conexões registradas com a Cloudflare.
No navegador, abra https://braggo.com.br. O cadeado de HTTPS é fornecido pela Cloudflare; não é preciso instalar certificado no Nginx.
7. Segurança¶
- Não abra portas no roteador. Com o túnel não é necessário, e o SSH e o PostgreSQL continuam acessíveis só dentro da sua rede.
- O Nginx ouve na porta 80 apenas para o túnel e para a rede local. Não faz sentido configurar HTTPS nele neste desenho.
- Se quiser proteger uma área (por exemplo, um painel administrativo ou esta documentação) com login, a Cloudflare Access faz isso no próprio painel, sem mexer na aplicação.
- Mantenha o
cloudflaredatualizado com o resto do sistema:sudo apt update && sudo apt upgrade.
Se um dia o IP público ficar disponível¶
Com um IP público fora do CGNAT (a operadora cobra à parte), seria possível abrir as portas 80 e 443 no roteador, instalar um certificado no Nginx (Let's Encrypt) e apontar o DNS direto para o IP. O túnel continua sendo mais simples e mais seguro, porque esconde o IP de casa, então só vale mudar se houver um motivo claro.
Checklist ao final desta etapa¶
- [ ] Domínio com status Ativo na Cloudflare
- [ ]
systemctl status cloudflaredativo e túnel Healthy no painel - [ ]
https://braggo.com.brabre o front - [ ] Login ou qualquer chamada à API funciona pelo domínio
- [ ] Teste de reinício: reinicie a VM e confirme que tudo volta sozinho