Besucherstatistiken und ihre Schwierigkeiten
Ich habe im letzten Jahr Plausible eingerichtet um die Handvoll Leute zu zählen, die meine Website bis dato besuchen. Leider hat sich herausgestellt, dass ein normaler Adblocker – wie ich ihn selbst verwende – auch das Javascript-Snippet zum Zählen blockiert. Zuerst habe ich gedacht, dass Plausible nicht funktioniert, weil meine eigenen Websiten-Aufrufe nicht registriert worden sind. Aber nein, das ist per Design so und man muss einen Reverse Proxy zwischenschalten, damit das auch geht. Dazu habe ich aber nie Zeit gehabt und daher wurde wohl ein Gutteil der Besucher gar nicht gezählt. Nachdem ich jetzt aber sowieso meinen Mietserver migriere, ist das eine gute Gelegenheit sich um eine Alternative umzusehen. Da kommt Goatcounter ins Spiel.
Minimalismus mit Goatcounter
Die Oberfläche von Goatcounter schaut zwar nicht so poliert aus wie bei Plausible, aber Goatcounter zählt von Haus aus alle Aufrufe und das auch in datenschutzfreundlicher Manier. Das heißt keine individuellen Daten, wie IP-Adressen, werden gesammelt. Es wird nur zusammengezählt und es lassen sich keine Rückschlüsse auf individuelle Besucher machen. Das heißt man bekommt durchaus relevante Infos, wie aus welchen Ländern wer auf die Seite zugreift, aber ansonsten gibt sich Goatcounter sparsam. So sparsam, dass man auch keine Zustimmung zu irgendeiner Datenverarbeitung einholen muss, es werden schlicht keine individuellen Daten verarbeitet.
Installation von Goatcounter auf eigenen LXC unter Proxmox
Goatcounter ist nur eine Go-Binary (daher auch der Name) und hat keinerlei Abhängigkeiten. Das heißt Goatcounter würde auch sehr gut in den Caddy-LXC passen, aber aus administrativen Gründen bekommt das Programm dennoch seinen eigenen Container. So kann ich separat Zurückrollen, falls etwas kaput gehen sollte und auch die Backups gehen eigenständig. Also erster Schritt ist ein LXC Container erstellen. Ich verwende Ubuntu 24.04, aber die Distribution ist eher nebensächlich. Ich bin es halt gewöhnt. Der Container sollte eine statische IP-Adresse bekommen, der Container geupdatet sein und die Programme git
, curl
und sqlite3
installiert sein. OK, das sind dann schon ein paar Abhängigkeiten, aber das ist nicht die Welt:
sudo apt install git curl sqlite3
Unter Ubuntu 24.04 sind die Programme jedenfalls nicht vorinstalliert:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
git-man libbrotli1 libcurl3t64-gnutls libcurl4t64 liberror-perl libgdbm-compat4t64
libldap-common libldap2 libperl5.38t64 librtmp1 libssh-4 patch perl perl-modules-5.38
Suggested packages:
git-daemon-run | git-daemon-sysvinit git-doc git-email git-gui gitk gitweb git-cvs
git-mediawiki git-svn diffutils-doc perl-doc libterm-readline-gnu-perl
| libterm-readline-perl-perl make libtap-harness-archive-perl sqlite3-doc
The following NEW packages will be installed:
curl git git-man libbrotli1 libcurl3t64-gnutls libcurl4t64 liberror-perl
libgdbm-compat4t64 libldap-common libldap2 libperl5.38t64 librtmp1 libssh-4 patch perl
perl-modules-5.38 sqlite3
0 upgraded, 17 newly installed, 0 to remove and 2 not upgraded.
Need to get 15.0 MB of archives.
Dann mit unter /opt
die Repo klonen…
git clone https://github.com/arp242/goatcounter.git
…
cd goatcounter
…
sudo apt install golang
…
go build ./cmd/goatcounter
…
./goatcounter db create site \
-vhost=example.com \
-user.email=admin@example.com
Hier muss man ein sicheres Passwort für den Admin-Login erstellen.
./goatcounter serve --tls none --listen :8080
Reverse Proxy Einstellungen
Beim Caddy Reverse Proxy muss man jetzt die folgenden entsprechenden Zeilen hinzufügen:
stats.website.com {
reverse_proxy <lokale-ip>:8080
tls "admin@example.com"
encode gzip zstd
Und schon sollte die Website aufrufbar sein und man kann sich mittels zuvor festgelegten Passwort einloggen:
Quartz sagen es soll nun Goatcounter verwenden
Mein Static Site Builder Quartz hat schon eine vorgefertigte Einstellungsmöglichkeit, um Goatcounter als Service zu verwenden.
Dazu trägt man in quartz.config.ts
folgende Zeilen ein:
`{ provider: 'goatcounter', websiteId: 'my-goatcounter-id', host: 'my-goatcounter-domain.com', scriptSrc: 'https://my-url.to/counter.js' }`
Das sieht dann so aus, Plausible weg:
Goatcounter her:
analytics: {
provider: "goatcounter",
host: "stats.martinfellner.at",
websiteId: "stats-martinfellner-at",
scriptSrc: "https://stats.martinfellner.at/counter.js"
},
Laut dem Chatbot braucht man für die selbstgehostete Variante die Website ID eh nicht. Schauen wir einmal ob das stimmt.
Jetzt kann die Website neu gebastelt werden von Quartz und schauen wir einmal, ob Goatcounter dann funktioniert.
Goatcounter mag’s hinterm Reverse Proxy
Goatcounter mag es hinterm Reverse Proxy:
Aber zumindest zum Einrichten geht es auch so. Also alles in Ordnung.
Geht nicht
Leider hat es ab da nur mehr gehakt. Quartz will einfach kein Goatcounter Snippet einbauen. Ich habe edin paar Sachen probiert, aber nichts hilft. Das schaue ich mir ein andermal an, wie zum Beispiel im Folgebeitrag, wo es dann funktioniert hat.