Guia do zero · sem enrolação

Coloque seus apps no ar: servidor + domínio

Um passo a passo pra quem nunca mexeu com servidor. No final, você tem seus programas rodando na internet, cada um num endereço tipo meuapp.seudominio.com, com o cadeado de segurança (HTTPS) automático.

O que você vai ter no fim: um servidor na nuvem rodando quantos apps quiser, cada um no seu endereço, atrás de um “porteiro” que cuida do HTTPS sozinho. Copiando exatamente o que está aqui.
Como as peças se encaixam
Visitante
digita o endereço no navegador
Domínio (DNS)
o nome aponta pro IP do servidor
VPS
seu servidor na nuvem
Caddy
porteiro: HTTPS + manda pro app certo
Seus apps
rodando em containers

Você monta isso da direita pra esquerda: primeiro o servidor e os apps, depois o porteiro, e por último aponta o domínio. Vamos por partes.

Antes de começar · o que comprar

1. Uma VPS

~ US$ 5 a 7 / mês

É um computador na nuvem, ligado 24h, que você controla. “VPS” = servidor virtual privado.

  • Onde: Hetzner (barato), DigitalOcean, Vultr ou Contabo
  • Sistema: escolha Ubuntu 24.04
  • Tamanho: o menor plano (1–2 GB de RAM) já roda vários apps pequenos

2. Um domínio

~ R$ 40 / ano

É o nome bonito do seu site (ex.: seudominio.com). Sem ele, só o número (IP).

  • Onde: Registro.br (.com.br), Namecheap, Cloudflare, GoDaddy
  • Se já tiver um (num Wix, por ex.), dá pra usar o mesmo
  • Um domínio serve pra vários apps (com subdomínios)
Anote isso

Ao criar a VPS o provedor te dá três coisas: o IP (tipo 203.0.113.10), o usuário (root) e uma senha (ou uma chave). Guarde bem — é o que abre a porta do servidor.

Passo a passo
1

Criar a VPS

No site do provedor (Hetzner / DigitalOcean / etc.)

Crie a conta, clique em criar servidor (às vezes chamado de “droplet” ou “instance”), escolha Ubuntu 24.04 e o plano mais barato. Em 1–2 minutos ele fica pronto e mostra o IP. Copie o IP — vamos usar em tudo.

2

Apontar o domínio pro servidor

No painel de onde você comprou o domínio (a parte de “DNS”)

DNS é a “agenda de contatos” da internet: ele diz qual nome leva a qual IP. Você cria registros do tipo A (nome → IP):

Registros DNS (tipo A)
Tipo   Nome    Valor (aponta para)
A      @       SEU_IP        # o domínio raiz (seudominio.com)
A      www     SEU_IP
A      app1    SEU_IP        # vira app1.seudominio.com
A      app2    SEU_IP        # um por app...
Atalho

Pra não criar um registro por app, dá pra usar um curinga: Nome: *SEU_IP. Aí qualquer subdomínio já cai no servidor.

Cuidado

DNS demora pra “espalhar” — de alguns minutos até algumas horas. Se o endereço não abrir logo, espere e teste de novo. Troque SEU_IP pelo IP real da sua VPS.

3

Entrar no servidor (SSH)

No seu PC — Windows: abra o “Terminal” ou o PowerShell

SSH é o jeito de controlar o servidor por texto, de longe. Abra o terminal do seu computador e digite (troque pelo seu IP):

no seu PC
$ ssh root@SEU_IP

Ele pergunta a senha (a que o provedor te deu). Ao digitar, não aparece nada na tela — é normal, é segurança. Aperte Enter. Deu certo? Você está “dentro” do servidor.

4

Preparar o servidor

Rode estes comandos dentro da VPS (um de cada vez)

Primeiro atualize tudo. Depois instale o Docker — o programa que roda seus apps em “caixinhas” isoladas (containers), sem bagunçar o servidor.

na VPS
$ apt update && apt upgrade -y      # atualiza o sistema
$ curl -fsSL https://get.docker.com | sh   # instala o Docker
$ ufw allow 22 && ufw allow 80 && ufw allow 443 && ufw --force enable
O que foi isso

A última linha é o firewall: só deixa entrar pelas portas 22 (o SSH), 80 e 443 (sites — http e https). O resto fica fechado.

5

Montar o “porteiro” (Caddy) + o primeiro app

Dois arquivos e um comando

O Caddy recebe todas as visitas, coloca o cadeado (HTTPS de graça, automático) e encaminha cada endereço pro app certo. Vamos deixar o Caddy e os apps juntos, numa pasta só.

a) O código do seu app vai em /opt/meuapp, com um Dockerfile (a “receita” de como rodar). Exemplo pra um app Python/FastAPI:

/opt/meuapp/Dockerfile
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

b) A “planta” que sobe tudo, em /opt/stack/docker-compose.yml:

/opt/stack/docker-compose.yml
services:
  caddy:
    image: caddy:2
    restart: unless-stopped
    ports: ["80:80", "443:443"]
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
  meuapp:
    build: /opt/meuapp
    restart: unless-stopped
    expose: ["8000"]
volumes:
  caddy_data:

c) A lista do porteiro, em /opt/stack/Caddyfile — cada endereço e pra qual app ele vai:

/opt/stack/Caddyfile
app1.seudominio.com {
    reverse_proxy meuapp:8000
    encode zstd gzip
}

d) Suba tudo:

na VPS
$ cd /opt/stack
$ docker compose up -d --build
A mágica

Pronto! Abra https://app1.seudominio.com. O Caddy pega o certificado de segurança sozinho (Let’s Encrypt, grátis) na primeira visita — você não faz nada. O cadeado aparece em segundos.

6

Adicionar mais apps (é só repetir)

Cada app novo = 3 coisinhas

Para cada app novo você faz três passos rápidos: 1) põe o código em /opt/outroapp; 2) adiciona um serviço no docker-compose.yml e um bloco no Caddyfile; 3) cria o registro A do subdomínio no DNS (se não usou o curinga *).

acrescente no Caddyfile
app2.seudominio.com {
    reverse_proxy outroapp:8000
    encode zstd gzip
}
na VPS
$ cd /opt/stack
$ docker compose up -d --build         # sobe o app novo
$ docker compose exec caddy caddy reload --config /etc/caddy/Caddyfile

O último comando avisa o porteiro do endereço novo sem derrubar os que já estão no ar.

7

Manutenção do dia a dia

Os poucos comandos que você vai usar sempre
na VPS · dentro de /opt/stack
$ docker compose ps            # o que está rodando
$ docker compose logs -f meuapp # ver mensagens/erros de um app
$ docker compose restart meuapp # reiniciar um app
$ docker compose up -d --build  # aplicar mudanças no código
Segurança · faça assim que der
Importante

Entrar com senha funciona, mas o certo é usar uma chave SSH (um par de arquivos que substitui a senha e é muito mais seguro). Procure “gerar chave SSH e usar na VPS” quando estiver confortável. E nunca compartilhe a chave nem a senha do servidor com ninguém.

Dicionário rápido
VPS
Um computador na nuvem, ligado 24h, que você aluga e controla.
IP
O “número de telefone” do servidor, tipo 203.0.113.10.
Domínio
O nome bonito (seudominio.com) que aponta pro IP.
DNS / registro A
A agenda que liga um nome a um IP. “A” = nome → IP.
Subdomínio
Um prefixo no domínio: app1.seudominio.com.
SSH
Controlar o servidor por texto, de longe e com segurança.
Docker / container
Roda cada app numa “caixinha” isolada, sem conflito.
Reverse proxy
O porteiro (Caddy) que recebe e distribui as visitas.
HTTPS / SSL
O cadeado do navegador; conexão criptografada. O Caddy cuida sozinho.
Caddy
Servidor web que faz o HTTPS automático e o reverse proxy.
Checklist final