En aquest article s'explicarà com instal·lar l'eina d'analítica Matomo en contenidors Docker, per la qual cosa es recomana tenir nocions bàsiques d'aquesta tecnologia (treballar amb imatges, crear i destruir contenidors, veure logs...).
Què és Matomo?
Matomo és una eina lliure de gestió d'analítica web. Té diverses característiques que la diferencien de les alternatives:
- Control total sobre les dades: ets l'única persona que decideix on emmagatzemes les dades recopilades i amb qui les comparteixes.
- Dades no esbiaixades ni mostres de les originals.
- Configuracions específiques per millorar la privadesa dels visitants.
- Capacitat d'importar dades d'altres serveis (com Google Analytics).
Matomo ofereix dues maneres d'utilitzar els seus serveis i productes: utilitzant els seus servidors i pagant per aquest servei; o allotjant tu mateix els seus productes als teus servidors (o VPS).
Som-hi
Com s'ha dit, utilitzarem Docker per allotjar Matomo (a través de docker-compose). Aquests són els contenidors que utilitzarem:
- Matomo: contindrà la instal·lació del programa d'analítica.
- MariaDB, (o MySQL): base de dades on desarà la configuració i les dades.
- Nginx, per al servidor web.
Preparació de l'entorn
En crear el servidor, seleccionarem l'opció Apps -> Docker (Ubuntu 18.04). Segons el nombre d'usuaris de les nostres pàgines, és possible que necessitem més capacitat, però en principi amb les prestacions mínimes funcionarà correctament (0.5 vCores, 1GB RAM, 5GB SSD).
Cal tenir diversos ports visibles per accedir a la interfície web. Bàsicament són necessaris el d'HTTP (80 per defecte) i el d'HTTPS (443 per defecte).
A més, abans de començar amb Docker, crearem diverses carpetes per desar dades de manera persistent, és a dir, perquè quan un contenidor s'apagui no perdem les dades
/root/data/mariadb_matomo:
per a la BD:
/root/data/matomo:
per a les dades de Matomo
/root/data/nginx_matomo_config/matomo.conf:
per al fitxer de configuració de Nginx. En aquest cas s'ha utilitzat el següent com a exemple (sense HTTPS):
# /root/data/nginx_matomo_config/matomo.conf
upstream php-handler {
server app:9000;
}
server {
listen 80;
add_header Referrer-Policy origin; # assegura't que els enllaços de sortida no mostrin l'URL de la instància de Matomo
root /var/www/html; # substitueix-ho pel camí a la teva instància de matomo
index index.php;
try_files $uri $uri/ =404;
## permet l'accés només als fitxers php següents
location ~ ^/(index|matomo|piwik|js/index|plugins/HeatmapSessionRecording/configs).php {
# expressió regular per dividir $uri en $fastcgi_script_name i $fastcgi_path
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# Comprova que l'script PHP existeixi abans de passar-lo
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 ""; # prohibeix httpoxy: https://httpoxy.org/
fastcgi_pass php-handler;
}
## denega l'accés a tots els altres fitxers .php
location ~* ^.+\.php$ {
deny all;
return 403;
}
## desactiva tot accés als directoris següents
location ~ /(config|tmp|core|lang) {
deny all;
return 403; # substitueix-ho per 404 per no mostrar que aquests directoris existeixen
}
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;
## Desa a la memòria cau imatges,CSS,JS i tipus de lletra web durant una hora
## Augmentar la durada pot millorar el temps de càrrega, però pot fer que es mostrin fitxers antics després d'una actualització de Matomo
expires 1h;
add_header Pragma public;
add_header Cache-Control "public";
}
location ~ /(libs|vendor|plugins|misc/user) {
deny all;
return 403;
}
## mostra correctament els fitxers de text del directori arrel
location ~/(.*\.md|LEGALNOTICE|LICENSE) {
default_type text/plain;
}
}
# vim: filetype=nginx
Avís important
Cal donar permisos de lectura i d'escriptura com a usuari _www-data_ a aquestes carpetes perquè l'aplicació de Matomo pugui escriure als fitxers; si no, en accedir-hi ens donarà un error que advertirà d'aquesta situació.
chown -R www-data:www-data data/matomo/chown -R www-data:www-data data/mariadb_matomo/En alguns casos aquesta solució tampoc no serveix; si és el cas, es poden donar permisos 0755 a la carpeta (o 0777 si encara no funciona). També és possible que sigui perquè el disc és ple.
Docker-compose
Utilitzarem l'eina docker-compose; per fer-ho, podem utilitzar aquestes opcions de configuració (format YML):
{yml}
version: '3'
services:
db:
image: mariadb
command: --max-allowed-packet=64MB
restart: always # perquè es reiniciï si en algun moment deixa de funcionar
volumes:
- /root/data/mariadb_matomo:/var/lib/mysql # directori on s'emmagatzemaran les dades de la BD de manera persistent
environment:
- MYSQL_ROOT_PASSWORD=miContraseniaComplicada # contrasenya del root
- MYSQL_USER=matomo # usuari de la BD
- MYSQL_PASSWORD=contraseniaUsuario # contrasenya de l'usuari especificat a la línia anterior
app:
image: matomo:fpm-alpine
restart: always
links:
- db # comunicació amb la BD
volumes:
- /root/data/matomo:/var/www/html # directori on s'emmagatzemaran les dades de Matomo de manera persistent
environment:
- MATOMO_DATABASE_HOST=db # el nom que hem donat a la connexió amb la BD
- MATOMO_DATABASE_USERNAME=matomo # usuari de la BD
- MATOMO_DATABASE_PASSWORD=miContraseniaComplicada # contrasenya de l'usuari anterior
web:
image: nginx:alpine
restart: always
volumes:
- /root/data/matomo:/var/www/html:ro # directori on s'emmagatzemaran les dades del servidor web de manera persistent
- /root/data/nginx_matomo_config/matomo.conf:/etc/nginx/conf.d/default.conf:ro # directori on es troba la configuració del servidor web
ports:
- 80:80 # http
- 443:443 # https
Desem aquest fitxer com a `docker-compose.yml` a la carpeta que vulguem i executem `docker-compose up -d`. Tot seguit començarà a baixar les imatges necessàries i, si tot ha anat amb normalitat, mostrarà un missatge semblant al següent:
Creating network "data_default" with the default driver
Creating data_web_1 ... done
Creating data_db_1 ... done
Creating data_app_1 ... done
I ja hi podem accedir a través del nostre navegador preferit. És preferible desactivar qualsevol blocador d'anuncis, ja que pot interferir amb el programa.
Nota
També es pot comprovar si ha anat bé amb `docker ps -a` i veure si tots els contenidors s'estan executant.
Finalització de la instal·lació
Si tot ha anat bé, ens hauria de sortir una pantalla com la següent per acabar el procés d'instal·lació:
Quan premem el botó, farà una revisió del sistema, en què ens advertirà que no utilitzem HTTPS i que és recomanable. Per activar-lo, cal obtenir un certificat SSL (Let's Encrypt, per exemple) i després prémer l'enllaç que es mostra. Si no es fa en aquest ordre, l'aplicació deixarà de funcionar.
Tot seguit ens preguntarà per la configuració de la BD. Cal que l'usuari que hàgim creat pugui crear les taules; si no, cal utilitzar l'usuari root.
Quan s'hagin creat les taules, passarem a la configuració de Matomo, a crear l'usuari administrador i a configurar el correu electrònic (hem d'activar l'opció d'SMTP de sortida a Clouding perquè ens pugui enviar correus)
Si tot ha anat bé, ens demanarà l'adreça del lloc web del qual vulguem obtenir les estadístiques. És possible canviar-lo més endavant i afegir-ne d'altres.
A la pantalla següent ens donarà el codi JavaScript que cal introduir al nostre web:
I ja tindríem Matomo instal·lat :)
Configuració
Després d'acabar el procés d'instal·lació, podem entrar al web del nostre VPS i veurem una pantalla d'identificació, on haurem d'introduir la informació que hem proporcionat anteriorment.
Un cop fet això, ens mostrarà el tauler de control, on podrem veure les mètriques quan els primers visitants hagin accedit al nostre web. Al menú de navegació hi ha diverses opcions, que s'expliquen a la documentació de Matomo.
Afegir llocs nous
Des de l'apartat "Todos los sitios de internet" és possible afegir un web nou del qual obtenir estadístiques (també és possible fer-ho d'apps, iOS o Android, per exemple; vegeu SDKs). Ens donarà un codi JS com el que vam introduir durant la instal·lació, que hem de posar al web.
GeoIP
Aquest servei permet geolocalitzar els visitants del nostre web a partir de la IP; de vegades no és gaire precís, però a escala de regió funciona força bé. Per fer-ho, hem de prémer l'engranatge de la part superior i després Sistema -> Localización.
Per defecte, el sistema estima el país d'origen a partir de la llengua utilitzada. Aquesta estimació és força imprecisa, per la qual cosa la canviarem per GeoIP 2 (PHP), ja que no cal instal·lar res més al servidor: el canvi és automàtic.
Després, a la secció següent, cal triar l'enllaç de la base de dades amb les dades de les localitzacions. Matomo utilitza el servei de [MaxMind](http://www.maxmind.com/?rId=piwik), que ens permet tenir les BD a escala de ciutat. Per tenir dades sobre els ISP i altres dades, cal pagar per aquest servei.
No comptar les nostres pròpies visites
Hi ha diverses maneres principals de no comptar les nostres visites als webs configurats. En aquest cas se n'explicaran dues, però és possible veure-les totes a Configuración -> Sitios de internet -> Configuración:
- Podem especificar una IP des de la qual no volem desar les mètriques. És l'opció menys recomanable, ja que les IP solen ser dinàmiques, de manera que és possible que hàgim de modificar aquest paràmetre diverses vegades.
- Una altra opció és baixar una galeta per no comptar les nostres mètriques. L'inconvenient que té és que cal baixar-la per a cada dispositiu que vulguem excloure. Per fer-ho, cal anar a Configuración -> Personal -> Configuración i a l'últim apartat trobarem l'enllaç per baixar la galeta: