skill · vercel-deploy

Como eu crio um site e aponto ele para um subdomínio na Cloudflare

Esta página é, ela mesma, o resultado da skill que ela explica. Foi montada como um index.html, publicada na Vercel e ligada a explicacao.mateuslh.com via DNS na Cloudflare — tudo de forma autônoma, sem nenhum clique no painel.

Vercel (host) Cloudflare (DNS) SSL automático zero interação

visão geral

Duas peças: quem hospeda e quem resolve o nome

A skill orquestra dois serviços. A Vercel hospeda os arquivos estáticos e emite o certificado SSL. A Cloudflare é onde mora o DNS do domínio mateuslh.com — é ela que faz explicacao.mateuslh.com apontar para a Vercel. Dois scripts já instalados em ~/bin fazem o trabalho pesado; a skill só decide qual usar e valida o resultado.

navegadorexplicacao.mateuslh.com
Cloudflare DNSCNAME → cname.vercel-dns.com
Vercelserve o site + SSL

decisão inicial

Com ou sem domínio próprio?

Só uma URL *.vercel.app

vercel-deploy <DIR>

Publica e devolve uma URL pública da Vercel. Ideal para rascunhos e previews. Adicione --preview para um deploy não-produção.

Subdomínio em mateuslh.com

vercel-deploy-dominio <DIR> <SUB>

Publica e cria o registro DNS na Cloudflare. Foi o caminho usado aqui: vercel-deploy-dominio ./explicacao explicacao.

Detalhe importante: o nome do projeto na Vercel deriva do basename da pasta (em minúsculas, só a-z0-9._-). Por isso a pasta precisa se chamar igual ao subdomínio desejado — aqui ela se chama explicacao.

o passo a passo

Da pasta vazia ao site no ar

1

Montar o site numa pasta dedicada

Basta um index.html. Assets estáticos e frameworks com build também funcionam — a Vercel detecta o framework sozinha. O basename da pasta vira o nome do projeto e deve casar com o subdomínio.

2

Publicar com um comando

O helper lê o token, sanitiza o nome do projeto, faz vercel link + vercel deploy --prod, liga o FQDN ao projeto com vercel domains add e faz o upsert do DNS na Cloudflare.

3

Esperar o SSL e o DNS propagarem

A Vercel emite o certificado em ~1-2 min. Nesse intervalo um curl pode devolver 000 ou erro — é normal. A skill faz retry em loop até receber 200.

4

Validar e entregar

Confirma que o site responde 200, opcionalmente tira um screenshot com o Chrome headless, e devolve a URL final https://explicacao.mateuslh.com.

o comando, na prática

Foi literalmente isto que rodou para esta página

# 1. monta o site na pasta ~/lab/explicacao/ (index.html)

# 2. publica e liga o subdomínio (deploy + DNS num passo só)
vercel-deploy-dominio ./explicacao explicacao
# → https://explicacao.mateuslh.com

# 3. valida no ar, com retry pro SSL/propagação
for i in $(seq 1 8); do
  code=$(curl -s -o /dev/null -w "%{http_code}" \
    "https://explicacao.mateuslh.com" --max-time 10)
  [ "$code" = "200" ] && { echo "no ar"; break; }
  sleep 18
done

por baixo do capô

O que o vercel-deploy-dominio faz com o DNS

Segurança: os tokens da Vercel e da Cloudflare ficam em arquivos chmod 600 dentro de ~/.config/. O token da Cloudflare tem escopo mínimo: apenas Zone → DNS → Edit e Zone → Read, restrito à zona mateuslh.com.