Visão Geral — Setup do Servidor

0:00 / 0:00

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.

O cenário — o que existe antes de começar +

Alguém (um admin, ou um provedor de cloud) entrega uma VM Ubuntu 24.04 LTS com:

  • Acesso por SSH (IP público, porta 22, usuário e senha iniciais)
  • Java 8 (Temurin OpenJDK) e Apache Tomcat 9 instalados
  • PostgreSQL 16 rodando só dentro da VM (sem porta externa)
  • Sudo total dentro da VM, isolada do host por firewall

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.

As 5 fases em ordem +

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.

#FaseO que entrega
1Acesso & SetupConexão SSH funcionando, senhas trocadas, firewall entendido
2TomcatWAR deployado, app respondendo na porta 8080
3PostgreSQLBanco acessível pelo app e por ferramenta gráfica (via SSH)
4TailscaleRede privada entre notebook e VM, SSH sem porta pública
5Cloudflare TunnelApp no ar em https://app.seu-dominio.com, SSL grátis, porta 8080 fechada
Arquitetura final — como tudo se conecta +

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:

  • Apps públicos saem pela tunnel Cloudflare — é uma conexão de saída da VM, não precisa abrir porta nova
  • Acesso administrativo passa pelo Tailscale — sem expor SSH na internet
  • Portas 22 e 8080 públicas ficam abertas no começo, mas a meta é fechar a 8080 depois do tunnel estável, e (opcionalmente) fechar a 22 depois do Tailscale estável
Fase 1 — Acesso & Setup inicial +

Tudo que acontece na primeira hora com a VM. Sem isso, nada do resto roda.

  • Conectar via SSH do Windows (Windows Terminal, PuTTY, MobaXterm) com usuário e senha iniciais
  • Troca de senha obrigatória no primeiro login — o sistema força antes de dar o shell
  • Sudo total dentro da VM e o modelo de responsabilidades (admin da VM vs admin do host)
  • Rede e firewall — IP, gateway, DNS, portas abertas, como abrir mais com ufw
  • Checklist do primeiro acesso — sequência mínima pra deixar a VM utilizável
  • Bônus: chave SSH — login sem digitar senha
Fase 2 — Tomcat (servidor de aplicação Java) +

Como colocar o WAR no ar e manter o serviço rodando.

  • Estrutura do /opt/tomcat/ — onde ficam scripts, configs, libs, logs, webapps
  • Deploy de WAR — copiar via scp, mover pro webapps/, hot-deploy automático em ~5 segundos
  • Dica de produtividadesetfacl pra escrever no webapps/ sem sudo (setup uma vez só)
  • Tomcat Manager (opcional) — interface web pra deploy via browser ou curl
  • Restart e leitura de logssystemctl e journalctl
Fase 3 — PostgreSQL +

Banco já está rodando — falta entender como conectar e como administrar de fora com segurança.

  • Conexão via psql dentro da VM
  • Troca de senha do usuário do banco com ALTER USER
  • String de conexão JDBC pro Tomcat e qual driver usar
  • Por que o Postgres não está expostolisten_addresses = '127.0.0.1' e o ganho de segurança
  • Acesso de fora via port-forward SSH — DBeaver / pgAdmin no notebook conectam num túnel local sem abrir porta no servidor
Fase 4 — Tailscale (rede privada notebook ↔ VM) +

Tailscale é 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.

  • Por que usar — sem expor SSH na internet pública, funciona de qualquer rede (casa, escritório, café), criptografia ponta-a-ponta
  • Criar conta e instalar no notebook Windows
  • Instalar na VM com 1 comando + ativar Tailscale SSH (autenticação Tailscale-nativa, mais segura)
  • SSH via Tailscale usando o nome curto do host ou o IP da tailnet
  • Fechar a porta 22 pública (opcional) — só depois de testar que Tailscale funciona, senão perde acesso
Fase 5 — Cloudflare Tunnel + SSL +

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.

  • Cloudflare DNS — criar conta, adicionar domínio, trocar nameservers no registrar, ativar Universal SSL
  • Cloudflare Tunnel — instalar cloudflared, autenticar, criar tunnel, escrever config.yml com as rotas
  • Rotear DNS automaticamente — cria CNAME no Cloudflare apontando pro tunnel
  • Instalar como serviço com systemd pra subir junto com a VM
  • Fechar a porta 8080 pública — Tomcat passa a responder só pelo tunnel
  • Múltiplos subdomínios — adicionar novos apps é editar o config.yml e rodar 1 comando
Como ler esta trilha +

Fase 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:

  • Quer só deployar um WAR e testar? Fase 1 → Fase 2. Pronto.
  • Quer o app conversando com banco? Fase 1 → Fase 2 → Fase 3.
  • Quer administrar a VM com segurança sem SSH público? Fase 1 → Fase 4.
  • Quer o app no ar com domínio próprio e HTTPS? Fase 1 → Fase 2 → Fase 5.
  • Quer tudo? Lê na ordem 1 → 2 → 3 → 4 → 5.

Cada página é uma sessão de trabalho independente — abre, executa, marca como feito, segue pra próxima.