Ackee ist ein Analyse-Tool, mit dem Statistiken über Webseitenbesuche erfasst werden können. Anders als andere Anwendungen in diesem Bereich, kommt Ackee ganz ohne die Verwendung von Cookies aus. Mit Hilfe des bereitgestellten Docker-Images kann das Tool ganz leicht auf dem eigenen Dokku-Server installiert werden.
Die Analysesoftware wurde in NodeJS geschrieben und nutzt MongoDB zum speichern der Daten. Sie kann wahlweise direkt auf einem Server ausgeführt werden, wenn Node vorhanden ist und wird auch als Docker Image angeboten. Dadurch kann die Anwendung auf einem Dokku-Server ausgeführt werden. Dokku ist eine PaaS-Implementierung, die auf dem eigenen Server betrieben werden kann.
Ackee kann als Alternative zu Google Analytics oder Matomo (ehemals Piwik) gesehen werden. Es verwendet jedoch keine Cookies, daher muss somit auch kein Cookie-Banner angezeigt werden. Um zu verhindern, dass Seitenaufrufe doppelt gezählt werden, wird ein Hash für jeden Besucher berechnet. Der Hash besteht aus der IP-Adresse und dem User-Agent des Besuchers sowie einem zufälligen Salt, der täglich wechselt. Durch das tägliche Aktualisieren des Salts ist längerfristiges Tracking unmöglich.
Damit die Installation gelingt, müssen folgende Vorrsaussetzungen erfüllt sein:
Wenn ein Dokku-Server bereits eingerichtet ist, dann kann der Schritt 1 übersprungen werden und direkt mit Schritt 2 begonnen werden.
Bevor Dokku installiert werden kann, muss eine Domain (oder Subdomain) als Wildcard-Domain eingerichtet werden, damit die Subdomains für die einzelnen Anwendungen verwendet werden können.
Die Installation von Dokku selbst erfolgt über die Kommandozeile. Dokku liefert ein Bash-Script, welches die Installation automatisch übernimmt.
Zunächst muss ein Public-Private-Key-Paar für den Root-Benutzer erstellt werden:
ssh-keygen -t rsa -P "" -b 4096 -f ~/.ssh/id_rsa
Danach kann das Installationsskript von Dokku ausgeführt werden. Dieser Vorgang dauert einige Minuten.
wget https://raw.githubusercontent.com/dokku/dokku/v0.18.5/bootstrap.sh;
sudo DOKKU_TAG=v0.18.5 bash bootstrap.sh
Der Befehl wget ...
lädt das Installationsscript herunter und der zweite Befehl führt dieses Script auf dem Server aus.
Die Version, hier 0.18.5
, sollte durch die gerade aktuelle Version ersetzt werden.
(Zum Zeitpunkt des Artikel war die Version 0.19.2
von Dokku nicht installierbar.)
Eine Übersicht der verfügbaren Dokku-Versionen finden sich auf der GitHub-Seite des Projektes.
Nachdem das Installationsskript durchgelaufen ist, muss die Installation noch über die Weboberfläche beendet werden. Dazu wird die Domain von Dokku im Browser aufgerufen. Es ist wichtig, dass dieser Schritt vollständig abgeschlossen wird, da es sonst möglich ist den Dokku-Server zu übernehmen, da die Weboberfläche bis zum Abschluss der Installation nicht durch ein Passwort geschützt ist.
Für Ackee wird eine neue Anwendung in Dokku angelegt. Dies passiert mit diesem Befehl:
dokku apps:create ackee
In diesem Beispiel ist ackee
der Name der Anwendung und wird in den weiteren Schritten der Installation verwendet.
Bei Bedarf kann auch ein anderer Name angegeben werden; dann muss dieser auch in den nachfolgenden Schritten angepasst werden.
Die Statistiken werden über einen Login-Mechanismus gesichert. Der Benutzername und das Passwort werden über Umgebungsvariablen gesetzt:
dokku config:set ackee ACKEE_USERNAME=admin ACKEE_PASSWORD=password
Die Werte admin
und password
sollten durch einen beliebigen Benutzernamen und ein sicheres Passwort ausgetauscht werden.
Bevor die Anwendung gestartet werden kann, muss zunächst die Datenbank eingerichtet werden. Um MongoDB zusammen mit Dokku zu verwenden, wird das MongoDB-Plugin installiert:
dokku plugin:install https://github.com/dokku/dokku-mongo.git mongo
Jetzt kann eine neue Datenbank mit dem Namen ackee
angelegt werden:
dokku mongo:create ackee
Damit die Datenbank auch von der ackee
-Anwendung verwendet werden kann, muss die Datenbank noch mit der Anwendung verknüpft werden:
dokku mongo:link ackee ackee
Der Befehl erstellt eine Umgebungsvariable mit dem Namen MONGO_URL
, jedoch heißt die Variable, die von Ackee beachtet wird ACKEE_MONGODB
.
Aus diesem Grund wird der Inhalt von MONGO_URL
in die Variable ACKEE_MONGODB
kopiert:
dokku config:set ackee ACKEE_MONGODB=`dokku config:get ackee MONGO_URL`
Zunächst wird auf der Release-Seite die aktuellen Versionsnummer ermittelt.
Zum Zeitpunkt dieses Artikels ist die aktuellste Version 1.3.0
.
Dann werden folgende Befehle hintereinander ausgeführt:
docker pull electerious/ackee:1.3.0
docker tag electerious/ackee:1.3.0 dokku/ackee:1.3.0
dokku tags:deploy ackee 1.3.0
Erläuterung:
docker pull electerious/ackee:1.3.0
lädt das Docker-Image aus dem Docker-Hub herunter.docker tag electerious/ackee:1.3.0 dokku/ackee:1.3.0
erstellt lokal einen Tag dokku/ackee:1.3.0
für das Docker-Image.
Die Anwendungen in Dokku werden lokal immer im Format dokku/[NAME DER ANWENDUNG]:[VERSION]
getaggt.dokku tags:deploy ackee 1.3.0
weist Dokku an, die Anwendung auszurollen.Ackee wird auf dem Port 3000
ausgeführt.
Da dies nicht dem Standard-HTTP-Port 80
entspricht, muss ein Port-Mapping von Port 80
auf Port 3000
eingerichtet werden:
dokku proxy:ports-set ackee http:80:3000
Die Anwendung sollte per HTTPS gesichert werden, um dem aktuellen Stand der Sicherheit zu entsprechen. In Dokku können Zertifikate hinterlegt werden, jedoch kann der Prozess auch automatisiert erfolgen. Das Let’s Encrypt Plugin für Dokku bietet eine einfache Möglichkeit dies umzusetzen.
Es muss zunächst das Plugin installiert werden:
sudo dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git
Danach wird die Anwendung konfiguriert.
Für den Wert DOKKU_LETSENCRYPT_EMAIL
muss eine Kontakt-E-Mail hinterlegt werden.
Dorthin sendet Let’s Encrypt beispielsweise Benachrichtigungen, wenn das Zertifikat abläuft und erneuert werden muss.
dokku config:set --no-restart ackee DOKKU_LETSENCRYPT_EMAIL=contact@example.org
dokku letsencrypt ackee
Da Browser Ajax-Anfragen an andere Domains – sogenannte „Cross Origin Requests“ – verhindern, muss ein entsprechender HTTP-Header gesetzt werden. Eine genauere Beschreibung zum Thema CORS-Header liefert die Dokumentation.
Der folgende Inhalt muss in die Datei /home/dokku/ackee/nginx.conf.d/cors-headers.conf
geschrieben werden.
Dadurch wird die Nginx-Konfiguration für die Anwendung so angepasst, dass immer die CORS-Header mitgeschickt werden.
# /home/dokku/ackee/nginx.conf.d/cors-headers.conf
add_header Access-Control-Allow-Origin "*" always;
add_header Access-Control-Allow-Methods "POST, PATCH, OPTIONS" always;
add_header Access-Control-Allow-Headers "DNT, X-CustomHeader, Keep-Alive, User-Agent, X-Requested-With, If-Modified-Since, Cache-Control, Content-Type" always;
Nachdem die Datei erstellt wurde, muss der Nginx-Server neugestartet werden:
service nginx restart
Die Installation von Ackee ist jetzt abgeschlossen. Damit Statisktiken erhoben werden können, wird ein Tracking-Script auf der jeweilgen Website eingebunden. Hierzu werden die folgenden Schritte vorgenommen:
dokku domains:report ackee
anzeigen.<script>
-Tag mit dem Label „Embeded code“ auf der Website einfügen.Die Statistiken werden jetzt in Ackee erfasst.
Um Ackee zu aktualisieren wird in etwa genauso vorgegangen, wie in Schritt 5. Zunächst wird die neue Version aus dem Docker-Hub heruntergeladen, getaggt und dann gestartet.
In unserem Beispiel ist die neuere Version 1.4.0
, dieser Wert muss durch die Version ausgetauscht werden, auf die aktualisiert werden soll.
docker pull electerious/ackee:1.4.0
docker tag electerious/ackee:1.4.0 dokku/ackee:1.4.0
dokku tags:deploy ackee 1.4.0
Falls auf eine ältere Version zurückgewechselt werden soll, kann entsprechend verfahren werden. Die Informationen zu aktuellen Releases hält die GitHub-Seite bereit.