Self-hosting Matomo vám dáva úplnú kontrolu nad vašimi analytickými dátami, infraštruktúrou a nákladmi. Zatiaľ čo spravované riešenia ako Matomo Cloud sú pohodlné, self-hosting je najlepšou voľbou pre organizácie s prísnymi požiadavkami na dátovú suverenitu, potrebami GDPR compliance alebo tie, ktoré chcú vyhnúť priebežným nákladom na predplatné.

Tento sprievodca pokrýva všetko, čo potrebujete na nasadenie, konfiguráciu, zabezpečenie a údržbu self-hosted inštalácie Matomo.

Odhadovaný čas čítania: 35-40 minút

Systémové požiadavky

Pred nasadením Matomo sa uistite, že vaša infraštruktúra spĺňa tieto požiadavky.

Minimálne požiadavky

  • Web Server: Apache, Nginx (odporúčaný), IIS alebo LiteSpeed
  • PHP: 7.2.5 alebo vyššie (Matomo 4.x/5.x); PHP 8.x odporúčané pre najlepší výkon
  • Databáza: MySQL 5.5+ alebo MariaDB 10.4+; MySQL 8+ alebo najnovšia MariaDB odporúčaná
  • PHP rozšírenia: pdo, pdo_mysql (alebo mysqli), mbstring, gd, xml, curl, opcache
  • Operačný systém: Linux (Ubuntu, CentOS, Debian), Windows, macOS Server alebo FreeBSD

Odporúčané dimenzovanie servera

Požiadavky na server sa škálujú s objemom vašej návštevnosti. Nižšie sú oficiálne odporúčania Matomo:

Do 100 000 zobrazení stránok/mesiac

  • Jeden server pre aplikáciu aj databázu
  • 2 CPU jadrá, 2 GB RAM, 50 GB SSD

Do 1 milión zobrazení stránok/mesiac

  • Jeden server môže stačiť
  • 4 CPU jadrá, 8 GB RAM, 250 GB SSD

Do 10 miliónov zobrazení stránok/mesiac

  • Odporúčané oddelené servery pre aplikáciu a databázu
  • App server: 8 CPU, 16 GB RAM, 100 GB SSD (alebo 2× app servery so 4 CPU, 4 GB RAM každý)
  • Databázový server: 8 CPU, 16 GB RAM, 400 GB SSD

Do 100 miliónov zobrazení stránok/mesiac

  • Odporúčané minimum 3 servery
  • 2-3× App servery: 16 CPU, 16+ GB RAM, 100 GB SSD každý
  • 1-2× Databázové servery: 16 CPU, 32 GB RAM, 1 TB SSD (s replikáciou)
  • Odporúčaný load balancer a CDN

Nad 100 miliónov zobrazení stránok/mesiac

  • Minimum 5 serverov
  • 3+ App servery: 16 CPU, 16+ GB RAM každý
  • 2× Databázové servery s replikáciou: 16 CPU, 32 GB RAM, 1 TB SSD každý
  • Vyžadovaný load balancer a CDN
  • Zvážte kontaktovať Matomo pre enterprise architektonické poradenstvo

Možnosti nasadenia

Matomo sa dá nasadiť niekoľkými spôsobmi, pričom každý má rôzne kompromisy medzi zložitosťou, škálovateľnosťou a údržbou.

Nasadenie cez Docker

Docker je odporúčaný prístup pre väčšinu self-hosted nasadení. Zjednodušuje inštaláciu, aktualizácie a poskytuje izoláciu od hostiteľského systému.

Základné nastavenie Docker Compose

# docker-compose.yml
services:
  matomo:
    image: matomo:5-apache
    restart: unless-stopped
    ports:
      - "8080:80"
    volumes:
      - matomo-data:/var/www/html
      - ./config:/var/www/html/config
    environment:
      - MATOMO_DATABASE_HOST=db
      - MATOMO_DATABASE_ADAPTER=mysql
      - MATOMO_DATABASE_TABLES_PREFIX=matomo_
      - MATOMO_DATABASE_USERNAME=matomo
      - MATOMO_DATABASE_PASSWORD=${DB_PASSWORD}
      - MATOMO_DATABASE_DBNAME=matomo
    depends_on:
      db:
        condition: service_healthy

  db:
    image: mariadb:11
    restart: unless-stopped
    volumes:
      - db-data:/var/lib/mysql
    environment:
      - MARIADB_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
      - MARIADB_DATABASE=matomo
      - MARIADB_USER=matomo
      - MARIADB_PASSWORD=${DB_PASSWORD}
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 10s
      timeout: 5s
      retries: 5

volumes:
  matomo-data:
  db-data:

Vytvorte súbor .env s vašimi prihlasovacími údajmi:

DB_PASSWORD=vase-bezpecne-heslo
DB_ROOT_PASSWORD=vase-root-heslo

Produkčné Docker nastavenie s Nginx Reverse Proxy

# docker-compose.prod.yml
services:
  nginx:
    image: nginx:alpine
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./certs:/etc/nginx/certs:ro
      - matomo-data:/var/www/html:ro
    depends_on:
      - matomo

  matomo:
    image: matomo:5-fpm-alpine
    restart: unless-stopped
    volumes:
      - matomo-data:/var/www/html
      - ./config:/var/www/html/config
    environment:
      - MATOMO_DATABASE_HOST=db
      - MATOMO_DATABASE_ADAPTER=mysql
      - MATOMO_DATABASE_TABLES_PREFIX=matomo_
      - MATOMO_DATABASE_USERNAME=matomo
      - MATOMO_DATABASE_PASSWORD=${DB_PASSWORD}
      - MATOMO_DATABASE_DBNAME=matomo
    depends_on:
      db:
        condition: service_healthy

  db:
    image: mariadb:11
    restart: unless-stopped
    volumes:
      - db-data:/var/lib/mysql
    environment:
      - MARIADB_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
      - MARIADB_DATABASE=matomo
      - MARIADB_USER=matomo
      - MARIADB_PASSWORD=${DB_PASSWORD}
    command: >
      --max_allowed_packet=64MB
      --innodb_buffer_pool_size=1G
      --innodb_log_file_size=256M
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 10s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7-alpine
    restart: unless-stopped
    volumes:
      - redis-data:/data
    command: redis-server --appendonly yes

volumes:
  matomo-data:
  db-data:
  redis-data:

Nasadenie na Kubernetes

Pre väčšie nasadenia alebo organizácie už používajúce Kubernetes sa Matomo dá nasadiť ako škálovateľná, vysoko dostupná služba.

Kubernetes Deployment Manifest

# matomo-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: matomo
  labels:
    app: matomo
spec:
  replicas: 2
  selector:
    matchLabels:
      app: matomo
  template:
    metadata:
      labels:
        app: matomo
    spec:
      containers:
      - name: matomo
        image: matomo:5-apache
        ports:
        - containerPort: 80
        env:
        - name: MATOMO_DATABASE_HOST
          value: "mysql-service"
        - name: MATOMO_DATABASE_PASSWORD
          valueFrom:
            secretKeyRef:
              name: matomo-secrets
              key: db-password
        - name: MATOMO_DATABASE_USERNAME
          value: "matomo"
        - name: MATOMO_DATABASE_DBNAME
          value: "matomo"
        volumeMounts:
        - name: matomo-data
          mountPath: /var/www/html
        - name: matomo-config
          mountPath: /var/www/html/config
        resources:
          requests:
            memory: "512Mi"
            cpu: "500m"
          limits:
            memory: "2Gi"
            cpu: "2000m"
        livenessProbe:
          httpGet:
            path: /matomo.php
            port: 80
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /matomo.php
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 5
      volumes:
      - name: matomo-data
        persistentVolumeClaim:
          claimName: matomo-pvc
      - name: matomo-config
        persistentVolumeClaim:
          claimName: matomo-config-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: matomo-service
spec:
  selector:
    app: matomo
  ports:
  - port: 80
    targetPort: 80
  type: ClusterIP
---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: matomo-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: matomo
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70

Kubernetes ConfigMap a Secrets

# matomo-secrets.yaml
apiVersion: v1
kind: Secret
metadata:
  name: matomo-secrets
type: Opaque
stringData:
  db-password: "vase-bezpecne-heslo"
  db-root-password: "vase-root-heslo"
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: matomo-config
data:
  MATOMO_DATABASE_ADAPTER: "mysql"
  MATOMO_DATABASE_TABLES_PREFIX: "matomo_"

Inštalácia na bare metal

Pre tradičné serverové nasadenia bez kontajnerizácie.

Inštalačné kroky

# Inštalácia požadovaných balíčkov (Ubuntu/Debian)
sudo apt update
sudo apt install -y php php-cli php-fpm php-mysql php-curl php-gd \
  php-mbstring php-xml php-zip nginx mariadb-server

# Stiahnutie a rozbalenie Matomo
cd /var/www
wget https://builds.matomo.org/matomo.zip
unzip matomo.zip
chown -R www-data:www-data matomo

# Zabezpečenie MariaDB
sudo mysql_secure_installation

# Vytvorenie databázy a používateľa
sudo mysql -e "CREATE DATABASE matomo;"
sudo mysql -e "CREATE USER 'matomo'@'localhost' IDENTIFIED BY 'vase-heslo';"
sudo mysql -e "GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, INDEX, DROP, ALTER, \
  CREATE TEMPORARY TABLES, LOCK TABLES ON matomo.* TO 'matomo'@'localhost';"
sudo mysql -e "FLUSH PRIVILEGES;"

Konfigurácia PHP

# /etc/php/8.3/fpm/conf.d/matomo.ini
memory_limit = 512M
max_execution_time = 300
upload_max_filesize = 64M
post_max_size = 64M

; Požadované rozšírenia (uistite sa, že sú povolené)
extension=pdo_mysql
extension=mbstring
extension=gd
extension=xml
extension=curl

; OPcache nastavenia pre výkon
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.validate_timestamps=0
opcache.revalidate_freq=0

Konfigurácia Nginx

# /etc/nginx/sites-available/matomo
server {
    listen 80;
    server_name analytics.vasadomena.sk;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name analytics.vasadomena.sk;

    ssl_certificate /etc/letsencrypt/live/analytics.vasadomena.sk/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/analytics.vasadomena.sk/privkey.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers off;

    root /var/www/matomo;
    index index.php;

    # Bezpečnostné hlavičky
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;
    add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline';" always;

    # Blokovať prístup k citlivým súborom a adresárom
    location ~ /\.(?!well-known) {
        deny all;
    }

    location ~* ^/(?:README|LICENSE|CHANGELOG|CONTRIBUTING)(?:\.md|\.txt)?$ {
        deny all;
    }

    location ~* ^/(?:config|tmp|core|lang|vendor)/ {
        deny all;
    }

    location ~* ^/(?:\.git|\.github|\.editorconfig|\.gitignore|\.gitattributes) {
        deny all;
    }

    # Spracovanie PHP
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_read_timeout 300;
        fastcgi_param HTTPS on;
    }

    # Optimalizácia tracking endpointu Matomo
    location = /matomo.php {
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_param HTTPS on;
    }

    location = /matomo.js {
        expires 1w;
        add_header Cache-Control "public, immutable";
    }

    # Cachovanie statických súborov
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
        expires 1M;
        add_header Cache-Control "public, immutable";
    }

    location / {
        try_files $uri $uri/ =404;
    }
}

Konfigurácia databázy

Správna konfigurácia databázy je kritická pre výkon Matomo.

Optimalizácia MySQL/MariaDB

# /etc/mysql/mariadb.conf.d/99-matomo.cnf
[mysqld]
# InnoDB nastavenia - upravte innodb_buffer_pool_size na 70-80% dostupnej RAM
innodb_buffer_pool_size = 2G
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_file_per_table = 1
innodb_buffer_pool_instances = 4

# Nastavenia pripojení
max_connections = 200
wait_timeout = 300
interactive_timeout = 300

# Dočasné tabuľky
tmp_table_size = 256M
max_heap_table_size = 256M

# Veľkosť paketu pre veľké dopyty
max_allowed_packet = 64M

# Vykonávanie dopytov
join_buffer_size = 4M
sort_buffer_size = 4M
read_buffer_size = 2M
read_rnd_buffer_size = 2M

# Logovanie (pre produkciu minimalizujte logovanie)
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

Údržba databázy

#!/bin/bash
# /usr/local/bin/matomo-db-maintenance.sh

# Týždenný optimalizačný skript
MATOMO_DB="matomo"
DB_USER="matomo"
DB_PASS="vase-heslo"

# Optimalizácia tabuliek
mysqlcheck -o -u "$DB_USER" -p"$DB_PASS" "$MATOMO_DB"

# Analýza kľúčových tabuliek pre optimalizáciu dopytov
mysql -u "$DB_USER" -p"$DB_PASS" "$MATOMO_DB" -e "
ANALYZE TABLE matomo_log_visit;
ANALYZE TABLE matomo_log_link_visit_action;
ANALYZE TABLE matomo_log_action;
ANALYZE TABLE matomo_archive_numeric_2024_01;
"

Najlepšie bezpečnostné praktiky

Zabezpečenie vašej inštalácie Matomo je nevyhnutné, najmä pri práci s analytickými údajmi používateľov.

Základná bezpečnostná konfigurácia

# config/config.ini.php doplnky
[General]
; Vynútiť HTTPS pre všetky pripojenia
force_ssl = 1

; Dôveryhodné hosty - prevencia útokov cez host header
; Pridajte všetky hostnames, ktoré budú pristupovať k Matomo UI
trusted_hosts[] = "analytics.vasadomena.sk"

; Zakázať inštalátor po nastavení (kritické!)
enable_installer = 0

; Zakázať automatické aktualizácie (aktualizujte manuálne pre lepšiu kontrolu)
enable_auto_update = 0

; Vyžadovať bezpečné cookies
secure_cookie = 1

; Bezpečnosť session
login_cookie_expire = 1209600

; Ochrana proti brute force
login_allowlist_apply_to_reporting_api_via_token_auth = 1

[Tracker]
; Obmedzenie rýchlosti pre tracking požiadavky
tracker_cache_file_ttl = 300

; Zakázať debug mód v produkcii
debug = 0
debug_on_demand = 0

Oprávnenia súborov

#!/bin/bash
# Zabezpečenie oprávnení súborov Matomo

MATOMO_PATH="/var/www/matomo"
WEB_USER="www-data"
WEB_GROUP="www-data"

# Nastavenie vlastníctva
chown -R "$WEB_USER:$WEB_GROUP" "$MATOMO_PATH"

# Zabezpečenie oprávnení súborov (644 pre súbory, 755 pre adresáre)
find "$MATOMO_PATH" -type f -exec chmod 644 {} \;
find "$MATOMO_PATH" -type d -exec chmod 755 {} \;

# Ochrana citlivých súborov
chmod 600 "$MATOMO_PATH/config/config.ini.php"

# Požadované zapisovateľné adresáre
chmod 755 "$MATOMO_PATH/tmp"
chmod 755 "$MATOMO_PATH/tmp/assets"
chmod 755 "$MATOMO_PATH/tmp/cache"
chmod 755 "$MATOMO_PATH/tmp/logs"
chmod 755 "$MATOMO_PATH/tmp/tcpdf"
chmod 755 "$MATOMO_PATH/tmp/templates_c"

# Urobiť misc/user zapisovateľný pre GeoIP databázy
chmod 755 "$MATOMO_PATH/misc/user"

Konfigurácia firewallu

# UFW pravidlá pre Matomo server
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Povoliť MySQL len z app serverov (ak je oddelený DB server)
sudo ufw allow from 10.0.0.0/8 to any port 3306

sudo ufw enable

Konfigurácia Fail2ban

# /etc/fail2ban/filter.d/matomo.conf
[Definition]
failregex = ^<HOST> .* "POST /index.php\?module=Login.*" 403
            ^<HOST> .* "POST /index.php\?module=Login.*" 401
ignoreregex =

# /etc/fail2ban/jail.d/matomo.conf
[matomo]
enabled = true
port = http,https
filter = matomo
logpath = /var/log/nginx/access.log
maxretry = 5
findtime = 600
bantime = 3600

Optimalizácia výkonu

Nastavenie automatickej archivácie

Pre weby s viac ako niekoľkými stovkami denných návštev zakážte archiváciu spúšťanú prehliadačom a použite archiváciu založenú na crone.

# config/config.ini.php
[General]
; Zakázať archiváciu spúšťanú prehliadačom
browser_archiving_disabled_enforce = 1
# /etc/cron.d/matomo-archive
# Spúšťať archiváciu každú hodinu (upravte podľa vašej návštevnosti)
MAILTO="admin@vasadomena.sk"
5 * * * * www-data /usr/bin/php /var/www/matomo/console core:archive \
  --url=https://analytics.vasadomena.sk/ >> /var/log/matomo/archive.log 2>&1

# Pre vysoko navštevované weby možno potrebujete menej častú archiváciu
# 5 */2 * * * www-data /usr/bin/php /var/www/matomo/console core:archive ...

Plugin QueuedTracking pre vysokú návštevnosť

Pre vysoko navštevované weby použite plugin QueuedTracking na zvládnutie špičiek návštevnosti. Radí tracking požiadavky do Redis alebo MySQL pre asynchrónne spracovanie.

# Inštalácia pluginu cez konzolu
php /var/www/matomo/console plugin:activate QueuedTracking

Konfigurácia cez Matomo UI (Administrácia → Systém → Všeobecné nastavenia → QueuedTracking) alebo cez config:

# config/config.ini.php
[QueuedTracking]
; Backend: 'redis' (odporúčaný) alebo 'mysql'
backend = "redis"

; Konfigurácia Redis
redisHost = "127.0.0.1"
redisPort = 6379
redisDatabase = 0
redisPassword = ""

; Počet paralelných workerov (nastavte na počet dostupných CPU)
numQueueWorkers = 4

; Počet požiadaviek na spracovanie v dávke
numRequestsToProcess = 25

; Spracovávať frontu počas tracking požiadaviek (zakázať pre spracovanie len cez cron)
processDuringTrackingRequest = 0
# Spracovanie fronty cez cron (ak processDuringTrackingRequest = 0)
# /etc/cron.d/matomo-queue
* * * * * www-data /usr/bin/php /var/www/matomo/console queuedtracking:process >> /var/log/matomo/queue.log 2>&1

Redis Caching

Povoľte Redis pre cachovanie na zlepšenie celkového výkonu:

# config/config.ini.php
[Cache]
backend = redis

[RedisCache]
host = "127.0.0.1"
port = 6379
database = 1
timeout = 0.0
password = ""

GeoIP lokalizačná databáza

Pre presnú geolokalizáciu návštevníkov nakonfigurujte GeoIP databázy od MaxMind.

Automatické aktualizácie GeoIP

# Inštalácia geoipupdate
sudo apt install geoipupdate

# Vytvorte MaxMind účet na https://www.maxmind.com/en/geolite2/signup
# Potom nakonfigurujte /etc/GeoIP.conf
AccountID VAS_ACCOUNT_ID
LicenseKey VAS_LICENSE_KEY
EditionIDs GeoLite2-City GeoLite2-Country

# Stiahnutie databáz
sudo geoipupdate

# Kopírovanie do Matomo
cp /var/lib/GeoIP/GeoLite2-City.mmdb /var/www/matomo/misc/
chown www-data:www-data /var/www/matomo/misc/GeoLite2-City.mmdb

# Nastavenie týždenných aktualizácií
echo "0 3 * * 0 root /usr/bin/geoipupdate && cp /var/lib/GeoIP/GeoLite2-City.mmdb /var/www/matomo/misc/" | sudo tee /etc/cron.d/geoip-update

Potom povoľte v Matomo: Administrácia → Systém → Geolokalizácia → Vyberte "GeoIP 2 (Php)"

Škálovanie Matomo

Ako rastie vaša návštevnosť, budete potrebovať škálovať vašu infraštruktúru Matomo.

Architektúra horizontálneho škálovania

                    ┌─────────────────────┐
                    │    Load Balancer    │
                    │  (HAProxy/Nginx)    │
                    └──────────┬──────────┘
                               │
        ┌──────────────────────┼──────────────────────┐
        │                      │                      │
┌───────▼───────┐   ┌──────────▼─────────┐   ┌───────▼───────┐
│   Matomo 1    │   │     Matomo 2       │   │   Matomo 3    │
│   (Web/API)   │   │     (Web/API)      │   │   (Web/API)   │
└───────┬───────┘   └──────────┬─────────┘   └───────┬───────┘
        │                      │                     │
        └──────────────────────┼─────────────────────┘
                               │
                    ┌──────────▼──────────┐
                    │   Redis Cluster     │
                    │  (Queue + Cache)    │
                    └──────────┬──────────┘
                               │
        ┌──────────────────────┼──────────────────────┐
        │                      │                      │
┌───────▼───────┐   ┌──────────▼─────────┐   ┌───────▼───────┐
│ MySQL Primary │   │  MySQL Replica 1   │   │ MySQL Replica │
│   (Writes)    │   │     (Reads)        │   │   2 (Reads)   │
└───────────────┘   └────────────────────┘   └───────────────┘

Databázové read repliky

# config/config.ini.php - Konfigurácia read replík
[database]
host = "mysql-primary"
username = "matomo"
password = "vase-heslo"
dbname = "matomo"
tables_prefix = "matomo_"

[database_reader]
host = "mysql-replica"
username = "matomo_reader"
password = "reader-heslo"
dbname = "matomo"

Údržba a monitorovanie

Automatizovaný skript údržby

#!/bin/bash
# /usr/local/bin/matomo-maintenance.sh

MATOMO_PATH="/var/www/matomo"
LOG_FILE="/var/log/matomo/maintenance.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')

log() {
    echo "[$DATE] $1" >> "$LOG_FILE"
}

log "Začínam údržbu Matomo"

# Vyčistiť dočasné súbory a cache
php "$MATOMO_PATH/console" core:clear-caches >> "$LOG_FILE" 2>&1

# Optimalizovať archívne tabuľky
php "$MATOMO_PATH/console" database:optimize-archive-tables >> "$LOG_FILE" 2>&1

# Vymazať staré archívne dáta (podľa nastavení uchovávania)
php "$MATOMO_PATH/console" core:purge-old-archive-data >> "$LOG_FILE" 2>&1

# Vymazať staré logy návštevníkov (rešpektuje nastavenia uchovávania dát)
php "$MATOMO_PATH/console" core:delete-logs-data >> "$LOG_FILE" 2>&1

# Spustiť diagnostiku systému
php "$MATOMO_PATH/console" diagnostics:run >> "$LOG_FILE" 2>&1

# Skontrolovať aktualizácie (len notifikácia)
php "$MATOMO_PATH/console" core:update --dry-run >> "$LOG_FILE" 2>&1

log "Údržba dokončená"

Skript kontroly zdravia

<?php
// /var/www/matomo/healthcheck.php
// Jednoduchá kontrola zdravia pre load balancery

define('PIWIK_DOCUMENT_ROOT', __DIR__);
require_once PIWIK_DOCUMENT_ROOT . '/core/bootstrap.php';

try {
    $db = \Piwik\Db::get();
    $result = $db->fetchOne("SELECT 1");

    if ($result === "1") {
        http_response_code(200);
        header('Content-Type: application/json');
        echo json_encode(['status' => 'healthy', 'database' => 'connected']);
    } else {
        throw new Exception('Kontrola databázy zlyhala');
    }
} catch (Exception $e) {
    http_response_code(503);
    header('Content-Type: application/json');
    echo json_encode(['status' => 'unhealthy', 'error' => $e->getMessage()]);
}

Kontrolný zoznam monitorovania

Kľúčové metriky na monitorovanie pre zdravú inštaláciu Matomo:

  • Aplikácia: Čas odozvy pre /matomo.php, miera chýb, veľkosť fronty (ak používate QueuedTracking)
  • Databáza: Počet pripojení, latencia dopytov, lag replikácie, využitie disku
  • Systém: Využitie CPU, využitie pamäte, disk I/O, priepustnosť siete
  • Archívy: Trvanie spracovania archívov, počet zlyhaných archívov

Stratégia zálohovania

#!/bin/bash
# /usr/local/bin/matomo-backup.sh

BACKUP_DIR="/backup/matomo"
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=30

# Vytvorenie adresára zálohy
mkdir -p "$BACKUP_DIR"

# Záloha databázy s kompresiou
mysqldump -u matomo -p'vase-heslo' \
  --single-transaction \
  --quick \
  --lock-tables=false \
  matomo | gzip > "$BACKUP_DIR/db-$DATE.sql.gz"

# Záloha konfigurácie
tar -czf "$BACKUP_DIR/config-$DATE.tar.gz" \
  /var/www/matomo/config/config.ini.php \
  /var/www/matomo/misc/user/

# Overenie integrity zálohy
if gzip -t "$BACKUP_DIR/db-$DATE.sql.gz"; then
    echo "Záloha databázy úspešne overená"
else
    echo "CHYBA: Overenie zálohy databázy zlyhalo" >&2
    exit 1
fi

# Odstránenie starých záloh
find "$BACKUP_DIR" -type f -mtime +$RETENTION_DAYS -delete

# Voliteľné: Nahranie do vzdialeného úložiska (S3, GCS, atď.)
# aws s3 sync "$BACKUP_DIR" s3://vas-bucket/matomo-backups/ --delete

Súkromie dát a GDPR compliance

Matomo poskytuje vstavané funkcie súkromia pre GDPR compliance.

Konfigurácia uchovávania dát

# config/config.ini.php
[PrivacyManager]
; Automaticky mazať staré surové dáta (v dňoch, 0 = nikdy)
delete_logs_enable = 1
delete_logs_older_than = 180

; Automaticky mazať staré agregované reporty
delete_reports_enable = 1
delete_reports_older_than = 365

; Anonymizovať IP adresy návštevníkov
ip_address_mask_length = 2
use_anonymized_ip_for_visit_enrichment = 1

Kontrolný zoznam nastavení súkromia

  • Povoľte "Anonymizovať IP adresy návštevníkov" v nastaveniach súkromia
  • Nakonfigurujte obdobia uchovávania dát vhodné pre vašu jurisdikciu
  • Ak je potrebné, povoľte "Podporovať preferenciu Do Not Track"
  • Použite funkciu GDPR Tools pre žiadosti o prístup k údajom
  • Zvážte povolenie "Vyžadovať súhlas pred sledovaním" pre návštevníkov z EÚ

Postupy aktualizácie

Štandardný proces aktualizácie

#!/bin/bash
# /usr/local/bin/matomo-upgrade.sh

MATOMO_PATH="/var/www/matomo"
BACKUP_DIR="/backup/matomo-upgrades"
DATE=$(date +%Y%m%d_%H%M%S)

# Vytvorenie zálohy pred aktualizáciou
mkdir -p "$BACKUP_DIR"
tar -czf "$BACKUP_DIR/pre-upgrade-$DATE.tar.gz" "$MATOMO_PATH"
mysqldump -u matomo -p matomo | gzip > "$BACKUP_DIR/db-pre-upgrade-$DATE.sql.gz"

# Povolenie režimu údržby
touch "$MATOMO_PATH/tmp/maintenance.flag"

# Spustenie aktualizácie
php "$MATOMO_PATH/console" core:update --yes

# Vyčistenie všetkých cache
php "$MATOMO_PATH/console" core:clear-caches

# Odstránenie režimu údržby
rm -f "$MATOMO_PATH/tmp/maintenance.flag"

# Overenie aktualizácie
php "$MATOMO_PATH/console" diagnostics:run

echo "Aktualizácia dokončená. Prosím overte, že Matomo funguje správne."

Riešenie bežných problémov

Sledovanie nefunguje

  • Skontrolujte JavaScript konzolu prehliadača na chyby
  • Overte, že matomo.php je prístupný: curl -I https://analytics.vasadomena.sk/matomo.php
  • Skontrolujte konfiguráciu trusted_hosts, či zodpovedá vašej doméne
  • Prezrite logy web servera na chyby 403/404/500
  • Uistite sa, že tracking kód má správne site ID a URL

Pomalé reporty

  • Povoľte archiváciu založenú na crone (zakážte archiváciu cez prehliadač)
  • Zvýšte veľkosť MySQL/MariaDB buffer pool
  • Povoľte Redis caching
  • Zvážte plugin QueuedTracking pre vysokú návštevnosť
  • Prezrite a zakážte nepoužívané pluginy

Vysoké využitie pamäte

  • Optimalizujte PHP memory_limit (512M je zvyčajne dostačujúce)
  • Povoľte OPcache s vhodnými nastaveniami
  • Nastavte MySQL innodb_buffer_pool_size
  • Povoľte Redis pre session a cache úložisko
  • Skontrolujte a zakážte nepoužívané pluginy

Rast databázy

  • Nakonfigurujte uchovávanie dát na automatické mazanie starých dát
  • Pravidelne spúšťajte database:optimize-archive-tables
  • Monitorujte veľkosti tabuliek: najväčšie tabuľky sú typicky log_visit a log_link_visit_action
  • Zvážte partitioning pre veľmi veľké inštalácie

Self-hosting Matomo vyžaduje priebežnú pozornosť venovanú bezpečnosti, výkonu a údržbe. Avšak výhody úplného vlastníctva dát, súladu s ochranou súkromia a kontroly nákladov to pre mnohé organizácie robia hodným úsilia. Začnite s jednoduchým nasadením a škálujte podľa toho, ako rastú vaše potreby.

Ďalšie zdroje