Isto não é realmente um versus. Cloudflare Tunnel (cloudflared) e PortPreview moram em quartos diferentes. O Cloudflare Tunnel é para manter um serviço permanentemente online atrás do edge da Cloudflare — Zero Trust, túneis nomeados, domínios personalizados. O PortPreview é para os próximos vinte minutos da sua sessão de desenvolvimento — testes de webhook, QA mobile, compartilhar um branch com um designer. Escolher entre eles depende sobretudo de qual problema você realmente tem.
No que o Cloudflare Tunnel é bom
O cloudflared foi construído para uma coisa: colocar um serviço na internet sem abrir uma única porta de entrada e sem expor seu IP de origem. Rode-o num servidor, anexe um túnel nomeado a um hostname no seu domínio Cloudflare, e o tráfego flui pelo edge da Cloudflare até sua origem por uma conexão de saída que sua máquina iniciou.
Coisas que ele faz bem:
- Roteamento de produção. O recurso de túnel nomeado é durável. Você pode rodar o cloudflared como serviço e o hostname continua funcionando entre reinícios.
- Políticas de acesso Zero Trust. Proteja o túnel atrás de SSO, MFA ou allowlists de IP para exposição de ferramentas internas.
- Domínios personalizados. Traga seu próprio domínio na Cloudflare. O túnel termina em
seu-dominio.com, não num subdomínio do fornecedor. - Roteamento WARP. Alcance serviços privados de qualquer dispositivo na rede Cloudflare sem configurar VPN.
Nada disso é sobre depuração de webhooks.
Onde o Cloudflare Tunnel fica desajeitado para desenvolvimento
O modo quick tunnel (cloudflared tunnel --url localhost:3000) é o mais perto que o cloudflared chega de uma ferramenta de desenvolvimento, e funciona. Você obtém uma URL *.trycloudflare.com apontando para sua porta local. Mas:
- A URL rotaciona a cada sessão, como a maioria dos túneis de desenvolvimento.
- Não há inspetor de requisições integrado. Você vê o que seu servidor de desenvolvimento registra e nada mais. Capturar um payload de webhook para replay depois exige acoplar um proxy ou logger separado.
- A configuração de túneis nomeados (a versão de URL estável) envolve uma conta Cloudflare, registros DNS e um arquivo de config. Vale a pena para um serviço de vida longa; exagero para uma sessão de iteração de webhook.
Onde o PortPreview se encaixa
O PortPreview é um CLI de tunneling localhost para o loop de desenvolvimento. Um comando, URL HTTPS pública, captura e replay de requisições integrados.
npx portpreview 3000
O que otimizamos é o momento entre "mudei meu handler de webhook do Stripe" e "sei se funciona". Esse momento deveria durar segundos. Capture o payload, conserte o handler, replay até ficar verde, tudo sem re-disparar o evento upstream.
Lado a lado
| Necessidade | Cloudflare Tunnel | PortPreview |
|---|---|---|
| Sessão rápida para depuração de webhook | Possível (quick tunnel) | Feito para isso |
| Captura e replay de requisições | Não | Sim |
| Hostname nomeado estável | Sim (com configuração) | Não é o foco padrão |
| Domínio personalizado | Sim | Subdomínio do túnel |
| Política de acesso Zero Trust | Sim | Não |
| Complexidade de configuração | Baixa para quick, média para named | Um comando |
| Rodar para sempre como serviço | Sim | Projetado para sessões |
| Cliente open source | Sim (cloudflared) | Sim |
Quando usar cada um
Use o Cloudflare Tunnel quando
- Você precisa de um serviço online 24/7 sem abrir portas do firewall.
- Você quer acesso protegido por SSO a um dashboard interno ou ferramenta de admin.
- Você precisa de uma URL estável de domínio personalizado respaldada por um cert de CA real e seu DNS Cloudflare existente.
- Você já está na Cloudflare e o custo marginal de configuração é pequeno.
Use o PortPreview quando
- Você itera num handler de webhook e quer replay com um clique.
- Você quer compartilhar um branch com um designer por dez minutos.
- Você testa callbacks de OAuth ou fluxos mobile sem configurar DNS.
- Você prefere não gerenciar uma conta Cloudflare só para testar um evento do Stripe.
Eles coabitam bem
Vários times com quem conversamos usam ambos. Cloudflare Tunnel para a ferramenta interna sempre-ativa que precisa de uma URL fixa e SSO. PortPreview para a depuração diária de webhooks que precisa de replay e um único comando. Eles não conflitam — apenas servem partes diferentes do arco dev-para-prod.
Se você também está pesando ngrok ou localtunnel, essas comparações podem ser mais diretamente relevantes. Entre na lista de espera do PortPreview para o lado do loop de desenvolvimento.