Alternative zur Datenkrake? Plausible Analytics

Ich möchte gerne auch eine Privacy freundliche Statistiksoftware auf meiner Seite haben, um zu sehen wie viele Leute auf die Seite zugreifen. Google Analytics ist dafür nicht geeignet, denn das Programm füttert sich fleißig durch das Datenbuffet und außerdem hat die österreichische Datenschutzbehörde 2022 entschieden, dass die Nutzung von Google Analytics gegen die DSGVO verstößt. Plausible hingegen speichert überhaupt keine personalisierten Daten und es benötigt daher auch nicht einmal eine Zustimmung. Die Zugriffe werden nur zusammengezählt, also kumulativ gespeichert, und als einzige Zuordnung gibt es das Ursprungsland. Ein Nachteil von Plausible: Adblocker blockieren auch standardmäßig diese Art der Besucherzählung, Plausible bezeichnet sich gar als “Opfer” der Aufrüstung zwischen Werbeindustrie und Adblocker. Was ich dazu gedenke zu tun, schreibe ich am Ende des Beitrags.

Self Hosting

Die einfachste Variante, um Plausible nutzen zu können, ist sich ein Abo für deren Service zu holen. Das kostest jedoch neun Euro pro Monat für das kleinste Paket. Das beinhaltet das Zählen von zehntausend Aufrufen pro Monat. Für meine Zwecke ein zu hoher Preis. Außerdem bastl’ ich gern herum und lerne auch gerne neue Sachen. Von daher hat es mich sehr gefreut, dass es für Plausible auch die Möglichkeit gibt es auf einem eigenen Server zu installieren, nämlich Plausible Community Edition. Das mach’ ich hab mir gedacht.

DNS Record anpassen

Als ersten Schritt habe ich die DNS-Einstellungen bei meinem Webhosting-Anbieter angepasst, denn dieser Schritt kann bis zu 48 Stunden dauern bis sich die Änderung weltweit verbreitet hat. Das schaut im Prinzip so aus:

Bei der IP-Adresse rechts im Screenshot gibt man die IP-Adresse des gewünschten Servers an; in meinem Fall ist das der VPS-Server. Sehr gut und schon hat man eine Subdomain eingerichtet!

Zusammenspiel mit Nextcloud All-in-One

Da ich auf meinem VPS bereits Nextcloud AiO (mittels Docker Compose) installiert habe, muss ich sicherstellen, dass sich die beiden Dienste nicht auf die Füße steigen. Denn wenn man üblicherweise eine Website aufruft, wird zuerst der Domain-Name auf eine IP-Adresse aufgelöst und anschließend wird beim Aufrufen der Standardport gewählt (80 für das größtenteils obsolete HTTP und 443 für HTTPS). Bei mir besetzt aber schon Nextcloud den Standardport 443. Daher braucht es einen Reverse Proxy Manager, das ist eine Art Platzanweiser oder Verkehrspolizist, der die Zuweisung auf den richtigen Service macht.

Welcher Reverse Proxy Manager?

Das war die nächste Frage, die mich ein schönes Neichterl beschäftigt hat war, welchen Reverse Proxy soll ich überhaupt verwenden? Die gibt es nämlich wie Sand am Meer. Keine einfache Entscheidung. Klassischerweise wird Nginx verwendet und auch andere sind sicher sehr gut, aber meine Entscheidung ist letztlich auf Caddy gefallen. Diese Software ist einfach zu konfigurieren und sie eignet sich auch potenziell sehr gut für mein Heimserversetup. Ach ja, die Nextcloud-Installation bietet außerdem auch gleich ein Setup für Caddy. Also spricht ja nichts mehr dagegen.

Caddy auf VPS installieren und mit einrichten

Die Installation geht recht einfach, wenn man bereits Docker Compose verwendet und in meinem Fall sind die notwendigen Zeilen auch bereits drin, man muss sie nur auskommentieren.

Ich halte mich an diese Anleitung wie man für Nextcloud AiO Caddy oder auch einen anderen Reverse Proxy einrichten kann.

Das docker-compose.yml File für Nextcloud und Caddy:

version: '3.8'
services:
  nextcloud-aio-mastercontainer:
    image: nextcloud/all-in-one:latest
    init: true
    restart: always
    container_name: nextcloud-aio-mastercontainer
    volumes:
      - nextcloud_aio_mastercontainer:/mnt/docker-aio-config
      - /var/run/docker.sock:/var/run/docker.sock:ro
    ports:
      - "80:80"
      - "8080:8080"
      - "8443:8443"
    environment:
      - APACHE_PORT=11000
      - APACHE_IP_BINDING=127.0.0.1
      - NEXTCLOUD_MOUNT=/mnt/nfs
 
  caddy:
    image: caddy:alpine
    restart: always
    container_name: caddy
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./certs:/certs
      - ./config:/config
      - ./data:/data
      - ./sites:/srv
    network_mode: "host"
 
volumes:
  nextcloud_aio_mastercontainer:
    name: nextcloud_aio_mastercontainer

Mit diesem Yaml-Validator kann man die Konfigdatei auf Fehler überprüfen (was bei mir notwendig war, weil ich zuerst den Einzug falsch gehabt habe).

Hier gibt es auch noch die Anleitung für das Einrichten in Plausible, aber für mich hat die einfachste Variante für das ‘Caddyfile’ bereits ausgereicht:

https://cloud.martinfellner.at:443 {
    reverse_proxy localhost:11000
}
 
https://analytics.martinfellner.at:443 {
    reverse_proxy localhost:8000
}

Dann Container neustarten mit:

docker compose up -d --force-recreate

Ah, das startet nur den Mastercontainer neu, nicht die ganzen Untercontainer. Das hat mich einige Zeit gekostet, da ich nicht verstanden habe, wieso der Apache Server einfach nicht vom Port 443 Platz machen wollte, bis ich gesehen habe, dass der ja nie neugestartet worden ist. Dafür helfen diese Terminal-Befehle von diesem Beitrag. Zum Stoppen der Container, die unterste Zeile nehmen:

# Update mastercontainer
docker exec -it nextcloud-aio-mastercontainer sudo -u www-data php /var/www/docker-aio/php/src/Cron/UpdateMastercontainer.php                                                                                                       
# Update then Start containers
docker exec -it nextcloud-aio-mastercontainer sudo -u www-data php /var/www/docker-aio/php/src/Cron/StartAndUpdateContainers.php    
 
# Just start the containers
docker exec -it nextcloud-aio-mastercontainer sudo -u www-data php /var/www/docker-aio/php/src/Cron/StartContainers.php                             
 
# Stop containers
docker exec -it nextcloud-aio-mastercontainer sudo -u www-data php /var/www/docker-aio/php/src/Cron/StopContainers.php

Und jetzt noch einmal docker compose up -d --force-recreate ausführen.

Für den Nextcloud Mastercontainer gibt es eine neue Version:

Ich habe auch Nextcloud Talk ausgeschaltet, das brauche ich nicht. Und die Backupfunktion probiere ich auch gleich, das ist das Ergebnis

Allerdings werden dabei auch die Daten gebackupt, das brauche ich nicht unbedingt. Das sollte ich mir merken, wenn ich eine Migration mache, damit das Backup nicht zu groß wird. Aber egal, zurück zum Neustart von Nextcloud:

Plausible starten

Um Plausible nun zu starten fügt man normalerweise einfach das folgende Snippet ein:

<script defer data-domain="martinfellner.at" src="https://analytics.martinfellner.at/js/script.js"></script>

Wenn man Quartz verwendet ist das jedoch nicht notwendig, da hier dynamisch in die statische Website das Snippet eingefügt wird, das klingt etwas widersprüchlich, aber liegt daran, dass die Website als eine single-page application (SPA) funktioniert. Diese SPA sind ein Thema für sich, aber für meine Seite ermöglicht das, dass nicht immer die gesamte Website neu geladen werden muss, wenn man auf eine Unterseite navigiert. Und damit das Tracking funktioniert, muss eben auch das Snippet dann immer eingeschleust werden.

Die Konfigurationsdatei quartz.config.ts sieht dann so aus:

Auf jeden Fall funktioniert das dann. Oder habe ich mir gedacht. Denn Plausible hat mir nur gesagt, dass es auf den ersten Besucher wartet. Ich habe die Seite aufgerufen, aber immer noch nichts. Achja, ich habe ja Skriptblock laufen, da geht natürlich nichts. Deaktiviert und … immer noch nichts, denn erst zu diesem Zeitpunkt habe ich bemerkt, dass auch der üblichere Adblocker ublock das Skript blockiert und ich habe auch keine Möglichkeit gefunden Plausible zuzulassen, sehr ärgerlich. Daher habe ich für meine eigene Seite den ganzen Adblocker ausschalten müssen (zumindest gibt es hier keine Werbung). Aber wenn es läuft sieht es aus:

Anmerkung: Das war noch bevor ich am Firefox den Adblocker deaktiviert habe, deshalb wird nur Android angezeigt.

Wie man gut sehen kann, werden die relevanten Daten angezeigt, aber keine persönlichen Daten gespeichert, denn die Daten werden nur den Browsern, dem Betriebssystem, der Bildschirmgröße und dem Land zugewiesen. Dadurch lassen sich keine Rückschlüsse auf die Besucher machen.

Weitere Überlegung: Blockierung umgehen?

Plausible speichert keine persönlichen Daten, diese braucht es auch gar nicht, aber ich möchte schon gerne wissen wie viele Leute auf die Seite zugreifen. Laut diesem Beitrag von Plausible werden auf “tech-savvy” Internetseiten bis zu 58 Prozent der Tracker blockiert. Das ist zwar zu begrüßen, wenn es sich um klassische Tracker wie Google Analytics handelt, aber es trifft auch die “guten” Tracker (oder genauer gesagt Statistikaggregatoren). Deswegen bin ich am Überlegen, ob ich das System nicht doch noch etwas umstellen soll. Aber dazu gibt es mehr in einem Beitrag.