Abschied von Cookie-Bannern: Plausible Analytics auf Azure Kubernetes betreiben

Jeroen Bach

Jeroen Bach · Linkedin

6 min read ·

Seit geraumer Zeit suche ich nach Möglichkeiten, Website-Analysen zu erfassen, ohne diese lästigen Einwilligungsbanner anzeigen zu müssen. Wenn Sie schon immer Website-Analysen ohne Kompromisse bei Datenschutz oder Benutzererfahrung wollten, ist dieser Artikel genau richtig für Sie.

In diesem Leitfaden stelle ich Ihnen Plausible Analytics vor - eine leichtgewichtige, quelloffene, datenschutzorientierte Alternative zu Google Analytics - und führe Sie durch die Einrichtung auf einem kostengünstigen Kubernetes-Cluster in Azure.

Update (Aug 2025): Azure hat die Basic Load Balancer SKU ausgemustert. Wenn Sie diesem Leitfaden folgen, stellen Sie sicher, dass Sie stattdessen den Standard Load Balancer verwenden. Die Standard SKU fügt Ihren monatlichen Kosten rund 18,- Euro hinzu, ist aber jetzt die einzige unterstützte Option für AKS-Cluster.

Was ist Plausible.io?

Plausible.io ist ein einfaches, aber leistungsstarkes Analysetool, das mit Fokus auf Datenschutz entwickelt wurde. Im Gegensatz zu Google Analytics verwendet Plausible keine Cookies und sammelt keine personenbezogenen Daten. Dadurch können Sie den Cookie-Einwilligungsbanner komplett weglassen und bleiben dennoch konform mit der DSGVO und anderen Datenschutzgesetzen.

Es ist eine großartige Option für Websites, denen Benutzerfreundlichkeit, Performance und der Respekt vor der Privatsphäre der Besucher wichtig sind.

Das Beste daran? Sie können es selbst betreiben. Sie können mit ihrer gehosteten Cloud-Version beginnen, die mit einer kostenlosen Testversion kommt - perfekt, wenn Sie es ohne Einrichtungsaufwand testen möchten. Wenn Ihnen gefällt, was Sie sehen, können Sie entweder bei ihrem Abonnement bleiben oder die volle Kontrolle durch Self-Hosting übernehmen.

Self-Hosting vs. Gehostete Lösung

Self-Hosting ist ideal, wenn Sie wie ich Entwickler sind und zufällig noch etwas Azure-Guthaben übrig haben. Es gibt Ihnen volle Kontrolle und kann sehr kosteneffektiv sein. Aber wenn das nicht Ihre Situation ist, ist die gehostete Lösung wahrscheinlich die wirtschaftlichere und problemlosere Wahl.

In jedem Fall macht es Plausible leicht, loszulegen - und in diesem Artikel zeige ich Ihnen, wie Sie es selbst mit Docker und Kubernetes auf Azure einrichten.

Kostengünstiges Plausible.io-Hosting mit Azure Kubernetes

In diesem Artikel zeige ich Ihnen die günstigste Möglichkeit, Plausible.io auf Azure Kubernetes Service (AKS) zu hosten.

Um Ihnen eine Vorstellung zu geben, was Sie erwarten können: Der Betrieb dieses Setups für einen vollen Monat kostet mich rund 35 € und das beinhaltet tägliche inkrementelle Backups.

Update (Aug 2025): Aufgrund der Kosten des Standard Load Balancers werden dies jetzt etwa 53 € sein.

Azure Kubernetes Kosten für Plausible.io
Azure Kubernetes Kosten für Plausible.io

Dieses Setup umfasst die folgenden Hauptkomponenten:

  • cert-manager - zur automatischen Verwaltung von SSL/TLS-Zertifikaten
  • Let's Encrypt - zur Ausstellung kostenloser, vertrauenswürdiger SSL-Zertifikate
  • NGINX Ingress Controller - zur Verarbeitung des Routings und zur Bereitstellung von Plausible im Internet
  • Plausible.io - die datenschutzfreundliche Analyseplattform, die wir bereitstellen

Speicher-Tipp: Verwenden Sie Ephemeral Disks für Kosteneinsparungen

Bei der Erstellung eines AKS-Clusters entstehen die Hauptzusatzkosten durch die persistente OS-Disk, die standardmäßig für jeden Knoten erstellt wird.

Um Kosten zu reduzieren, können Sie stattdessen ephemere OS-Disks verwenden. Diese werden direkt im lokalen Speicher der VM gespeichert und verursachen keine zusätzlichen Kosten. Sie sind ideal für zustandslose Workloads oder Setups, bei denen persistenter Speicher separat verwaltet wird - wie in diesem Fall, wo wir die Daten von Plausible auf einem angehängten Volume speichern.

Wenn Sie diesen Weg gehen, stellen Sie sicher, dass Sie die maximal zulässige Disk-Größe für Ihre ausgewählte VM-Größe überprüfen. Zum Beispiel unterstützt die VM-Größe Standard_B2s bis zu 30 GB ephemeren Speicher - was mehr als ausreichend ist, um die notwendigen Docker-Images zu speichern.

In der Schritt-für-Schritt-Anleitung unten können Sie die Befehle direkt in der Azure Cloud Shell ausführen.

Cluster erstellen
# Ressourcengruppe und Cluster-Namen festlegen
RESOURCEGROUP=rg-plausible-westeu-prod
CLUSTERNAME=aks-plausible-westeu-prod
LOCATION=westeurope
VMSIZE=Standard_B2s
VMDISKSIZE=30 # Behalten Sie dies bei der maximalen Größe, die die VM erlaubt (dies ist das Maximum von Standard_B2s)

# Ressourcengruppe erstellen
az group create --name $RESOURCEGROUP --location $LOCATION

# AKS-Cluster erstellen - mit dem Standard Loadbalancer
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

# Credentials für den AKS-Cluster abrufen (für die folgenden Schritte)
az aks get-credentials --resource-group $RESOURCEGROUP --name $CLUSTERNAME

Mit dem laufenden Cluster besteht der nächste Schritt darin, einen ClusterIssuer zu erstellen, der die Ausstellung von TLS-Zertifikaten mit Let's Encrypt automatisiert, und einen Ingress einzurichten, der den externen Verkehr verarbeitet und ihn zum richtigen Service innerhalb des Clusters leitet.

Ingress und TLS-Zertifikate konfigurieren
# E-Mail-Adresse für Let's Encrypt festlegen
LETSENCRYPTEMAIL=[email protected] # <--- Ändern Sie dies zu Ihrer E-Mail-Adresse

# Letsencrypt Cluster Issuer erstellen
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:
    # Die ACME-Server-URL
    server: https://acme-v02.api.letsencrypt.org/directory
    # E-Mail-Adresse für die ACME-Registrierung
    email: ${LETSENCRYPTEMAIL}
    # Name eines Secrets zum Speichern des privaten ACME-Kontoschlüssels
    privateKeySecretRef:
      name: letsencrypt-production
    # HTTP-01 Challenge Provider aktivieren
    solvers:
    - http01:
        ingress:
          class: nginx
EOF

# NGINX Ingress Controller installieren
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 "Warte darauf, dass die externe IP dem Ingress Controller zugewiesen wird. Sobald sie verfügbar ist, können Sie dieses Skript stoppen"
kubectl get service --namespace ingress-nginx ingress-nginx-controller --output wide --watch

Warten Sie, bis die externe IP verfügbar wird. Sobald sie erscheint, können Sie das Skript stoppen - Ihr Cluster ist jetzt vollständig eingerichtet, um Dienste auszuführen und sie über diese öffentliche IP-Adresse bereitzustellen.

Als Nächstes gehen Sie zu Ihrem DNS-Provider und erstellen einen DNS-Eintrag, der auf diese IP verweist. Zum Beispiel könnten Sie eine Subdomain wie plausible.ihredomain.com erstellen.

Jetzt werden wir Plausible auf dem Cluster installieren. In der nachfolgenden Konfiguration sehen Sie, dass wir:

  • Den Speicher persistent machen für sowohl PostgreSQL als auch ClickHouse - hier werden alle Ihre Analysedaten gespeichert. Auf diese Weise können Sie Ihre Daten einfach sichern und bei Bedarf wiederherstellen. Es ermöglicht auch die Verwaltung der Container, ohne Daten zu verlieren.
  • Den Ingress annotieren mit dem ClusterIssuer, den wir zuvor erstellt haben, damit er automatisch TLS-Zertifikate für uns anfordern und erneuern kann.
  • Plausible mit dem Ingress verbinden und den DNS-Namen für den öffentlichen Zugriff angeben.
CloudShell
# DNS-Namen für Plausible festlegen
PLAUSIBLE_DNS=plausible.ihredomain.com

# Plausible Analytics mit Helm bereitstellen
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}

# Bereitstellungsfortschritt überwachen
echo "Überwache Bereitstellungsfortschritt..."
kubectl get pods -n plausible-analytics -w

Nachdem das Skript abgeschlossen ist, sollten Sie in der Lage sein, auf Plausible unter dem von Ihnen konfigurierten DNS-Namen zuzugreifen - zum Beispiel plausible.ihredomain.com.

Plausible.io Community-Setup-Bildschirm
Plausible.io Community-Setup-Bildschirm

Fazit

In diesem Artikel haben wir eine kosteneffektive und datenschutzfreundliche Analyselösung mit Plausible.io auf Azure Kubernetes Service (AKS) eingerichtet. Durch die Nutzung von Kubernetes können wir unsere Analyseplattform skalieren, verwalten und absichern, während wir konform mit Datenschutzbestimmungen bleiben - alles ohne lästige Cookie-Einwilligungsbanner.

Sie haben gelernt, wie Sie:

  • Den günstigstmöglichen AKS-Cluster mit Ihrem Azure-Guthaben konfigurieren
  • Ingress und TLS-Zertifikat-Automatisierung mit cert-manager und Let's Encrypt einrichten
  • Plausible.io mit persistentem Speicher für PostgreSQL und ClickHouse bereitstellen und betreiben

Dieses Setup bietet wertvolle Einblicke in den Website-Traffic, respektiert die Privatsphäre der Benutzer und gibt Ihnen volle Kontrolle über Ihre Daten - alles zu niedrigen monatlichen Kosten.

Wenn Sie nach einer leichtgewichtigen, quelloffenen Alternative zu Google Analytics suchen, ist Plausible.io definitiv eine Überlegung wert.

Wenn Sie Fragen haben oder unterwegs Hilfe benötigen, können Sie sich gerne melden.

Viel Erfolg beim Tracking!

Über Jeroen Bach

Ich bin Software-Ingenieur und Team Lead mit über 15 Jahren Berufserfahrung. Ich bin leidenschaftlich daran interessiert, komplexe Probleme durch einfache, elegante Lösungen zu lösen. Dieser Blog ist der Ort, an dem ich Techniken und Erkenntnisse zum Erstellen großartiger Software teile, inspiriert von realen Projekten.

Jeroen Bach

Entworfen in Figma und erstellt mit Vue.js, Nuxt.js und Tailwind CSS. Bereitgestellt über Azure Static Web App und Azure Functions. Website-Analysen werden von Plausible Analytics betrieben, bereitgestellt mit Azure Kubernetes Service.