En este post se explicará como instalar la herramienta de analíticas Matomo en contenedores Docker, por lo que se recomienda tener nociones básicas de esta tecnología (trabajar con imágenes, crear y destruir contenedores, ver logs...).
¿Qué es Matomo?
Matomo es una herramienta de gestión de analíticas web libre. Tiene varias características que la diferencian de sus alternativas:
- Control total sobre los datos: eres la única persona que decides dónde almacenas los datos recopilados y con quien los compartes.
- Datos no sesgados ni muestras de los originales.
- Configuraciones específicas para mejorar la privacidad de los visitantes.
- Capacidad de importar datos de otros servicios (como Google Analytics).
Matomo tiene dos formas de usar sus servicios y productos: usando sus servidores pagando por dicho servicio; o alojando tu mismo sus productos en tus servidores (o VPS).
Manos a la obra
Como se ha dicho, vamos a usar Docker para alojar Matomo (a través de docker-compose), estos son los contenedores que vamos a usar:
- Matomo: contendrá la instalación del programa de analíticas.
- MariaDB, (o MySQL): base de datos donde guardará la configuración y los datos.
- Nginx, para el servidor web.
Preparando el entorno
A la hora de la creación del servidor, vamos a seleccionar la opción de Apps -> Docker (Ubuntu 18.04). Dependiendo del número de usuarios de nuestras páginas es posible que necesitemos más capacidad, pero en un principio con las prestaciones mínimas funcionará correctamente (0.5 vCores, 1GB RAM, 5GB SSD).
Es necesario tener varios puertos visibles para acceder a la interfaz web. Básicamente son necesarios el de HTTP (80 por defecto) y el de HTTPS (443 por defecto).
Además, antes de comenzar con Docker, vamos a crear varias carpetas para guardar datos persistentemente, es decir, para que cuando un contenedor se apague no perdamos los dato
/root/data/mariadb_matomo:
para la BD:
/root/data/matomo:
para los datos de Matomo
/root/data/nginx_matomo_config/matomo.conf:
para el archivo de configuración de Nginx. En este caso se ha usado el siguiente como ejemplo (sin HTTPS):
# /root/data/nginx_matomo_config/matomo.conf upstream php-handler { server 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; } } # vim: filetype=nginx
Aviso Importante
Es necesario dar permisos de lectura y de escritura como usuario _www-data_ a estas carpetas para que la aplicación de Matomo pueda escribir en los ficheros, sino al acceder nos dará un error advirtiendo esta situación.
chown -R www-data:www-data data/matomo/
chown -R www-data:www-data data/mariadb_matomo/
En algunos casos esta solución tampoco sirve, si es el caso se pueden dar permisos a la carpeta 0755 (o 0777 si aún no funciona). También es posible que sea porque el disco esté lleno.
Docker-compose
Vamos a usar la herramienta docker-compose, para ello podemos usar estas opciones de configuración (formato YML):
{yml} version: '3' services: db: image: mariadb command: --max-allowed-packet=64MB restart: always # para que se reinicie si en algún momento se cae volumes: - /root/data/mariadb_matomo:/var/lib/mysql # directorio donde se van a almacenar los datos persistentemente de la BD environment: - MYSQL_ROOT_PASSWORD=miContraseniaComplicada # contraseña del root - MYSQL_USER=matomo # usuario de la BD - MYSQL_PASSWORD=contraseniaUsuario # contraseña del usuario especificado en la línea anterior app: image: matomo:fpm-alpine restart: always links: - db # comunicación con la BD volumes: - /root/data/matomo:/var/www/html # directorio donde se van a almacenar los datos persistentemente de Matomo environment: - MATOMO_DATABASE_HOST=db # el nombre que hemos dado a la conexión con la BD - MATOMO_DATABASE_USERNAME=matomo # usuario de la BD - MATOMO_DATABASE_PASSWORD=miContraseniaComplicada # contraseña del usuario anterior web: image: nginx:alpine restart: always volumes: - /root/data/matomo:/var/www/html:ro # directorio donde se van a almacenar los datos persistentemente del servidor web - /root/data/nginx_matomo_config/matomo.conf:/etc/nginx/conf.d/default.conf:ro # directorio donde se encuentra la configuración del servidor web ports: - 80:80 # http - 443:443 # https
Guardamos este archivo como `docker-compose.yml` en la carpeta que querramos y ejecutamos `docker-compose up -d`. Acto seguido empezará a descargar las imágenes necesarias y si todo ha ido con normalidad mostrará un mensaje parecido al siguiente:
Creating network "data_default" with the default driver Creating data_web_1 ... done Creating data_db_1 ... done Creating data_app_1 ... done
Y ya podemos acceder a través de nuestro navegador preferido. Es preferible desactivar cualquier bloqueador de anuncios ya que puede interferir con el programa.
Nota
También se puede comprobar si ha ido bien con `docker ps -a` y ver si todos los contenedores están ejecutándose.
Finalizar instalación
Si todo ha ido bien nos debería salir una pantalla como la siguiente, para terminar el proceso de instalación:
Cuando pulsemos el botón, nos hará una revisión del sistema, donde nos advertirá que no usamos HTTPS y es recomendable. Para activarlo, es necesario obtener un certificado SSL (Let's Encrypt, por ejemplo) y después dar al enlace que se muestra. De no hacerlo en ese orden la aplicación se caerá.
Acto seguido nos preguntará por la configuración de la BD. Es necesario que el usuario que hayamos creado pueda crear las tablas, si no, usar el usuario root.
Cuando se hayan creado las tablas, pasaremos ya a la configuración de Matomo, a crear el usuario administrador y configurar el correo electrónico (debemos activar la opción de SMTP de salida en Clouding para que nos pueda enviar correos)
Si todo ha ido bien, nos pedirá la dirección del sitio web del que queramos obtener las estadísticas. Es posible cambiarlo más adelante así como añadir otros.
En la siguiente pantalla nos dará el código JavaScript a introducir en nuestra web:
Y ya estaría instalado Matomo :)
Configuración
Después de terminar el proceso de instalación, podemos ingresar a la web de nuestro VPS y veremos una pantalla de identificación, donde tendremos que introducir la información que hemos proporcionado anteriormente.
Hecho esto, nos mostrará el panel de control, donde cuando los primeros visitantes hayan accedido a nuestra web podemos ver las métricas. En el menú de navegación hay diversas opciones, las cuales se explican en la documentación de Matomo.
Añadir nuevos sitios
Desde el apartado "Todos los sitios de internet" es posible añadir una nueva web de la cual obtener estadísticas (también es posible hacerlo de apps, iOS o Android por ejemplo, ver SDKs), nos dará un código JS como en que introdujimos en la instalación que debemos meter en la web.
GeoIP
Este servicio permite geolocalizar a los visitantes de nuestra web a partir de la IP, no es demasiado preciso en ocasiones pero a nivel de región funciona bastante bien. Para ello, debemos pulsar el engranaje en la parte superior y después Sistema -> Localización.
Por defecto el sistema estima el país de origen a partir del lenguaje usado. Esta estimación es bastante imprecisa, por lo que vamos a cambiarla por GeoIP 2 (PHP), ya que no hace falta instalar nada más en el servidor, el cambio es automático.
Después, en la sección siguiente, hay que elegir el enlace de la base de datos con los datos de las localizaciones. Matomo usa el servicio de [MaxMind](http://www.maxmind.com/?rId=piwik), el cual nos permite tener las BDs a nivel de ciudad. Para tener datos sobre las ISPs y demás es necesario pagar en dicho servicio.
No contar nuestras propias visitas
Hay varias formas principalmente de no contar nuestras visitas a las web configuradas, en este caso se esplicarán dos de ellas, pero es posible ver todas en Configuración -> Sitios de internet -> Configuración:
-
Podemos especificar una IP desde la cual no queremos guardar las métricas. Es la opción menos recomendable ya que las IP suelen ser dinámicas, por lo que es posible que tengamos que modificar este parámetro varias veces.
-
Otra opción es descargar una Cookie para no contar nuestras métricas. El inconveniente que tiene es que hay que descargarla para cada dispositivo que queramos excluir. Para ello hay que ir a Configuración -> Personal -> Configuración y en el último apartado encontraremos el enlace para descargar la cookie: