3.6 KiB
🌐 Arquitetura de Domínios Próprios e Subdomínios (Mercado)
Esta especificação define o padrão arquitetural para o provisionamento e roteamento de lojas no ecossistema Clube67, suportando tanto subdomínios nativos quanto domínios próprios de clientes.
🏛️ 1. Modelo Arquitetural: Multi-Instância Isolada
Em vez de usar uma única aplicação gigante compartilhada (Shared Database/App), o ecossistema Clube67 adota um modelo de Multi-Instância de Tenant Único por Contêiner:
Usuário ➔ DNS (Hostinger/Próprio) ➔ Traefik Gateway (VPS 1)
├── Loja A (mercadodopovoms.clube67.com) -> Contêineres Loja A (Isolado)
└── Loja B (mercadodopovo.com) -> Contêineres Loja B (Isolado)
Principais Vantagens:
- Isolamento Absoluto: Se uma loja tiver pico de acessos ou erro no banco, as demais continuam online sem degradação.
- Customização Plena: Cada loja pode rodar versões específicas de código ou plugins.
- Segurança de Dados: Bancos de dados fisicamente separados eliminam qualquer risco de vazamento de dados entre clientes.
🛣️ 2. As Duas Vias de Implantação
Quando um cliente assina o sistema de mercados no Clube67, existem duas vias de roteamento e provisionamento configuradas no docker-compose.yml de sua respectiva instância clonada:
🔵 Via 1: Subdomínio Padrão (DNS *.clube67.com)
- Provisionamento: A plataforma chama a API da Hostinger e adiciona um apontamento tipo
AouCNAMEpara o IP público de produção. - Configuração Traefik:
labels: - "traefik.enable=true" - "traefik.http.routers.mercado-loja.rule=Host(`mercadodopovoms.clube67.com`)" - "traefik.http.routers.mercado-loja.entrypoints=websecure" - "traefik.http.routers.mercado-loja.tls.certresolver=letsencrypt"
🟢 Via 2: Domínio Próprio do Cliente (CNAME / Curinga)
- Ação do Cliente: O cliente acessa o registrador dele (GoDaddy, Registro.br, etc.) e adiciona:
- Apontamento CNAME para
clube67.com(ou apontamento A para o IP público do servidor).
- Apontamento CNAME para
- Configuração Traefik: O script de automação atualiza o arquivo
docker-compose.ymlda instância clonada do cliente para mapear o novo Host:labels: - "traefik.enable=true" - "traefik.http.routers.mercado-loja.rule=Host(`mercadodopovoms.clube67.com`) || Host(`mercadodopovo.com`)" - "traefik.http.routers.mercado-loja.entrypoints=websecure" - "traefik.http.routers.mercado-loja.tls.certresolver=letsencrypt" - Emissão de SSL Automática: O Traefik detecta o novo Host e se comunica automaticamente com o Let's Encrypt para gerar e renovar o certificado SSL para o domínio próprio do cliente, com zero complexidade manual.
🛠️ 3. Roteamento Inteligente de Layout no Frontend (Vite)
Para exibir a identidade visual correta (Cores, Logotipo, Favicon e Descrição), o frontend compilado em Vite realiza a leitura dinâmica do host no carregamento inicial:
- Captura: O app captura a URL acessada:
const currentHost = window.location.hostname; // ex: mercadodopovo.com ou mercadodopovoms.clube67.com - Consulta: Faz um request para o backend:
GET /api/branding/resolve?host=mercadodopovo.com - Processamento: O backend local da instância responde com os dados salvos na tabela
brandingpara carregar as cores e logo corretos imediatamente.
Este padrão de design garante escalabilidade e isolamento premium no nível corporativo.