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.