UpuaiUpuai
Networking

Domínios custom

Aponte o seu domínio para um serviço, escolha o host canônico (www ou apex) e deixe o TLS por conta da plataforma. Tudo pelo painel, pela API ou pela CLI — sem redeploy.

O que é

Todo serviço web nasce com um endereço gerado em *.apps.upuai.cloud. Um domínio custom é o seu próprio nome (exemplo.com, app.exemplo.com) apontado para esse serviço: a plataforma cuida do roteamento, do certificado TLS e — se você quiser — do redirect entre www e apex.

Domínio é um recurso do ambiente (DNS, certificado, quota), não uma configuração do commit. Por isso ele vive no painel/API/CLI, e não no upuai.toml — é o mesmo desenho de Vercel, Netlify e Render.

Adicionar um domínio

Dois caminhos, mesmo resultado. Em ambos, a plataforma mostra os registros DNS exatos que você precisa criar no seu provedor.

Pelo painel

Abra o serviço, vá na aba Networking e clique em Adicionar domínio. Informe o hostname; os registros DNS aparecem na hora e a verificação roda sozinha assim que o DNS propagar.

Pela CLI

upuai domain add exemplo.com -s <serviço>. A saída lista os registros a criar. Use upuai domain list para acompanhar status e SSL.

terminal
$ upuai domain add exemplo.com -s site

▸ Configure estes registros DNS:

  Tipo    Nome               Valor
  A       exemplo.com        <IP exibido pelo painel/CLI>
  TXT     <nome exibido>     <token de verificação>
  CNAME   www.exemplo.com    <alvo exibido pelo painel/CLI>

✓ Domínio adicionado (par: exemplo.com + www.exemplo.com).
  A verificação é automática assim que o DNS propagar.

Registros DNS

O tipo de registro depende de onde o hostname está na hierarquia do seu domínio. Os valores exatos (IP, alvo de CNAME e token de verificação) são os que o painel e a CLI exibem — não copie de exemplos.

Apex (exemplo.com)

Registro A apontando para o IP da plataforma mostrado no painel. O DNS não permite CNAME no apex.

Subdomínio (www, app, api…)

Registro CNAME apontando para o alvo mostrado no painel. Se o seu provedor oferecer CNAME flattening no apex, ele também é aceito.

Verificação (TXT)

Um registro TXT prova que o domínio é seu. Nome e valor aparecem no painel; a verificação é automática e o certificado só é emitido depois dela.

Propagação

DNS pode levar de minutos a algumas horas para propagar. O painel mostra o status em tempo real; não é preciso reenviar nada.

Usa Cloudflare com proxy (nuvem laranja)? Funciona, mas o certificado da Upuai é emitido para a origem — deixe o registro em DNS only durante a verificação inicial.

Par apex + www

Quem digita exemplo.com espera que www.exemplo.com também funcione — e vice-versa. Por isso os dois são tratados como um par.

  • Ao adicionar exemplo.com a plataforma cria www.exemplo.com automaticamente (e o contrário: adicionar www.exemplo.com cria o apex).
  • O par conta como 1 domínio na quota do seu plano.
  • Os dois lados ganham certificado TLS próprio assim que o DNS de cada um apontar.
  • Deletar um lado deleta o par inteiro.

Host canônico (redirect entre domínios)

Dois hostnames servindo o mesmo site são duas cópias para os buscadores: o Google rastreia o dobro de páginas e divide sinais de ranking entre elas. A solução padrão é eleger um host canônico e responder 301 nos outros — é o que este recurso faz, na borda, antes de a requisição chegar ao seu app.

Padrão para pares novos

Todo par apex/www criado a partir desta versão já nasce com o outro lado redirecionando (301) para o domínio que você adicionou. Pares criados antes continuam respondendo dos dois lados até você ligar o redirect — um clique no painel ou um comando na CLI.

No painel, na aba Networking, o par mostra o seletor Host canônico: escolha exemplo.com ou www.exemplo.com e o outro lado passa a redirecionar. Qualquer domínio do serviço (inclusive o gerado *.apps.upuai.cloud) tem o campo Redirecionar para, com o código 301 (permanente, recomendado para SEO) ou 302 (temporário).

terminal
# Adicionar já com redirect (www → apex, 301)
$ upuai domain add www.exemplo.com --redirect-to exemplo.com --status 301 -s site

# Ligar ou trocar o redirect de um domínio existente
$ upuai domain update www.exemplo.com --redirect-to exemplo.com -s site

# Desligar
$ upuai domain update www.exemplo.com --no-redirect -s site

# Conferir
$ upuai domain list -s site

DOMAIN               TYPE     STATUS      REDIRECT
exemplo.com          Custom   ● Active    -
www.exemplo.com      Custom   ● Active    → exemplo.com (301)

Regras

  • O alvo precisa ser um domínio do mesmo serviço e ambiente.
  • Sem cadeia: um domínio que já é alvo de redirect não pode redirecionar, e vice-versa.
  • Domínios wildcard (*.exemplo.com) não podem ser origem nem alvo.
  • Caminho e query string são preservados: www.exemplo.com/blog?x=1 → exemplo.com/blog?x=1.
  • Não precisa de redeploy — o redirect entra em até 2 minutos e some da mesma forma ao ser desligado.
  • Se o domínio alvo for removido, o redirect é desligado e a origem volta a servir o site.
Também serve para consolidar o endereço gerado: aponte xxx.apps.upuai.cloud → seu domínio e os buscadores param de indexar a cópia no subdomínio da plataforma.

HTTPS e HSTS

O certificado TLS é emitido e renovado automaticamente (Let's Encrypt) para cada domínio verificado, e http:// é redirecionado para https:// na borda. HSTS — o header que faz o navegador nunca mais tentar http:// — é opt-in, declarado no upuai.toml do serviço:

upuai.toml
#:schema https://upuai.com.br/schemas/upuai-toml-v1.json

[http.headers]
Strict-Transport-Security = "max-age=31536000"

Antes de ligar

  • includeSubDomains só se TODO subdomínio do seu domínio — inclusive os que não estão na Upuai — servir HTTPS. O navegador vai recusar http:// em todos eles.
  • preload entra numa lista embutida nos navegadores e, na prática, é irreversível. Só peça quando tiver certeza.
  • O header vale para todos os hostnames do serviço, inclusive o endereço gerado *.apps.upuai.cloud.
  • A resposta 301 de um host que redireciona não carrega os headers do serviço — o host canônico (destino) é quem os envia.
A plataforma não liga HSTS sozinha de propósito: ele fica gravado no navegador do visitante pelo tempo do max-age e quebraria qualquer subdomínio seu que ainda sirva http://. É uma decisão do dono do domínio.

[http] do upuai.toml × redirect de domínio

São duas ferramentas para problemas diferentes. Escolha pela pergunta "isso depende do caminho ou do host?".

[http] no upuai.toml

Headers de resposta e redirects de caminho (/antigo → /novo). Valem para TODOS os hostnames do serviço e viajam com o commit — mudam a cada deploy, revisados em PR.

Redirect de domínio

Condicionado ao host (www.exemplo.com → exemplo.com). É atributo do domínio, configurado no painel, na API ou na CLI, e entra sem redeploy.

Troubleshooting

O que mais confunde ao testar um redirect é o método HTTP. Teste sempre com GET — é o que o navegador e o Googlebot usam.

terminal
# GET — é isto que o navegador e o Googlebot recebem
$ curl -s -o /dev/null -w '%{http_code} %{redirect_url}\n' https://www.exemplo.com/
301 https://exemplo.com/

# HEAD (curl -I) — o Traefik responde 308 a métodos não-GET em redirect permanente
$ curl -sI https://www.exemplo.com/ | head -1
HTTP/2 308

curl -I mostra 308, não 301

curl -I envia HEAD. O Traefik responde 308 a redirect permanente em métodos que não sejam GET (e 307 em vez de 302). Num GET a resposta é 301 — use curl -s -o /dev/null -w '%{http_code} %{redirect_url}' para ver o que o Google recebe.

Liguei e nada mudou

O redirect entra em até 2 minutos. Se passou disso, confira se o DNS do host de origem já aponta para a plataforma — sem tráfego chegando, não há o que redirecionar.

O redirect sumiu sozinho

Acontece quando o domínio alvo é removido: a plataforma desliga o redirect para não mandar visitantes a um host morto, e a origem volta a servir o site.

O redirect não leva o caminho

Ele leva — caminho e query string são preservados. Se o destino responde 404, é o app no host canônico que não tem aquela rota.

FAQ

Perguntas frequentes sobre domínios custom.

Posso redirecionar apex → www em vez de www → apex?

Sim. A direção é sua: escolha www.exemplo.com como host canônico no painel, ou upuai domain update exemplo.com --redirect-to www.exemplo.com. Trocar de lado é uma única operação — nunca há um momento em que nenhum dos dois redireciona.

E o endereço gerado *.apps.upuai.cloud?

Também pode redirecionar para o seu domínio. É a forma de evitar que os buscadores indexem a cópia no subdomínio da plataforma.

Posso declarar domínios no upuai.toml?

Não. Domínio é recurso do ambiente — envolve verificação de DNS, certificado e quota — e um commit não pode criar nem verificar nada disso. O upuai.toml cuida do que depende do código: build, deploy e a seção [http] (headers e redirects de caminho). Nenhuma plataforma do mercado coloca domínios em arquivo de configuração.

O que acontece se eu apagar o domínio canônico?

Todo domínio que redirecionava para ele tem o redirect desligado automaticamente e volta a servir o site. Se o canônico fazia parte de um par apex/www, o par inteiro é removido.

Recursos

Links relacionados.