Skip to main content

        Umami: Solucionando la Geolocalización (Ciudad y Región) con Cloudflare Tunnels - Featured image

Umami: Solucionando la Geolocalización (Ciudad y Región) con Cloudflare Tunnels

Umami es una de las mejores alternativas privacy-focused y self-hosted para analíticas web. Sin embargo, un problema extremadamente común cuando lo desplegamos detrás de Cloudflare Tunnels es que el tablero identifica el país del visitante, pero los campos de Ciudad y Región aparecen vacíos ().

En esta guía, veremos cómo solucionar este “cortocircuito” de telemetría configurando correctamente las cabeceras HTTP para que Cloudflare le entregue a Umami toda la información geográfica que necesita.


El Problema: El “Cortocircuito” de las Cabeceras

Cuando el tráfico pasa por Cloudflare, este inyecta por defecto una cabecera llamada CF-IPCountry (por ejemplo, con el valor MX o US).

La lógica interna de Umami dicta que si recibe información geográfica a través de las cabeceras HTTP, asumirá que esa información es la única fuente de la verdad e ignorará su base de datos local (MaxMind GeoDB). Como Cloudflare no envía la ciudad ni la región por defecto, Umami registra el país, busca la ciudad en las cabeceras, no la encuentra, y deja los campos vacíos.

Para solucionarlo, debemos hacer que Cloudflare envíe el paquete geográfico completo.

1. Configurar Cloudflare (Managed Transforms)

En lugar de depender de la base de datos local de Umami, vamos a aprovechar la telemetría masiva de la red Edge de Cloudflare para que nos resuelva la ubicación exacta y se la pase a nuestro contenedor.

  1. Inicia sesión en el panel de Cloudflare y selecciona tu dominio.
  2. En el menú lateral izquierdo, navega a Rules > Settings.
  3. Selecciona la pestaña Managed Transforms.
  4. Busca la opción Add visitor location headers y actívala.

Tip

Al encender esto, Cloudflare comenzará a inyectar las cabeceras CF-IPCity (Ciudad) y CF-RegionCode (Estado/Región) en todo el tráfico que fluya hacia tu túnel.

2. Configurar Umami (Docker Compose)

Ahora debemos asegurarnos de que Umami esté configurado para confiar en las IPs que provienen del proxy de Cloudflare. Edita tu archivo docker-compose.yml y añade la variable CLIENT_IP_HEADER.

services:
  umami:
    image: ghcr.io/umami-software/umami:postgresql-latest
    container_name: umami_app
    environment:
      # Database connection string
      DATABASE_URL: postgresql://umami_user:password@umami_db:5432/umami_data
      DATABASE_TYPE: postgresql
      APP_SECRET: your_random_secret
      
      # Tell Umami to trust the real IP forwarded by Cloudflare
      CLIENT_IP_HEADER: cf-connecting-ip
      
    depends_on:
      - umami_db
    restart: unless-stopped

3. Aplicar Cambios y Verificar

Recrea tu contenedor para aplicar la nueva variable de entorno:

# Recreate the Umami container to apply the new environment variables
docker compose up -d

Realiza una visita de prueba a tu sitio web (preferiblemente desde una red móvil o modo incógnito). En el dashboard de Umami, ahora verás que la telemetría geográfica está completa.

Conclusión

Delegar la geolocalización a Cloudflare no solo soluciona el problema de los campos vacíos, sino que también optimiza tu instancia de Umami al no depender de una base de datos GeoIP local que requiere actualizaciones constantes. Con un par de clics en Cloudflare y una línea en Docker, tu analítica ahora es mucho más precisa.


End of transmission.