Ich habe bereits schon hier eine Anleitung geschrieben, wie ihr Matomo (ehemals Piwik) normal „von Hand“ installieren könnt. Nun zeige ich euch, wie ihr dies in wenigen Minuten mit Docker realisiert. Traefik dient uns hier als Reverse Proxy und stellt später den Dienst verschlüsselt per TLS bereit.

Wer Traefik noch nicht installiert hat, findet hier eine Anleitung, wie ihr dies schnell tun könnt.

Als Grundlage meiner Anleitung dient die offizielle Matomo Anleitung für Docker.

1. Ordner anlegen

Zuerst legen wir uns passende Ordner-Strukturen an.

mkdir -p /opt/containers/matomo/{database,app}

2. Docker Compose anlegen

Nun legen wir die eigentliche Docker Datei an. Hierfür habe ich mir die offizielle Matomo Compose genommen und diese abgeändert für Traefik.

cd /opt/containers/matomo/
nano docker-compose.yml

Inhalt

version: '3'

services:
  matomo-db:
    image: mariadb
    command: --max-allowed-packet=64MB
    restart: unless-stopped
    volumes:
      - /opt/containers/matomo/database:/var/lib/mysql
    environment:
      - MYSQL_RANDOM_ROOT_PASSWORD= '1'
      - MYSQL_PASSWORD=abc           ## Hier Passwort eingeben ##
      - MYSQL_DATABASE=matomo
      - MYSQL_USER=matomo
    networks:
      - default

  matomo-app:
    image: matomo:fpm-alpine
    restart: unless-stopped
    volumes:
      - /opt/containers/matomo/app:/var/www/html
    environment:
      - MATOMO_DATABASE_HOST=matomo-db
      - MATOMO_DATABASE_ADAPTER=mysql
      - MATOMO_DATABASE_TABLES_PREFIX=matomo_
      - MATOMO_DATABASE_USERNAME=matomo
      - MATOMO_DATABASE_PASSWORD=abc        ## Hier selbes Passwort eingeben ##
      - MATOMO_DATABASE_DBNAME=matomo
    networks:
      - default


  matomo-web:
    image: nginx:alpine
    restart: unless-stopped
    volumes:
      - /opt/containers/matomo/app:/var/www/html:ro
      - ./matomo.conf:/etc/nginx/conf.d/default.conf:ro

    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.matomo-app.entrypoints=http"
      - "traefik.http.routers.matomo-app.rule=Host(`matomo.euredomain.de`)"
      - "traefik.http.middlewares.matomo-app-https-redirect.redirectscheme.scheme=https"
      - "traefik.http.routers.matomo-app.middlewares=matomo-app-https-redirect"
      - "traefik.http.routers.matomo-app-secure.entrypoints=https"
      - "traefik.http.routers.matomo-app-secure.rule=Host(`matomo.euredomain.de`)"
      - "traefik.http.routers.matomo-app-secure.tls=true"
      - "traefik.http.routers.matomo-app-secure.tls.certresolver=http"
      - "traefik.http.routers.matomo-app-secure.service=matomo-app"
      - "traefik.http.services.matomo-app.loadbalancer.server.port=80"
      - "traefik.docker.network=proxy"
    networks:
      - default
      - proxy

networks:
  proxy:
    external: true

Notwendige Anpassungen:

  1. MySQL User Kennwort ändern
  2. 2x eure Domain bei Traefik anpassen (nextcloud.euredomain.de“)

Diese Docker Compose Datei funktioniert nur, wenn ich euch mittels meiner Anleitung hier Traefik installiert habt. Sonst heißen einige Traefik Variablen wohl anders. Diese müsst ihr dann dementsprechend bei euch anpassen.

3. matomo.conf anlegen

In diesem Schritt müssen wir noch eine Konfigurationsdatei für den Webserver innerhalb des Containers anlegen. Diese Datei kommt direkt vom Hersteller.

nano /opt/containers/matomo/matomo.conf

Inhalt

upstream php-handler {
	server matomo-app:9000;
}

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;
	}
}

4. Matomo starten

Den Server startet ihr wie gewohnt mit folgendem Befehl:

docker-compose -f /opt/containers/matomo/docker-compose.yml up -d

Nun solltet ihr folgendes sehen:

5. Quellen

https://github.com/matomo-org/docker

https://hub.docker.com/_/matomo/

https://github.com/matomo-org/docker/blob/master/.examples/nginx/docker-compose.yml

Teile diesen Beitrag
Christian
Letzte Artikel von Christian (Alle anzeigen)

Categories:

Ein Kommentar

Schreibe einen Kommentar

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