matomo

Introduzione

Questa è una breve e semplice guida su come installare Matomo su server con Ubuntu 20.04.

Descriveremo quali comandi da terminale devono essere utilizzati per la prima parte della installazione di Matomo, mentre la successiva sarà completata mediante interfaccia web.

Prerequisiti

Sul sito web di Matomo è disponibile la configurazione.

E’ necessario installare sul server - salvo che non siano già installati - i seguenti pacchetti:

  1. PHP versione 7.2.5 o superiore;
  2. MySQL versione 5.5 o superiore oppure MariaDB;
  3. NGINX.

Infine è necessario un nome a dominio (es.: matomo.domain.com)

1. Verificare che il server Ubuntu 20.04 sia aggiornato

Una volta effettuato l’accesso via SSH al server, verificare la presenza di eventuali aggiornamenti:

sudo apt update
sudo apt upgrade

Installare alcune dipendenze (qualora non siano già installate sul server):

apt install curl wget unzip gnupg2 -y

2. Installare i pacchetti necessari

Qualora non siano già installati sul server i pacchetti indicati tra i prerequisiti, procedere con la loro installazione come segue:

Proponiamo due soluzioni a seconda che, per il database da creare, si desideri installare solo MySQL oppure solo MariaDB. Sul punto, precisiamo che si tratta di due differenti soluzioni, ove MySQL è stato il primo ad essere sviluppato nel 1995, mentre MariaDB è un fork di MySQL sviluppato nel 2009. Su Internet si trovano diversi contributi che espongono la comparazione tra le due soluzioni.

Nel nostro caso, useremo MariaDB.

E pertanto, ai fini della installazione, optare per una delle seguenti soluzioni che sono alternative tra loro:

  1. Per il database che si dovrà creare, se si vuole installare solo MySQL, procedere come segue:
apt install nginx mysql-server php7.4 php7.4-cli php7.4-fpm php7.4-common php7.4-curl php7.4-gd php7.4-xml php7.4-mbstring php7.4-mysql -y
  1. Per il database che si dovrà creare, se si vuole installare solo MariaDB, procedere come segue:
apt install nginx mariadb-server php7.4 php7.4-cli php7.4-fpm php7.4-common php7.4-curl php7.4-gd php7.4-xml php7.4-mbstring php7.4-mysql -y

3. Creazione del database

Accedere a MySQL o MariaDB - senza impostare la password - con il seguente comando:

sudo mysql -u root

Dopo aver digitato il comando su riportato si presenterà un prompt come segue:

MariaDB [(none)]>

Se invece fosse MySQL, si avrà:

mysql>

Quindi, procedere alla creazione del database come segue:

CREATE DATABASE matomo;

Poi creare utente e password come segue, decidendo - se si vuole - di cambiare matomoadmin con altro nome utente (sarà quello utilizzato per accedere al database), ma fondamentalmente sostituire strongpassword con la password che sarà necessaria per l’accesso al database di Matomo.

CREATE USER 'matomoadmin'@'localhost' IDENTIFIED BY 'strongpassword';

Quindi, garantire all’utente creato (sempre che intenda lasciare matomoadmin, altrimenti cambiare con il nome utente scelto) il pieno accesso al database così:

GRANT ALL ON matomo.* TO 'matomoadmin'@'localhost';

Salvare le impostazioni come segue:

FLUSH PRIVILEGES;

Uscire dalla shell di MariaDB o di MySQL digitando:

exit;

4. Installazione di Matomo

Prima di installare Matomo, sul server eseguire questi comandi:

Spostarsi nella cartella dove dovrà essere installato Matomo

cd /var/www/

Quindi, con il comando wget scarichiamo il file “matomo.zip” digitando il link presente sulla pagina di installazione di Matomo e poi decomprimiamo il file:

wget https://builds.matomo.org/matomo.zip && unzip matomo.zip

Verrà scaricato il file matomo.zip e quindi decompresso automaticamente nella cartella “matomo” che sarà in /var/www/.

Infatti, digitando

ls -la

Si potrà vedere la cartella “matomo” che sarà appunto in /var/www/matomo/.

A questo punto, si dovrà attribuire la ownership all’utente “www-data” per la cartella “matomo” come segue

sudo chown -R www-data:www-data /var/www/matomo

Cambiare i permessi per l’accesso alla cartella “matomo” come segue

sudo chmod -R 755 /var/www/matomo

5. Configurazione di NGINX con un nome a dominio

Se si è in possesso di un nome a dominio, bisogna creare un file di configurazione di NGINX per il corretto indirizzamento.

Sul sito di Matomo a questa pagina cliccando su Nginx si verrà indirizzati ad una pagina di GitHub dove poter scaricare il file di configurazione di NGINX.

Quindi, sul server, spostarsi all’interno della cartella sites-available di NGINX come segue

cd /etc/nginx/sites-available/

Creare un file al quale attribuiremo il nome “nomeadominio.conf” come segue

nano nomeadominio.conf

Copiare e incollare il contenuto del file di configurazione di Ngnix precedente scaricato e che, per comodità, riportiamo:

server {
    listen [::]:80; # remove this if you don't want Matomo to be reachable from IPv6
    listen 80;
    server_name matomo.domainname.com;
    # Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
    location / {
        return 301 https://$host$request_uri;
    }
}
server {
    listen [::]:443 ssl http2; # remove this if you don't want Matomo to be reachable from IPv6
    listen 443 ssl http2;
    server_name matomo.domainname.com; # list all domains Matomo should be reachable from
    access_log /var/log/nginx/matomo.access.log;
    error_log /var/log/nginx/matomo.error.log;

    ## uncomment if you want to enable HSTS with 6 months cache
    ## ATTENTION: Be sure you know the implications of this change (you won't be able to disable HTTPS anymore)
    #add_header Strict-Transport-Security max-age=15768000 always;

    ## replace with your SSL certificate
    ssl_certificate /etc/letsencrypt/live/matomo.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/matomo.example.com/privkey.pem;

    # include ssl.conf; # if you want to support older browsers, please read through this file

    add_header Referrer-Policy origin always; # make sure outgoing links don't show the URL to the Matomo instance
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;

    root /var/www/matomo/; # replace with path to your matomo instance

    index index.php;

    ## only allow accessing the following php files
    location ~ ^/(index|matomo|piwik|js/index|plugins/HeatmapSessionRecording/configs)\.php$ {
        include snippets/fastcgi-php.conf; # if your Nginx setup doesn't come with a default fastcgi-php config, you can fetch it from https://github.com/nginx/nginx/blob/master/conf/fastcgi.conf
        #try_files $fastcgi_script_name =404; # protects against CVE-2019-11043. If this line is already included in your snippets/fastcgi-php.conf you can comment it here.
        fastcgi_param HTTP_PROXY ""; # prohibit httpoxy: https://httpoxy.org/
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; #replace with the path to your PHP socket file
        #fastcgi_pass 127.0.0.1:9000; # uncomment if you are using PHP via TCP sockets (e.g. Docker container)
    }

    
    ## deny access to all other .php files
    location ~* ^.+\.php$ {
        deny all;
        return 403;
    }

    ## serve all other files normally
    location / {
        try_files $uri $uri/ =404;
    }

    ## 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|node_modules) {
        deny all;
        return 403;
    }

    ## properly display textfiles in root directory
    location ~/(.*\.md|LEGALNOTICE|LICENSE) {
        default_type text/plain;
    }
}
# vim: filetype=nginx

Una volta incollato, chiudere l’editor con Ctrl+X e scrivere Y per consentire di salvare.

Per verificare che la configurazione del il file sia corretta, digitare

nginx -t

Se otterremo la seguente risposta

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

vuol dire che la configurazione è corretta e, in questo caso, possiamo creare il link nella cartella /etc/nginx/sites-enabled/ precisando che nomeadominio.conf è il nome del fine di configurazione di Nginx che si era scelto.

Quindi digiteremo

ln -s /etc/nginx/sites-enabled/nomeadominio.conf /etc/nginx/sites-available/nomeadominio.conf

A questo punto, riavviamo Nginx con

systemctl restart nginx

6. Installazione del certificato SSL con Let’s Encrypt

Per ottenere una connessione al sito matomo.domainname.com con procollo HTTPS installiamo il certificato SSL con certbot come segue:

certbot --nginx

A questo punto seguire le indicazioni che compaiono a terminale prestando attenzione a scegliere la voce che corrisponde al nome a dominio (avevamo esemplificato con “matomo.domainname.com” e poi scegliere il n. 2 e cioè

2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you’re confident your site works on HTTPS. You can undo this change by editing your web server’s configuration.”.

7. Completare l’installazione con il browser

A questo punto è sufficiente aprire il browser e scrivere nella barra degli indirizzi il nome a dominio che avevamo impostato (nel nostro caso matomo.domainname.com).

Se tutto è andato a buon fine, apparirà la pagina web dalla quale completare la configurazione di Matomo, come si può vedere sul sito ufficiale.

Stay tuned!