# Cada conta no endereço do seu cliente

> A partir da versão 0.7.0, cada conta do Chatme pode atender no domínio do próprio cliente, como atendimento.cliente.com.br. Você prepara o servidor uma vez. Depois, cada domínio novo é cadastrado no console, sem editar a stack.

https://flouds.com.br/produtos/chatme/instalacao/dominios

[Guia de instalação](https://flouds.com.br/llms/chatme/instalacao.md)

## Antes de começar

- Chatme 0.7.0 ou mais recente
- Traefik 2.11 ou 3, com resolver ACME e certificados guardados em volume
- Acesso à configuração estática do Traefik
- DNS sem proxy de CDN (na Cloudflare, nuvem cinza)

## Preparação do servidor, uma vez só

1. **Aponte o domínio principal**  
   O domínio de `PUBLIC_BASE_URL` precisa de um registro A para o IPv4 público da VPS. Crie AAAA só se a VPS também atende por IPv6. Deixe o proxy de CDN desligado nele e nos domínios dos clientes.

2. **Gere o segredo do provider**  
   Esse segredo autentica o Traefik no Chatme. Ele fica só nas definições das stacks, nunca em repositório.

   ```bash
   openssl rand -hex 32
   ```

3. **Adicione as variáveis ao Chatme**  
   Na stack do Chatme, adicione as variáveis abaixo e troque o IP de exemplo pelo IP público real. `TRUST_PROXY_HEADERS=true` é obrigatório porque o Traefik termina o HTTPS antes do Chatme; mantenha o serviço inacessível por fora do proxy.

   ```yaml
   # No Swarm, o endereço é nomedastack_nomedoserviço. No Docker Compose, normalmente http://chatme:8081.
   environment:
     - PUBLIC_BASE_URL=https://app.suaempresa.com.br
     - TRUST_PROXY_HEADERS=true
     - CUSTOM_DOMAINS_IPS=203.0.113.10
     - CUSTOM_DOMAINS_PROXY_TOKEN=SEU_SEGREDO
     - CUSTOM_DOMAINS_UPSTREAM_URL=http://chatme_chatme:8081
   ```

   > **Atenção:** As três `CUSTOM_DOMAINS_*` vão juntas. Preencher só parte delas impede o boot, e o log indica qual variável está errada.

4. **Ligue o provider HTTP no Traefik**  
   Na configuração estática do Traefik, acrescente o provider sem remover os providers, entradas e resolver que já existem. O usuário é literalmente `domains` e a senha é o segredo do passo 2.

   ```yaml
   command:
     - --providers.http.endpoint=http://domains:SEU_SEGREDO@chatme_chatme:8082/traefik
     - --providers.http.pollinterval=5s
     - --providers.http.polltimeout=5s
   ```

   Se o Traefik usa arquivo traefik.yml em vez de argumentos:

   ```yaml
   providers:
     http:
       endpoint: "http://domains:SEU_SEGREDO@chatme_chatme:8082/traefik"
       pollInterval: 5s
       pollTimeout: 5s
   ```

   [Ver a stack completa do Traefik no GitHub](https://github.com/flouds-dncarbonell/projeto-chatme/blob/main/deploy/dominios-proprios/traefik.yml)

   > **Atenção:** Traefik e Chatme precisam estar na mesma rede interna (`proxy`, na stack oficial). Não publique a porta `8082` nem crie rota pública para `/traefik`.

   > **Observação:** O Traefik aceita um único provider HTTP. Se outro serviço já usa um, fale com a gente antes de trocar.

5. **Confira entradas e resolver**  
   Se as entradas ou o resolver do seu Traefik têm outros nomes, informe-os ao Chatme. Os valores abaixo são os padrões. As portas `80` e `443` precisam chegar ao Traefik.

   ```env
   CUSTOM_DOMAINS_HTTP_ENTRYPOINT=web
   CUSTOM_DOMAINS_ENTRYPOINT=websecure
   CUSTOM_DOMAINS_CERT_RESOLVER=letsencryptresolver
   ```

6. **Atualize as duas stacks**  
   Em **Console → Contas → conta → Editar domínios**, o aviso de conexão pendente some quando o Traefik consultar o Chatme.

## Para cada cliente

Cadastre o domínio em **Console → Contas → conta → Editar domínios**. O painel mostra o registro que o dono do domínio cria no provedor de DNS dele:

| Tipo | Nome | Destino |
| --- | --- | --- |
| CNAME | atendimento.cliente.com.br | app.suaempresa.com.br |

Alguns provedores pedem só atendimento no campo de nome. Para domínio raiz (cliente.com.br), use o registro A/AAAA que o painel indica, normalmente com @. Preserve os registros de e-mail.

### O que o painel mostra

- Aguardando DNS: o registro ainda não aponta para o IP configurado. Confira o DNS, inclusive IPv6, e aguarde a propagação.
- Preparando HTTPS: o DNS está certo e o certificado está sendo emitido. Se demorar, confira os nomes das entradas, o resolver, as portas e os logs do ACME.
- Ativo: o endereço responde com HTTPS válido e já pode ser usado.

Cada conta aceita um domínio. Trocar o endereço desliga o anterior, sem redirecionamento. No domínio próprio, o login entra direto naquela conta, e convites, recuperação de senha e links compartilhados passam a usar esse endereço quando ele está ativo.

## A licença continua no domínio principal

`PUBLIC_BASE_URL` e a chave seguem ligados ao domínio principal da instalação. Domínios das contas não mudam a licença nem os limites do plano. Na área de membros, informe sempre o domínio principal.

**Exemplo**

- `app.suaempresa.com.br`: Domínio principal: licença, console e área de membros
- `atendimento.cliente.com.br`: Domínio da conta: só o atendimento daquele cliente

## Coolify, Easypanel e modo manual

Painéis que gerenciam o Traefik por você podem não deixar editar a configuração estática. Sem as três variáveis, o Chatme fica em configuração manual.

**Em configuração manual**

1. Cadastre o domínio na conta pelo console, como em qualquer instalação
2. Adicione o mesmo domínio ao serviço `chatme` no seu painel
3. Aponte o DNS e deixe o painel emitir o HTTPS

O console também mostra estes trechos e copia um texto pronto para a IA que opera o seu servidor, em **Preparar a instalação → Copiar instruções para IA**.

[Ver o guia completo no GitHub](https://github.com/flouds-dncarbonell/projeto-chatme/blob/main/deploy/dominios-proprios/README.md)
