# Cada cuenta en la dirección de tu cliente

> Desde la versión 0.7.0, cada cuenta de Chatme puede atender en el dominio del propio cliente, como atencion.cliente.com. Preparas el servidor una sola vez. Después, cada dominio nuevo se registra en la consola, sin editar el stack.

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

[Guía de instalación](https://flouds.com.br/llms/es/chatme/instalacao.md)

## Antes de empezar

- Chatme 0.7.0 o más reciente
- Traefik 2.11 o 3, con resolver ACME y certificados guardados en un volumen
- Acceso a la configuración estática de Traefik
- DNS sin proxy de CDN (en Cloudflare, nube gris)

## Preparación del servidor, una sola vez

1. **Apunta el dominio principal**  
   El dominio de `PUBLIC_BASE_URL` necesita un registro A hacia la IPv4 pública del VPS. Crea AAAA solo si el VPS también responde por IPv6. Deja el proxy de CDN apagado en él y en los dominios de los clientes.

2. **Genera el secreto del provider**  
   Este secreto autentica a Traefik ante Chatme. Vive solo en las definiciones de los stacks, nunca en un repositorio.

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

3. **Agrega las variables a Chatme**  
   En el stack de Chatme, agrega las variables de abajo y cambia la IP de ejemplo por la IP pública real. `TRUST_PROXY_HEADERS=true` es obligatorio porque Traefik termina el HTTPS antes de Chatme; mantén el servicio inaccesible por fuera del proxy.

   ```yaml
   # En Swarm, la dirección es nombredelstack_nombredelservicio. En 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=TU_SECRETO
     - CUSTOM_DOMAINS_UPSTREAM_URL=http://chatme_chatme:8081
   ```

   > **Atención:** Las tres `CUSTOM_DOMAINS_*` van juntas. Completar solo una parte impide el arranque, y el log indica qué variable está mal.

4. **Activa el provider HTTP en Traefik**  
   En la configuración estática de Traefik, agrega el provider sin quitar los providers, entrypoints y resolver que ya existen. El usuario es literalmente `domains` y la contraseña es el secreto del paso 2.

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

   Si Traefik usa un archivo traefik.yml en lugar de argumentos:

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

   [Ver el stack completo de Traefik en GitHub](https://github.com/flouds-dncarbonell/projeto-chatme/blob/main/deploy/dominios-proprios/traefik.yml)

   > **Atención:** Traefik y Chatme deben estar en la misma red interna (`proxy`, en el stack oficial). No publiques el puerto `8082` ni crees una ruta pública para `/traefik`.

   > **Nota:** Traefik acepta un único provider HTTP. Si otro servicio ya usa uno, habla con nosotros antes de cambiarlo.

5. **Revisa entrypoints y resolver**  
   Si los entrypoints o el resolver de tu Traefik tienen otros nombres, indícalos a Chatme. Los valores de abajo son los predeterminados. Los puertos `80` y `443` deben llegar a Traefik.

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

6. **Actualiza los dos stacks**  
   En **Consola → Cuentas → cuenta → Editar dominios**, el aviso de conexión pendiente desaparece cuando Traefik consulta a Chatme.

## Para cada cliente

Registra el dominio en **Consola → Cuentas → cuenta → Editar dominios**. El panel muestra el registro que el dueño del dominio crea en su proveedor de DNS:

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

Algunos proveedores piden solo atencion en el campo de nombre. Para un dominio raíz (cliente.com), usa el registro A/AAAA que indica el panel, normalmente con @. Conserva los registros de correo.

### Lo que muestra el panel

- Esperando DNS: el registro todavía no apunta a la IP configurada. Revisa el DNS, incluido IPv6, y espera la propagación.
- Preparando HTTPS: el DNS está bien y el certificado se está emitiendo. Si tarda, revisa los nombres de los entrypoints, el resolver, los puertos y los logs de ACME.
- Activo: la dirección responde con HTTPS válido y ya se puede usar.

Cada cuenta acepta un dominio. Cambiar la dirección desactiva la anterior, sin redirección. En el dominio propio, el login entra directo a esa cuenta, y las invitaciones, la recuperación de contraseña y los enlaces compartidos pasan a usar esa dirección cuando está activa.

## La licencia sigue en el dominio principal

`PUBLIC_BASE_URL` y la clave siguen vinculados al dominio principal de la instalación. Los dominios de las cuentas no cambian la licencia ni los límites del plan. En el área de miembros, informa siempre el dominio principal.

**Ejemplo**

- `app.suaempresa.com.br`: Dominio principal: licencia, consola y área de miembros
- `atencion.cliente.com`: Dominio de la cuenta: solo la atención de ese cliente

## Coolify, Easypanel y modo manual

Los paneles que administran Traefik por ti pueden no permitir editar la configuración estática. Sin las tres variables, Chatme queda en configuración manual.

**En configuración manual**

1. Registra el dominio en la cuenta desde la consola, como en cualquier instalación
2. Agrega el mismo dominio al servicio `chatme` en tu panel
3. Apunta el DNS y deja que el panel emita el HTTPS

La consola también muestra estos fragmentos y copia un texto listo para la IA que opera tu servidor, en **Preparar la instalación → Copiar instrucciones para IA**.

[Ver la guía completa en GitHub](https://github.com/flouds-dncarbonell/projeto-chatme/blob/main/deploy/dominios-proprios/README.md)
