Afscheid van Cookie Banners: Draai Plausible Analytics op Azure Kubernetes

Jeroen Bach

Jeroen Bach · Linkedin

7 min read ·

Al geruime tijd ben ik op zoek naar manieren om website analytics te verzamelen zonder die vervelende toestemmingsbanners te tonen. Als je ooit website analytics hebt gewild zonder privacy of gebruikerservaring te compromitteren, dan is dit artikel iets voor jou.

In deze gids introduceer ik je bij Plausible Analytics - een lichtgewicht, open-source, privacy-gericht alternatief voor Google Analytics - en leid ik je door het opzetten ervan op een betaalbaar Kubernetes cluster in Azure.

Update (Aug 2025): Azure heeft de Basic Load Balancer SKU uitgefaseerd. Als je deze gids volgt, zorg er dan voor dat je de Standard Load Balancer gebruikt. De Standard SKU voegt ongeveer €18,- euro toe aan je maandelijkse kosten, maar is nu de enige ondersteunde optie voor AKS clusters.

Wat is Plausible.io?

Plausible.io is een eenvoudige maar krachtige analytics tool die ontworpen is met privacy in het achterhoofd. In tegenstelling tot Google Analytics, gebruikt Plausible geen cookies en verzamelt geen persoonlijk identificeerbare informatie. Als gevolg daarvan kun je de cookie toestemmingsbanner volledig overslaan en toch compliant blijven met GDPR en andere privacywetten.

Het is een geweldige optie voor websites die geven om gebruiksvriendelijkheid, prestaties en het respecteren van bezoekers privacy.

Het beste deel? Je kunt het zelf draaien. Je kunt beginnen met hun gehoste cloudversie, die komt met een gratis proefperiode - perfect als je het wilt uitproberen zonder gedoe met de setup. Als je tevreden bent met wat je ziet, kun je ofwel bij hun abonnement blijven of volledige controle nemen door het zelf te hosten.

Self-hosting vs. Gehoste Oplossing

Self-hosting is ideaal als je een ontwikkelaar bent zoals ik en toevallig wat extra Azure tegoed hebt liggen. Het geeft je volledige controle en kan behoorlijk kosteneffectief zijn. Maar als dat niet jouw situatie is, is de gehoste oplossing waarschijnlijk de meer economische en zorgeloze keuze.

Hoe dan ook, Plausible maakt het makkelijk om te beginnen - en in dit artikel laat ik je zien hoe je het zelf opzet met Docker en Kubernetes op Azure.

Betaalbare Plausible.io Hosting met Azure Kubernetes

In dit artikel laat ik je de goedkoopste manier zien om Plausible.io te hosten op Azure Kubernetes Service (AKS).

Om je een idee te geven van wat je kunt verwachten: het draaien van deze setup voor een volledige maand kost mij ongeveer €35 en dat inclusief dagelijkse incrementele backups.

Update (Aug 2025): Door de kosten van de Standard Load Balancer zal dit nu ongeveer €53 zijn.

Azure Kubernetes kosten voor Plausible.io
Azure Kubernetes kosten voor Plausible.io

Deze setup bevat de volgende belangrijke componenten:

  • cert-manager - om SSL/TLS certificaten automatisch te beheren
  • Let's Encrypt - voor het uitgeven van gratis, vertrouwde SSL certificaten
  • NGINX Ingress Controller - om routing af te handelen en Plausible bloot te stellen aan het internet
  • Plausible.io - het privacy-vriendelijke analytics platform dat we deployen

Storage Tip: Gebruik Ephemeral Disks voor Kostenbesparing

Bij het aanmaken van een AKS cluster komen de belangrijkste extra kosten van de persistente OS disk die standaard wordt aangemaakt voor elke node.

Om kosten te verlagen, kun je in plaats daarvan ephemeral OS disks gebruiken. Deze worden direct op de lokale opslag van de VM opgeslagen en komen zonder extra kosten. Ze zijn ideaal voor stateless workloads of setups waar persistente opslag apart wordt afgehandeld - zoals in dit geval, waar we de data van Plausible opslaan op een aangekoppeld volume.

Als je deze route kiest, zorg er dan voor dat je de maximale schijfgrootte controleert die toegestaan is voor je geselecteerde VM grootte. Bijvoorbeeld, de Standard_B2s VM grootte ondersteunt tot 30 GB ephemeral opslag - wat meer dan genoeg is voor het opslaan van de benodigde Docker images.

In de stap-voor-stap gids hieronder kun je de commando's direct uitvoeren in Azure Cloud Shell.

Create cluster
#bash
RESOURCEGROUP=rg-plausible-westeu-prod
CLUSTERNAME=aks-plausible-westeu-prod
LOCATION=westeurope
VMSIZE=Standard_B2s
VMDISKSIZE=30 # Houd dit op de max grootte die de VM toestaat (dit is de max van Standard_B2s)

# Maak de resource group aan
az group create --name $RESOURCEGROUP --location $LOCATION

# Maak het AKS cluster aan - met de 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

# Haal de credentials op voor het AKS cluster (voor de volgende stappen)
az aks get-credentials --resource-group $RESOURCEGROUP --name $CLUSTERNAME

Met het cluster draaiend, is de volgende stap het aanmaken van een ClusterIssuer, die de uitgifte van TLS certificaten zal automatiseren met behulp van Let's Encrypt en het opzetten van een Ingress die extern verkeer zal afhandelen en doorsturen naar de juiste service binnen het cluster.

Configure Ingress and TLS certificates
#bash
LETSENCRYPTEMAIL=[email protected] # <--- Verander dit naar jouw emailadres

# Maak de letsencrypt cluster issuers aan
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:
    # De ACME server URL
    server: https://acme-v02.api.letsencrypt.org/directory
    # Emailadres gebruikt voor ACME registratie
    email: ${LETSENCRYPTEMAIL}
    # Naam van een secret gebruikt om de ACME account private key op te slaan
    privateKeySecretRef:
      name: letsencrypt-production
    # Schakel de HTTP-01 challenge provider in
    solvers:
    - http01:
        ingress:
          class: nginx
EOF

# Installeer nginx ingress controller
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 "Wachten tot het externe ip is toegewezen aan de ingress controller, zodra het beschikbaar is kun je dit script stoppen"
kubectl get service --namespace ingress-nginx ingress-nginx-controller --output wide --watch

Wacht tot het externe IP beschikbaar wordt. Zodra het verschijnt, kun je het script stoppen - je cluster is nu volledig ingesteld om services te draaien en deze bloot te stellen via dat publieke IP adres.

Ga vervolgens naar je DNS provider en maak een DNS record aan die naar dit IP wijst. Bijvoorbeeld, je zou een subdomein kunnen aanmaken zoals plausible.jouwdomein.com.

Nu gaan we Plausible installeren op het cluster. In de configuratie hieronder zie je dat we:

  • De opslag persisteren voor zowel PostgreSQL als ClickHouse - dit is waar al je analytics data wordt opgeslagen. Op deze manier kun je eenvoudig een backup maken van je data en deze herstellen indien nodig. Het stelt de containers ook in staat om beheerd te worden zonder data te verliezen.
  • De Ingress annoteren met de ClusterIssuer die we eerder hebben aangemaakt, zodat deze automatisch TLS certificaten voor ons kan aanvragen en vernieuwen.
  • Plausible verbinden met de Ingress, en de DNS naam specificeren voor publieke toegang.
CloudShell
#bash
PLAUSIBLE_DNS=plausible.jouwdomein.com

# Deploy Plausible Analytics met behulp van 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}

# Monitor het deployment proces
echo "Het deployment proces wordt gemonitord..."
kubectl get pods -n plausible-analytics -w

Nadat het script klaar is, zou je Plausible moeten kunnen bereiken op de DNS naam die je hebt geconfigureerd - bijvoorbeeld, plausible.jouwdomein.com.

Plausible.io community setup scherm
Plausible.io community setup scherm

Conclusie

In dit artikel hebben we een kosteneffectieve en privacy-vriendelijke analytics oplossing opgezet met behulp van Plausible.io op Azure Kubernetes Service (AKS). Door gebruik te maken van Kubernetes kunnen we ons analytics platform schalen, beheren en beveiligen terwijl we compliant blijven met privacy regelgeving - allemaal zonder vervelende cookie toestemmingsbanners.

Je hebt geleerd hoe je:

  • Het goedkoopst mogelijke AKS cluster configureert met gebruik van je Azure tegoed
  • Ingress en TLS certificaat automatisering opzet met behulp van cert-manager en Let's Encrypt
  • Plausible.io deployed en draait met persistente opslag voor zowel PostgreSQL als ClickHouse

Deze setup biedt waardevolle inzichten in website verkeer, respecteert gebruikersprivacy, en geeft je volledige controle over je data - allemaal tegen lage maandelijkse kosten.

Als je op zoek bent naar een lichtgewicht, open-source alternatief voor Google Analytics, is Plausible.io zeker het overwegen waard.

Als je vragen hebt of hulp nodig hebt onderweg, neem dan gerust contact op.

Veel plezier met tracken!

Over Jeroen Bach

Ik ben een Software Engineer en Team Lead met meer dan 15 jaar professionele ervaring. Ik ben gepassioneerd over het oplossen van complexe problemen door middel van eenvoudige, elegante oplossingen. Deze blog is waar ik technieken en inzichten deel voor het bouwen van geweldige software, geïnspireerd door echte projecten.

Jeroen Bach

Ontworpen in Figma en gebouwd met Vue.js, Nuxt.js en Tailwind CSS. Gedeployed via Azure Static Web App en Azure Functions. Website analytics worden aangedreven door Plausible Analytics, gedeployed met Azure Kubernetes Service.