Eliminar los banners de cookies: Ejecuta Plausible Analytics en Azure Kubernetes

Jeroen Bach

Jeroen Bach · Linkedin

7 min read ·

Durante bastante tiempo, he estado buscando formas de recopilar análisis de sitios web sin mostrar esos molestos banners de consentimiento. Si alguna vez has querido análisis de sitios web sin comprometer la privacidad o la experiencia del usuario, este artículo es para ti.

En esta guía, te presentaré Plausible Analytics, una alternativa ligera, de código abierto y centrada en la privacidad a Google Analytics, y te guiaré en su configuración en un clúster de Kubernetes asequible en Azure.

Actualización (agosto 2025): Azure ha retirado el SKU Basic Load Balancer. Si estás siguiendo esta guía, asegúrate de usar el Standard Load Balancer en su lugar. El SKU Standard añade alrededor de 18 € al mes a tu costo, pero ahora es la única opción compatible para clústeres AKS.

¿Qué es Plausible.io?

Plausible.io es una herramienta de análisis simple pero potente diseñada con la privacidad en mente. A diferencia de Google Analytics, Plausible no usa cookies ni recopila información personalmente identificable. Como resultado, puedes omitir el banner de consentimiento de cookies por completo y seguir cumpliendo con el GDPR y otras leyes de privacidad.

Es una excelente opción para sitios web que se preocupan por la usabilidad, el rendimiento y respetar la privacidad de los visitantes.

¿La mejor parte? Puedes ejecutarlo tú mismo. Puedes comenzar con su versión en la nube alojada, que viene con una prueba gratuita, perfecta si quieres probarlo sin ninguna molestia de configuración. Si te gusta lo que ves, puedes quedarte con su suscripción o tomar el control total auto-alojándolo.

Auto-alojamiento vs. Solución alojada

El auto-alojamiento es ideal si eres un desarrollador como yo y tienes algún crédito de Azure extra disponible. Te da control total y puede ser bastante rentable. Pero si esa no es tu situación, la solución alojada es probablemente la opción más económica y sin complicaciones.

De cualquier manera, Plausible facilita el inicio, y en este artículo, te mostraré cómo configurarlo tú mismo usando Docker y Kubernetes en Azure.

Alojamiento asequible de Plausible.io con Azure Kubernetes

En este artículo, te mostraré la forma más económica de alojar Plausible.io en Azure Kubernetes Service (AKS).

Para darte una idea de qué esperar: ejecutar esta configuración durante un mes completo me cuesta alrededor de 35 € y eso incluye copias de seguridad incrementales diarias.

Actualización (agosto 2025): Debido a los costos del Standard Load Balancer, esto ahora será alrededor de 53 €.

Costos de Azure Kubernetes para Plausible.io
Costos de Azure Kubernetes para Plausible.io

Esta configuración incluye los siguientes componentes clave:

  • cert-manager - para gestionar certificados SSL/TLS automáticamente
  • Let's Encrypt - para emitir certificados SSL gratuitos y confiables
  • NGINX Ingress Controller - para manejar el enrutamiento y exponer Plausible a Internet
  • Plausible.io - la plataforma de análisis respetuosa con la privacidad que estamos desplegando

Consejo de almacenamiento: Usa discos efímeros para ahorrar costos

Al crear un clúster AKS, uno de los principales costos adicionales proviene del disco de SO persistente que se crea por defecto para cada nodo.

Para reducir costos, puedes usar discos de SO efímeros en su lugar. Estos se almacenan directamente en el almacenamiento local de la VM y vienen sin costo adicional. Son ideales para cargas de trabajo sin estado o configuraciones donde el almacenamiento persistente se maneja por separado, como en este caso, donde almacenamos los datos de Plausible en un volumen adjunto.

Si optas por esta ruta, asegúrate de verificar el tamaño máximo de disco permitido para el tamaño de VM seleccionado. Por ejemplo, el tamaño de VM Standard_B2s admite hasta 30 GB de almacenamiento efímero, lo cual es más que suficiente para almacenar las imágenes de Docker necesarias.

En la guía paso a paso a continuación, puedes ejecutar los comandos directamente en Azure Cloud Shell.

Crear clúster
#bash
RESOURCEGROUP=rg-plausible-westeu-prod
CLUSTERNAME=aks-plausible-westeu-prod
LOCATION=westeurope
VMSIZE=Standard_B2s
VMDISKSIZE=30 # Mantenlo en el tamaño máximo que la VM permite (este es el máximo de Standard_B2s)

# Crear el grupo de recursos
az group create --name $RESOURCEGROUP --location $LOCATION

# Crear el clúster AKS - con el Loadbalancer Standard
az aks create --resource-group $RESOURCEGROUP --name $CLUSTERNAME \
  --node-vm-size $VMSIZE \
  --node-count 1 \
  --node-resource-group ${RESOURCEGROUP}-nodes \
  --load-balancer-sku standard \
  --generate-ssh-keys \
  --location $LOCATION \
  --node-osdisk-type Ephemeral \
  --node-osdisk-size $VMDISKSIZE

# Obtener las credenciales para el clúster AKS (para los siguientes pasos)
az aks get-credentials --resource-group $RESOURCEGROUP --name $CLUSTERNAME

Con el clúster en funcionamiento, el siguiente paso es crear un ClusterIssuer, que automatizará la emisión de certificados TLS usando Let's Encrypt y configurar un Ingress que manejará el tráfico externo y lo enrutará al servicio correcto dentro del clúster.

Configurar Ingress y certificados TLS
#bash
LETSENCRYPTEMAIL=[email protected] # <--- Cambia esto a tu dirección de correo electrónico

# Crear los emisores de clúster letsencrypt
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace \
  --set crds.enabled=true
kubectl create -f - <<EOF
---
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-production
  namespace: cert-manager
spec:
  acme:
    # La URL del servidor ACME
    server: https://acme-v02.api.letsencrypt.org/directory
    # Dirección de correo electrónico utilizada para el registro ACME
    email: ${LETSENCRYPTEMAIL}
    # Nombre de un secreto utilizado para almacenar la clave privada de la cuenta ACME
    privateKeySecretRef:
      name: letsencrypt-production
    # Habilitar el proveedor de desafío HTTP-01
    solvers:
    - http01:
        ingress:
          class: nginx
EOF

# Instalar el controlador de ingress nginx
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm upgrade --install \
  ingress-nginx ingress-nginx/ingress-nginx \
  --namespace ingress-nginx \
  --set controller.service.type=LoadBalancer \
  --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz \
  --set controller.service.externalTrafficPolicy=Local \
  --create-namespace

echo "Esperando a que la IP externa sea asignada al controlador de ingress, una vez que esté disponible puedes detener este script"
kubectl get service --namespace ingress-nginx ingress-nginx-controller --output wide --watch

Espera a que la IP externa esté disponible. Una vez que aparezca, puedes detener el script: tu clúster ahora está completamente configurado para ejecutar servicios y exponerlos a través de esa dirección IP pública.

A continuación, dirígete a tu proveedor DNS y crea un registro DNS que apunte a esta IP. Por ejemplo, podrías crear un subdominio como plausible.tudominio.com.

Ahora vamos a instalar Plausible en el clúster. En la configuración a continuación, verás que:

  • Persistimos el almacenamiento tanto para PostgreSQL como para ClickHouse; aquí es donde se almacenarán todos tus datos de análisis. De esta manera puedes hacer copias de seguridad fácilmente de tus datos y restaurarlos si es necesario. También permite que los contenedores se gestionen sin perder datos.
  • Anotamos el Ingress con el ClusterIssuer que creamos anteriormente, para que pueda solicitar y renovar automáticamente los certificados TLS por nosotros.
  • Conectamos Plausible al Ingress, y especificamos el nombre DNS para el acceso público.
CloudShell
#bash
PLAUSIBLE_DNS=plausible.tudominio.com

# Desplegar Plausible Analytics usando Helm
helm repo add imio https://imio.github.io/helm-charts
helm repo update
helm upgrade --install plausible-analytics imio/plausible-analytics \
  --namespace plausible-analytics \
  --create-namespace \
  --version 0.4.2 \
  --set baseURL="http://${PLAUSIBLE_DNS}" \
  --set postgresql.primary.persistence.enabled=true \
  --set postgresql.primary.persistence.size=1Gi \
  --set clickhouse.persistence.enabled=true \
  --set clickhouse.persistence.size=8Gi \
  --set ingress.enabled=true \
  --set ingress.annotations."cert-manager\.io/cluster-issuer"="letsencrypt-production" \
  --set ingress.annotations."kubernetes\.io/ingress\.class"=nginx \
  --set ingress.annotations."kubernetes\.io/tls-acme"="\"true\"" \
  --set ingress.className=nginx \
  --set ingress.hosts[0]=${PLAUSIBLE_DNS} \
  --set ingress.paths.path=/ \
  --set ingress.tls[0].secretName=letsencrypt-production \
  --set ingress.tls[0].hosts[0]=${PLAUSIBLE_DNS}

# Monitorear el progreso del despliegue
echo "Monitoreando el progreso del despliegue..."
kubectl get pods -n plausible-analytics -w

Después de que el script termine, deberías poder acceder a Plausible en el nombre DNS que configuraste, por ejemplo, plausible.tudominio.com.

Pantalla de configuración de la comunidad Plausible.io
Pantalla de configuración de la comunidad Plausible.io

Conclusión

En este artículo, hemos configurado una solución de análisis rentable y respetuosa con la privacidad usando Plausible.io en Azure Kubernetes Service (AKS). Al aprovechar Kubernetes, podemos escalar, gestionar y asegurar nuestra plataforma de análisis mientras nos mantenemos conformes con las regulaciones de privacidad, todo sin molestos banners de consentimiento de cookies.

Aprendiste cómo:

  • Configurar el clúster AKS más económico posible usando tus créditos de Azure
  • Configurar Ingress y automatización de certificados TLS usando cert-manager y Let's Encrypt
  • Desplegar y ejecutar Plausible.io con almacenamiento persistente para PostgreSQL y ClickHouse

Esta configuración proporciona información valiosa sobre el tráfico del sitio web, respeta la privacidad del usuario, y te da control total sobre tus datos, todo a un bajo costo mensual.

Si estás buscando una alternativa ligera y de código abierto a Google Analytics, Plausible.io definitivamente vale la pena considerarlo.

Si tienes alguna pregunta o necesitas ayuda en el camino, no dudes en contactarme.

¡Feliz seguimiento!

Acerca de Jeroen Bach

Soy Ingeniero de Software y Líder de Equipo con más de 15 años de experiencia profesional. Me apasiona resolver problemas complejos a través de soluciones simples y elegantes. Este blog es donde comparto técnicas y perspectivas para construir gran software, inspirado en proyectos del mundo real.

Jeroen Bach

Diseñado en Figma y construido con Vue.js, Nuxt.js y Tailwind CSS. Desplegado vía Azure Static Web App y Azure Functions. Los análisis del sitio web están impulsados por Plausible Analytics, desplegado usando Azure Kubernetes Service.