Dieses Tutorial ist VALID.

Bitte lies Dir den Disclaimer durch, bevor Du eine Anleitung umsetzt...

Haftungsausschluss / Disclaimer

Matomo Docker Container

Verzeichnisse und docker-compose Datei erstellen

Wir legen wie erwartet ein Verzeichnis „matomo.xp-server.de“ unterhalb von „/var/www“ an. In diesem Verzeichnis befinden sich dann die „docker-compose“-Datei und das Verzeichnis mit der eigentlichen Anwendung von Matomo.

Im Gegensatz zur Nextcloud Installation brauchen wir hier kein separates Datenverzeichnis.

Das Setup der „docker-compose“-Datei sollte uns jetzt keine Probleme mehr bereiten :)

Eine Besonderheit haben wir noch: Matomo muss, wie die meisten anderen Web-Anwendungen, periodisch ein Script ausführen, welches im Hintergrund Routineaufgaben und die Archivierung der Statistik-Daten vornimmt. Hier weichen wir aber vom „offiziellen“ Weg ab. Matomo regelt das original über einen zweiten Container, der dieses Script anstartet. Wir machen das lieber über einen Cronjob von unserem Host-System aus. Aber dazu gleich im Anschluss mehr…

mkdir -p /var/www/matomo.xp-server.de
nano /var/www/matomo.xp-server.de/docker-compose.yml
### Matomo
### docker-compose.yml
###
##Start
version: '3'
services:

 matomo:
  image: matomo-php73-apache:latest
  container_name: matomo
  restart: always
  networks:
   - intern
   - web
  ports:
   - 80
  environment:
   - "VIRTUAL_HOST=matomo.xp-server.de"
  labels:
   - "traefik.enable=true"
   - "traefik.backend=matomo"
   - "traefik.frontend.rule=Host:matomo.xp-server.de"
   - "traefik.docker.network=web"
   - "traefik.frontend.headers.STSSeconds=315360000"
   - "traefik.frontend.headers.browserXSSFilter=true"
   - "traefik.frontend.headers.contentTypeNosniff=true"
   - "traefik.frontend.headers.forceSTSHeader=true"
   - "traefik.frontend.headers.STSIncludeSubdomains=true"
   - "traefik.frontend.headers.STSPreload=true"
   - "traefik.frontend.headers.frameDeny=true"
  volumes:
   - ./wwwdata:/var/www/html
  external_links:
   - maria104master

# matomo-cron:
#  image: matomo-php73-apache:latest
#  container_name: matomo-cron
#  restart: always
#  networks:
#   - intern
#  external_links:
#   - maria104master
#  volumes:
#   - ./wwwdata:/var/www/html
#  entrypoint: |
#   bash -c 'bash -s <<EOF
#   trap "break;exit" SIGHUP SIGINT SIGTERM
#   while /bin/true; do
#    su -s "/bin/bash" -c "/usr/local/bin/php /var/www/html/console core:archive" www-data
#    sleep 1800
#   done
#   EOF'

networks:
  intern:
    external: true
  web:
    external: true
##EOF

Auch hier werfen wir einen schnellen Blick auf die „docker-compose“-Datei:

Zeilen 4-8: Wir deklarieren die Version (3) und den Namen des Services (matomo).

Zeile 9: Als Image verwenden wir unser frisch gebackenes eigenes Matomo Image des vorherigen Kapitels. Die Versionsbezeichnung „:latest“ sorgt dafür, dass wir immer das mit „:latest“ getaggte Image laden.

Zeile 10: Containername für Docker: matomo
Ist an der Stelle vielleicht inkonsequent, da ich die Container wie auch die Backends eigentlich mit der vollen URL benennen sollte. Da wir aber wissen, was gemeint ist, und wir von Matomo ja nur eine Instanz hochfahren, verzichte ich auf den vollen Domainnamen…

Zeile 11: Unser Statistik-Tool soll immer laufen, daher „restart: always“.

Zeilen 12-14: Wir brauchen beide Docker-Netzwerke. Das Interne für die Verbindung zur Datenbank und das „Web“ zum Internet über unseren Reverse-Proxy Traefik.

Zeilen 15+16: Wir docken Traefik auf Port 80 an den Matomo Container an.

Zeilen 17+18: Über die „Environment“-Variable übergeben wir unseren Hostname an die Matomo Anwendung. Hier musst Du Deine URL eintragen ;)

Zeilen 19-30: Die Traefik-Label. Du musst Zeile 22 mit Deiner URL ersetzen, damit die Verbindung ins Internet und das Anfordern des Zertifikats klappt!

Zeilen 31+32: Hier wird ein Volume-Mount eingerichtet. Der Inhalt des „html“-Verzeichnisses des Containers wird relativ zum Basisverzeichnis des Hosts „/var/www/matomo.xp-server.de“ in das neue Verzeichnis „wwwdata“ gespeichert.

Zeilen 33+34: Der externe Link zur MariaDB wird eingerichtet.

Zeilen 36-53: Das wäre der zweite Container, der das Wartungsscript alle 30 Minuten ausführt. Er ist hier der Vollständigkeit halber mit in der Config, aber komplett auskommentiert, also ohne Funktion.
Wenn Du lieber den zweiten Container statt der Host-Cron-Lösung fahren möchtest, dann lösche bitte die „#“-Hash Zeichen vor allen Zeilen und führe das Crontab-Setup nachher nicht aus. Diese Lösung funktioniert auch und es ist Geschmackssache, wofür wir uns entscheiden. Ich nehme halt lieber die Crontab-Lösung :)
Dieser zweite Container hat nur Zugriff auf das „interne“ Netzwerk, weil dieser „cron-Container“ nicht ans Internet angeschlossen werden braucht. Darum fehlen ihm auch die Traefik-Label…

Zeilen 55-59: Die Netzwerke werden noch einmal aufgelistet und über „external“ mitgeteilt, dass diese Netzwerke beim Schließen des Containers nicht gelöscht werden sollen.

Crontab editieren, Matomo Container starten, Logfile auswerten

Das Crontab-Setup ist hier noch einmal genauer beschrieben…

Mit dem Befehl „crontab -e“ starten wir den Crontab-Editor und fügen folgende Zeile für unseren Matomo Dienst ein:

*/20 * * * * /usr/bin/docker exec -d matomo /usr/local/bin/php -q -f /var/www/html/console core:archive > /dev/null 2>&1

Mit „Strg+x / y“ speichern wir die Crontab ab. Cron wird uns nun informieren, dass er den Cronjob erfolgreich integriert hat.

Wenn der Container nicht läuft und der Cronjob ausgeführt wird, ist das nicht sehr schlimm. „docker exec“ schmeißt einen Fehler, dass der Container nicht existiert. Und das war’s. No Harm done… Aber wir feuern den Container ja gleich hoch ^^

Da wir das Image lokal erzeugt haben, brauchen wir es nicht mehr aus dem Internet herunterladen und können den Container gleich starten.

Bitte beachten: Dieser Vorgang ist zeitkritisch!
Sobald der Container läuft, kann sich theoretisch jeder auf unserer URL einloggen.
Im Gegensatz zu Nextcloud müssen wir im Matomo-Setup noch die Datenbank-Informationen eintragen, weswegen jemand von außen nicht einfach das Statistik-Tool kapern kann. Aber alle „offenen Enden“ drücken mir halt Schweißperlen auf die Stirn, darum arbeite ich solche Setups lieber schnell zu Ende…

docker-compose -f /var/www/matomo.xp-server.de/docker-compose.yml up -d
docker ps -a
docker logs -f --tail="50" matomo

Bevor wir uns gleich über den Browser einloggen, fügen wir über das Terminal noch eine Config-Option hinzu, die uns Matomos Selbsttest sonst ankreiden würde:

nano /var/www/matomo.xp-server.de/wwwdata/config/config.ini.php

### Direkt unterhalb von "General" einfügen:
force_ssl = 1

Anzeige *

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Verwendung
von Cookies

Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung.

Scroll to Top