Besucherstatistik: Matomo, Google Analytic Ersatz selbst hosten

 

Wer bereits Docker verwendet, kann mit der Open-Source Webanalyse-Software Matomo sehr einfach Besucherstatistiken der eigenen Websites sammeln und analysieren. Anders als Google Analytics können die Daten dabei nicht an ein Cloud-Service gesendet, sondern auf einem eigenen, selbst gehosteten Server gesammelt werden.

Profil:

SoftwareMatomo
GitHubhttps://github.com/matomo-org/matomo
aktuelle Version 5.0.3
gefunden12.03.2024

Docker Basics

Docker ermöglicht es, Services oder Applikationen per Befehl in einem sogenannten Container zu starten.
Ein Container ist eine vom Betriebssystem (OS) unabhÀngige isolierte Umgebung:
Beim ersten Start eines Containers, lÀdt Docker selbststÀndig alle notwendigen Quellen
aus dem Internet.
Docker kann unter Windows, macOS oder einer Linux-Distribution installiert werden,
siehe auch: Docker

Damit Matomo sicher vom Internet erreicht werden kann, setze ich Traefik als Let's Encrypt Reverse-Proxy ein. Der Reverse-Proxy stellt eine verschlĂŒsselte HTTPS-Verbindung zur VerfĂŒgung und ermöglicht es mehrere Websites auf einem Server zu betreiben.

Alternativ zu einem Reverse-Proxy kann auch ein Cloudflare-Tunnel fĂŒr das Veröffentlichen von Webservices aus dem eigenen Netzwerk verwendet werden:

Schritt fĂŒr Schritt Matomo in Docker inklusive Zugriff vom Internet

Hardwareanforderung:
  1. FĂŒr die Docker-Installation kann eine nahezu beliebige Hardware verwendet werden. Zum Beispiel ein virtueller Server eines Providers, oder fĂŒr zu Hause: ein Mini-PC, Notebook, MAC, ein NAS: QNAP, Synology oder eine andere Hardware mit x68-64 Architektur auf der sich Windows oder Linux installieren lĂ€sst.

Schematische Darstellung: Zugriff vom Internet
Voraussetzungen fĂŒr den Internetzugriff:
  1. Eigene registrierte Domain, siehe Domain und dessen Verwaltung.
  2. Cloudflare oder Reverse Proxy:
    1. Cloudflare-Tunnel Service
    2. oder alternativ:
    3. Port-Forwarding und Reverse Proxy mit Let's Encrypt-Zertifikat
    siehe auch: Cloudflare oder Reverse Proxy
Das eigentliche Docker Setup fĂŒr Matomo

  1. docker-compose.yml, matomo.conf und db.env anlegen und anpassen
  2. Container starten und 
  3. Einrichten

Matomo Docker Compose

Um Matomo mittels docker compose zu starten, kann das offizielle Docker Matomo-Image und als Datenbank MariaDB verwendet werden. Beide Images können mit einer simplen docker-compose.yml Datei heruntergeladen, erstellt und gestartet werden. Die Datei kann mit einem beliebigen Texteditor wie folgt befĂŒllt und dann angepasst werden:

Dateiname: docker-compose.yml, Inhalt:

[+]
services:
  db:
    image: mariadb    
    container_name: matomo-db
    command: --max-allowed-packet=64MB
    restart: always
    volumes:
      - ./db:/var/lib/mysql
    env_file:
      - ./db.env
  app:
    image: matomo:fpm-alpine
    restart: always
    container_name: matomo-app
    links:
      - db
    volumes:
      - ./data:/var/www/html
    environment:
      - MATOMO_DATABASE_HOST=db
      - PHP_MEMORY_LIMIT=2048M
    env_file:
      - ./db.env
  web:
    image: nginx:alpine
    container_name: matomo-web
    restart: always
    volumes:
      - ./data:/var/www/html:ro
      # see https://github.com/matomo-org/matomo-nginx
      - ./matomo.conf:/etc/nginx/conf.d/default.conf:ro
    expose:
      - "80"   
    #FĂŒr einen direkten Test-Zugriff, in den folgenden 2 Zeilen "#" entfernen. Aufruf: http://localhost:83 oder http://ServerIP:83
    #ports:   
      #- "83:80" 
   #Labels fĂŒr ReverseProxy, siehe: https://www.libe.net/traefik
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.matomo.rule=Host(`analytics.domain.tld`)"   
      - "traefik.http.routers.matomo.entrypoints=web" 
      - "traefik.http.routers.matomo.entrypoints=websecure"
      - "traefik.http.routers.matomo.tls.certresolver=myresolver"  
#Ohne dem Einsatz eines Reverse Proxy (https://www.libe.net/traefik) fehlt voraussichtlich das Netzwerk webproxy 
#und die folgenden Zeilen können entfernt oder auskommentiert werden. Alternativ kann das Netzwerk mit "docker network create webproxy" erstellt werden
networks:
  default:
    name: webproxy
    external: true

 

FĂŒr einen direkten Zugriff ĂŒber die IP-Adresse oder localhost - auch ohne Reverse Proxy, DNS oder öffentlicher IP - kann die auskommentierte Port-Einstellung fĂŒr Testzwecke aktiviert werden, indem „#“ vor „ports“ und „-"83:80"“ entfernt wird. FĂŒr den InternetzugriffÂ ĂŒber den Traefik Reverse Proxy, muss in den Labels die DomĂ€ne mit den zuvor erstellten DNS-EintrĂ€gen ersetzt werden (im Beispiel: uptime.domain.tld). Das Beispiel verwendet Bind-Mounts und keine Volumes fĂŒr das permanente Speichern der Daten. Siehe: Docker Daten speichern: Docker Volumes vs. Host-Ordner

ZusÀtzlich habe ich die folgende Konfigurationsdatei in dem Ordner angelegt:

matomo.conf

[+]
upstream php-handler {
	server app:9000;
}
    gzip  on;
    gzip_vary on;
    gzip_min_length 10240;    
    gzip_proxied any;
    gzip_disable msie6;
    gzip_comp_level 1;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;


server {
	listen 80;

	add_header Referrer-Policy origin; # make sure outgoing links don't show the URL to the Matomo instance
	root /var/www/html; # replace with path to your matomo instance
	index index.php;
	try_files $uri $uri/ =404;


	## only allow accessing the following php files
	location ~ ^/(index|matomo|piwik|js/index|plugins/HeatmapSessionRecording/configs).php {
		# regex to split $uri to $fastcgi_script_name and $fastcgi_path
		fastcgi_split_path_info ^(.+\.php)(/.+)$;

		# Check that the PHP script exists before passing it
		try_files $fastcgi_script_name =404;

		include fastcgi_params;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		fastcgi_param PATH_INFO $fastcgi_path_info;
		fastcgi_param HTTP_PROXY ""; # prohibit httpoxy: https://httpoxy.org/
		fastcgi_pass php-handler;
	}

	## deny access to all other .php files
	location ~* ^.+\.php$ {
		deny all;
		return 403;
	}

	## disable all access to the following directories
	location ~ /(config|tmp|core|lang) {
		deny all;
		return 403; # replace with 404 to not show these directories exist
	}
	location ~ /\.ht {
		deny all;
		return 403;
	}

	location ~ js/container_.*_preview\.js$ {
		expires off;
		add_header Cache-Control 'private, no-cache, no-store';
	}

	location ~ \.(gif|ico|jpg|png|svg|js|css|htm|html|mp3|mp4|wav|ogg|avi|ttf|eot|woff|woff2|json)$ {
		allow all;
		## Cache images,CSS,JS and webfonts for an hour
		## Increasing the duration may improve the load-time, but may cause old files to show after an Matomo upgrade
		expires 1h;
		add_header Pragma public;
		add_header Cache-Control "public";
	}

	location ~ /(libs|vendor|plugins|misc/user) {
		deny all;
		return 403;
	}

	## properly display textfiles in root directory
	location ~/(.*\.md|LEGALNOTICE|LICENSE) {
		default_type text/plain;
	}
}

# vim: filetype=nginx

Und die Variablen in der Datei db.env

MYSQL_PASSWORD=mySecurePassword
MYSQL_ROOT_PASSWORD=mySuperSecurePassword
MYSQL_DATABASE=matomo
MYSQL_USER=matomo
MATOMO_DATABASE_ADAPTER=mysql
MATOMO_DATABASE_TABLES_PREFIX=matomo_
MATOMO_DATABASE_USERNAME=matomo
MATOMO_DATABASE_PASSWORD=mySecurePassword
MATOMO_DATABASE_DBNAME=matomo

Wurden die 3 Dateien angelegt und angepasst, kann der Container gestartet werden:

Container starten

Der Start erfolgt aus dem Ordner der docker-compose.yml-Datei mit dem Befehl „docker-compose up“:

docker-compose up -d

Inbetriebnahme / erster Aufruf der WeboberflÀche

Nach dem Start sollte Matomo ĂŒber die angegebene Domain erreichbar sein. Der erste Aufruf fĂŒhrt durch den Setup-Wizard:

Ist Matomo fertig eingerichtet, können Websites angelegt werden. Damit der ZĂ€hler mit dem Tracking beginnt, muss natĂŒrlich auf der Website selbst ein Tracking-Code hinterlegt werden: hier die möglichen Optionen:

  • TRACKING MIT JAVASCRIPT
  • TRACKING MITHILFE EINES BILDES
  • SERVER LOG-DATEIEN IMPORTIEREN
  • MOBILE ANWENDUNGEN UND SDKS
  • HTTP TRACKING API
  • SINGLE-PAGE-ANWENDUNG ODER
  • PROGRESSIVE WEB APP

Um das Laden der Website nicht zu beeinflussen, habe ich den Tracking-Code am Ende der Website innerhalb des Body-Elements platziert: </body></html>

Der Tracking-Code kann unter Websites / Tracking-Code gefunden werden:

Hier ein Beispiel:

<!-- Matomo -->
<script>
  var _paq = window._paq = window._paq || [];
  /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
  _paq.push(['trackPageView']);
  _paq.push(['enableLinkTracking']);
  (function() {
    var u="//analytics.domain.tld/";
    _paq.push(['setTrackerUrl', u+'matomo.php']);
    _paq.push(['setSiteId', '5']);
    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
    g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
  })();
</script>
<!-- End Matomo Code -->

FĂŒr WordPress existiert zudem ein Plugin fĂŒr Matomo, siehe: wordpress.org/plugins/wp-piwik/

Wer WordPress selbst hosten will, siehe: WordPress in Docker inkl. HTTPS Let’s Encrypt-Setup

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE fĂŒr deine Bewertung!

Aktualisiert: 12.03.2024 von Bernhard | Translation English |🔔 | Kommentare:0

➚ Conbee 2: Phoscon deCONZ - Docker Inbetriebnahme | Review | ➊ Container | Schlanker und schneller GIT-Server, Ă€hnlich GitHub (Docker) ➚
➊ Webhosting | Kein wp-admin? Warum diese Site kein WordPress verwendet. ➚

Top-Artikel in diesem Bereich


ioBroker installieren - Docker

Mit ioBroker können verschiedene Automatisierungslösungen oder GerÀte in einem System zusammengefasst werden. Um bestimmte Gateways oder GerÀte ansprechen zu können, werden in ioBroker verschiedene Adapter verwendet.


Inbetriebnahme Zigbee2MQTT in Docker - Schritt fĂŒr Schritt

Zigbee2MQTT ist eine Open-Source Zigbee-Bridge welche sich, dank dem Netzwerkprotokoll MQTT, leicht in bestehende Smarthome-Lösungen integrieren lÀsst. Als Beispiel kann Zigbee2MQTT kombiniert mit MQTT - Broker  Mosquitto und Home-Assistant Daten der Zigbee-GerÀte erfassen, anzeigen, aufzeichnen und diese steuern. Das hier beschriebene Setup verwendet Docker als Basis. Herstellerseite: https://www.zigbee2mqtt.io


Bitwarden in Docker betreiben - Setup Schritt fĂŒr Schritt

Bitwarden ist ein webbasierter Passwort-Manager, Ă€hnlich LastPass, aber Open Source und der Möglichkeit diesen selbst zu betreiben (hosten). Wie sich Bitwarden im Vergleich zu anderen Passwort-Managern einordnet, habe ich auf folgender Seite ĂŒberlegt: Passwort-Manager sicher? KeePass vs. LastPass vs. Bitwarden. Bitwarden besteht aus mehreren Services, welche ĂŒber verschiedene Container bereitgestellt werden können. Das relativ aufwĂ€ndige Setup wurde mit "Bitwarden Unified" speziell fĂŒr ein Selbs...

Fragen / Kommentare


Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu Mehr Details