Esta trilha documenta o setup de uma VM Ubuntu remota usada como ambiente Java (Tomcat + PostgreSQL), partindo do primeiro acesso até deixar a aplicação rodando com domínio próprio e HTTPS válido, sem expor portas extras na internet. São 5 fases — cada uma é uma página com instruções prontas pra copiar e colar.
Alguém (um admin, ou um provedor de cloud) entrega uma VM Ubuntu 24.04 LTS com:
A partir daí, tudo o que cabe aqui: trocar senhas, deployar o app, configurar uma rede privada pra administrar a VM sem expor SSH na internet, e colocar o app no ar num subdomínio HTTPS sem precisar abrir nenhuma porta nova.
Os exemplos usam placeholders genéricos como IP_DA_VM, seu-usuario, seu-dominio.com e senha-inicial. Substitua pelos valores reais no seu setup.
A trilha é linear pra leitura, mas as fases 2, 3, 4 e 5 são independentes entre si — só a Fase 1 (Acesso) é pré-requisito real. Tomcat não depende de PostgreSQL, Tailscale não depende de Cloudflare, etc.
| # | Fase | O que entrega |
|---|---|---|
| 1 | Acesso & Setup | Conexão SSH funcionando, senhas trocadas, firewall entendido |
| 2 | Tomcat | WAR deployado, app respondendo na porta 8080 |
| 3 | PostgreSQL | Banco acessível pelo app e por ferramenta gráfica (via SSH) |
| 4 | Tailscale | Rede privada entre notebook e VM, SSH sem porta pública |
| 5 | Cloudflare Tunnel | App no ar em https://app.seu-dominio.com, SSL grátis, porta 8080 fechada |
No fim das 5 fases, o ambiente tem duas portas de entrada bem definidas: usuários da internet entram pelo subdomínio HTTPS via Cloudflare, e o administrador entra pelo Tailscale. Nenhum dos dois caminhos depende de SSH ou porta de app exposta na internet.
INTERNET
│
┌───────────────┴───────────────┐
▼ ▼
https://app.seu-dominio.com ssh / admin
│ │
Cloudflare Edge ◄────TLS │
(SSL grátis, DDoS) │
│ │
│ tunel cloudflared │
│ (saída da VM, sem │
│ porta de entrada) │
▼ ▼
┌─────────────────────────────────────────────────┐
│ VM Ubuntu │
│ • Tomcat (localhost:8080) │
│ • PostgreSQL (localhost:5432) │
│ • cloudflared (serviço) │
│ • tailscaled (serviço, 100.x.y.z na tailnet) │
└─────────────────────────────────────────────────┘
▲
│ Tailscale (WireGuard, criptografado)
│
┌─────────────────────────────────────────────────┐
│ Notebook do admin │
│ • Tailscale (100.x.y.z na mesma tailnet) │
│ • VS Code Remote-SSH via Tailscale IP │
└─────────────────────────────────────────────────┘
Princípios:
Tudo que acontece na primeira hora com a VM. Sem isso, nada do resto roda.
ufwComo colocar o WAR no ar e manter o serviço rodando.
/opt/tomcat/ — onde ficam scripts, configs, libs, logs, webappsscp, mover pro webapps/, hot-deploy automático em ~5 segundossetfacl pra escrever no webapps/ sem sudo (setup uma vez só)curlsystemctl e journalctlBanco já está rodando — falta entender como conectar e como administrar de fora com segurança.
psql dentro da VMALTER USERlisten_addresses = '127.0.0.1' e o ganho de segurançaTailscale é uma mesh-VPN baseada em WireGuard. Cria uma rede privada criptografada (100.x.y.z) entre os dispositivos logados na mesma conta. Plano free cobre até 100 devices.
Tira o app do http://ip:8080 e coloca em https://app.seu-dominio.com com SSL válido, sem abrir nenhuma porta nova. O cloudflared abre uma conexão de saída da VM pra Cloudflare, e a CF roteia o tráfego do subdomínio de volta por essa conexão.
cloudflared, autenticar, criar tunnel, escrever config.yml com as rotassystemd pra subir junto com a VMconfig.yml e rodar 1 comandoFase 1 primeiro, sempre. Sem acesso SSH funcionando e senhas trocadas, nada das outras fases roda.
Depois disso, dá pra pular pelas fases que você precisa agora:
Cada página é uma sessão de trabalho independente — abre, executa, marca como feito, segue pra próxima.