ADR-0016: Cloudflare Edge Router para Roteamento Multi-domínio em Projeto Único | Wiki
ADR-0016: Cloudflare Edge Router para Roteamento Multi-domínio em Projeto Único
Este documento especifica a decisão de arquitetura para hospedagem e multiplexação de múltiplos domínios corporativos no Cloudflare Pages através de um Cloudflare Advanced Mode Worker (_worker.js).
1. Contexto e Motivação
Nosso gerador estático (gbr_ssg) compila os sites de 3 marcas corporativas no mesmo diretório de saída (/dist):
- gleam-lang.com.br (Consultoria B2B na raiz /)
- fvideen.com.br (Holding no subdiretório /fvideen/)
- gleam.dev.br (Comunidade Open-Source no subdiretório /comunidade/)
Para evitar a complexidade e custos operacionais de gerenciar 3 projetos ou repositórios separados no Cloudflare Pages, utilizaremos uma única implantação do Cloudflare Pages associada a 3 Custom Domains, utilizando um Edge Router (_worker.js) na raiz de saída.
2. Decisão Arquitetural
-
**Adoção do Cloudflare Pages Advanced Mode (
_worker.js):** Incluiremos o arquivo_worker.jsna raiz do diretório compilado (/dist/_worker.js). O runtime Edge do Cloudflare interceptará todas as requisições antes do servidor estático. -
*Roteamento Transparente por Hostname:* O Worker analisará o cabeçalho
Hostda requisição e fará a reescrita interna da URL (Reverse Proxy sem redirecionamento 301/302): -fvideen.com.br$\rightarrow$ serve/fvideen/index.htmle sub-rotas/fvideen/*. -gleam.dev.br$\rightarrow$ serve/comunidade/index.htmle sub-rotas/comunidade/*. -gleam-lang.com.br(ou qualquer outro host) $\rightarrow$ serve a raiz/. -
*Preservação de Ativos Globais (Asset Bypass):* Requisições direcionadas a recursos compartilhados como
/assets/*,/css/*,/favicon.icoou arquivos com extensões de ativos estáticos serão servidas diretamente da raiz sem reescrita de subdiretório de marca, evitando quebra de estilo e mídia.
3. Requisitos EARS
*Requisitos Ubíquos (Ubiquitous Requirements)*
- *UBQ-01 (Multiplexação Transparente):* O Edge Router DEVE interceptar requisições nos Custom Domains e buscar o ativo estático correto usando a API nativa env.ASSETS.fetch(), SEM disparar redirecionamentos HTTP 301/302 visíveis para o cliente.
- *UBQ-02 (Cópia Automática no Build):* A ferramenta CLI do gbr_ssg DEVE copiar o arquivo _worker.js para o diretório final de saída (./dist/_worker.js) após a geração do site estático.