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.
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.
$ 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.
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
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).
# 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.
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:
#: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.
[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.
# 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 308curl -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.