Ricerca nel sito web

Come installare Umami Analytics su Debian 12


Umami è una soluzione di analisi web molto leggera, open source e self-hosted. È una buona alternativa incentrata sulla privacy a Google Analytics e ad altre soluzioni analitiche a pagamento. Uno dei principali vantaggi dell'utilizzo di Umami è che non inserisce alcun cookie nel browser dell'utente, il che significa che non è necessario inserire il fastidioso banner dei cookie sul tuo sito web.

In questo tutorial impareremo come installare Umami Analytics su un server Debian 12 e utilizzarlo per tracciare i siti web.

Prerequisiti

    Un server che esegue Debian 12.

    Un utente non root con privilegi sudo.

    Un nome di dominio completo (FQDN) come umami.example.com che punta al server.

    Il Uncomplicated Firewall (UFW) è abilitato e in esecuzione.

    Aggiorna tutto.

    $ sudo apt update && sudo apt upgrade
    

    Installa i pacchetti essenziali di cui il tuo sistema ha bisogno. Alcuni di questi pacchetti potrebbero essere già installati sul tuo sistema.

    $ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring unzip -y
    

Passaggio 1: configurare il firewall

Il primo passo è configurare il firewall. Ubuntu viene fornito con ufw (Uncomplicated Firewall) per impostazione predefinita.

Controlla se il firewall è in esecuzione.

$ sudo ufw status

Dovresti ottenere il seguente output.

Status: inactive

Consenti la porta SSH in modo che il firewall non interrompa la connessione corrente quando la si abilita.

$ sudo ufw allow OpenSSH

Consenti anche le porte HTTP e HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Abilita il firewall

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Controlla nuovamente lo stato del firewall.

$ sudo ufw status

Dovresti vedere un output simile.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Passaggio 2: installa Git

Git è necessario per clonare il repository ufficiale di Umami. Installa Git.

$ sudo apt install git

Verificare l'installazione.

$ git --version
git version 2.39.2

Imposta le variabili di configurazione iniziali.

$ git config --global user.name "Your Name"
$ git config --global user.email "[email "

Passaggio 3: installare Node

Umami è un'app JavaScript che funziona su Nodejs. Per installare Node, utilizzeremo il programma di installazione di Nodesource. Poiché Node v16.0 è l'attuale versione stabile, la installeremo.

Scarica e importa la chiave GPG di Nodesource

$ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/nodesource.gpg

Crea il repository Node Deb.

$ NODE_MAJOR=18
$ echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list

Aggiorna l'elenco dei repository dei pacchetti del sistema Debian.

$ sudo apt update

Installa nodo.

$ sudo apt install nodejs

Verificare l'installazione del nodo.

$ node --version
v18.18.0

Passaggio 4: installare MariaDB Server

Debian 12 non viene fornito con MySQL per impostazione predefinita e non è stato ancora rilasciato un pacchetto ufficiale. Pertanto, utilizzeremo MariaDB per questo.

Debian 12 viene fornito con MariaDB 10.11.4 Lo installeremo. Puoi comunque installare la versione più recente dal repository.

$ sudo apt install mariadb-server

Controlla la versione di MySQL.

$ mysql --version
mysql  Ver 15.1 Distrib 10.11.4-MariaDB, for debian-linux-gnu (x86_64) using  EditLine wrapper

Esegui lo script di installazione sicura di MariaDB.

$ sudo mariadb-secure-installation

Ti verrà richiesta la password di root. Premi Invio perché non abbiamo impostato alcuna password per questo.

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none):

Successivamente, ti verrà chiesto se desideri passare al metodo di autenticazione del socket Unix. Il plugin unix_socket ti consente di utilizzare le credenziali del tuo sistema operativo per connetterti al server MariaDB. Dato che hai già un account root protetto, inserisci n per procedere.

OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] n

Successivamente, ti verrà chiesto se desideri modificare la password di root. Su Debian 12, la password di root è strettamente legata alla manutenzione automatizzata del sistema, quindi dovrebbe essere lasciata intatta. Digita n per procedere ulteriormente.

 ... skipping.

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] n

Successivamente ti verranno poste alcune domande per migliorare la sicurezza di MariaDB. Digita Y per rimuovere utenti anonimi, impedire accessi root remoti, rimuovere il database di test e ricaricare le tabelle dei privilegi.

 ... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Puoi accedere alla shell MariaDB digitando sudo mysql o sudo mariadb sulla riga di comando.

Passaggio 5: scarica Umami

Il primo passo è installare il gestore pacchetti Yarn. Possiamo installarlo utilizzando NPM.

$ sudo npm install -g yarn

Poiché Umami è un'applicazione Node e non dispone di una directory webroot pubblica, non è necessario ospitarla tramite la directory /var/www.

Clona il repository GitHub di Umami.

$ git clone https://github.com/mikecao/umami.git

Passa alla directory appena creata.

$ cd umami

Installa i moduli Umami.

$ yarn install

Passaggio 6: configurare Umami

Crea credenziali MySQL e popola il database

Inserisci la shell MySQL. Inserisci la tua password di root per continuare.

$ sudo mysql

Crea utente umami. Assicurati che la password soddisfi i requisiti stabiliti in precedenza.

mysql> CREATE USER 'umamiuser'@'localhost' IDENTIFIED BY 'YourPassword';

Crea il database umami.

mysql> CREATE DATABASE umami;

Concedere all'utente i privilegi sul database umami.

mysql> GRANT ALL PRIVILEGES ON umami.* TO 'umamiuser'@'localhost';

Poiché non stiamo modificando l'utente root, dovresti creare un altro utente SQL per eseguire attività amministrative che utilizzano l'autenticazione della password. Scegli una password complessa per questo.

MariaDB> GRANT ALL ON *.* TO 'navjot'@'localhost' IDENTIFIED BY 'Yourpassword32!' WITH GRANT OPTION;

Privilegi a livello.

mysql> FLUSH PRIVILEGES;

Uscire dalla Shell.

mysql> exit

Configura le variabili d'ambiente Umami

Abbiamo bisogno di un segreto dell'app efficace per scopi di registrazione. Per questo utilizzeremo il comando OpenSSL.

$ openssl rand 30 | openssl base64 -A
bu4orqfdlG+Dh3Otau4oWSBbI9kGWSkGfYc/WiH/

Crea un file .env per memorizzare le variabili di ambiente per l'installazione di Umami.

$ touch .env

Apri il file per la modifica.

$ nano .env

Incolla al suo interno il seguente codice. Dovrai codificare eventuali caratteri speciali nella password per l'URL del database. Usa il codificatore meyerweb per questo. Nel nostro caso, # viene tradotto in %23. L'URL del database termina con il nome del database a cui dobbiamo connetterci. Utilizza il segreto dell'app generato in precedenza per la variabile APP_SECRET. L'opzione DISABLE_TELEMETRY=1 disabilita l'invio di dati anonimi da parte dell'app ai server di Umami. La variabile TRACKER_SCRIPT_NAME è utile per evitare che il tuo script venga bloccato dai blocchi degli annunci. Dagli un nome univoco, qualcosa che sia unico per il tuo sito web.

DATABASE_URL=mysql://umamiuser:YourPassword@localhost:3306/umami
APP_SECRET=bu4orqfdlG+Dh3Otau4oWSBbI9kGWSkGfYc/WiH/
DISABLE_TELEMETRY=1
TRACKER_SCRIPT_NAME=custom

Passaggio 7: eseguire Umami

Ora che tutto è configurato, crea l'applicazione Umami.

$ yarn build

Il prossimo passo è avviare l'applicazione. Possiamo avviare l'app utilizzando il comando yarn start ma significherebbe che è necessario mantenere il terminale aperto affinché Umami possa essere eseguito. Pertanto, abbiamo bisogno di un modo per eseguire Umami in background. Per fare ciò, installeremo PM2 (Advanced Production Process Manager for Node).

Installa PM2.

$ sudo yarn global add pm2

Le opzioni global indicano che stiamo installando PM2 a livello globale e, pertanto, abbiamo bisogno dei privilegi sudo per eseguire il comando.

Avvia l'applicazione Umami.

$ pm2 start yarn --name umami -- start

Otterrai il seguente output.

[PM2] Starting /usr/bin/yarn in fork_mode (1 instance)
[PM2] Done.
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? id ? name     ? namespace   ? version ? mode    ? pid      ? uptime ? ?    ? status    ? cpu      ? mem      ? user     ? watching ?
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 0  ? umami    ? default     ? N/A     ? fork    ? 2020     ? 0s     ? 0    ? online    ? 0%       ? 18.8mb   ? navjot   ? disabled ?
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

Salvare l'applicazione Umami con PM2 per un ulteriore utilizzo.

$ pm2 save
[PM2] Saving current process list...
[PM2] Successfully saved in /home/navjot/.pm2/dump.pm2

Umami si riavvierà automaticamente se si blocca o viene ucciso, ma non se il sistema viene riavviato. Dobbiamo creare uno script systemd per garantire che si riavvii al riavvio del sistema. Eseguire il comando seguente per generare uno script di avvio.

$ pm2 startup

L'output risultante ti darà un comando per impostare PM2 per l'esecuzione all'avvio. L'output, nel tuo caso, ti darà il nome utente corrente. Eseguire il comando seguente per generare lo script di avvio.

$ sudo env PATH=$PATH:/usr/bin /usr/local/share/.config/yarn/global/node_modules/pm2/bin/pm2 startup systemd -u navjot --hp /home/navjot

Passaggio 8: installare Nginx

Debian 12 viene fornita con una versione precedente di Nginx. Per installare la versione più recente, è necessario scaricare il repository ufficiale Nginx.

Importa la chiave di firma di Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Aggiungi il repository per la versione stabile di Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Aggiorna i repository di sistema.

$ sudo apt update

Installa Nginx.

$ sudo apt install nginx

Verificare l'installazione. Sui sistemi Debian, il seguente comando funzionerà solo con sudo.

$ sudo nginx -v
nginx version: nginx/1.24.0

Avvia Nginx.

$ sudo systemctl start nginx

Controlla lo stato del servizio.

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
     Active: active (running) since Tue 2023-10-10 11:19:45 UTC; 9s ago
       Docs: https://nginx.org/en/docs/
    Process: 3646 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 3647 (nginx)
      Tasks: 3 (limit: 4652)
     Memory: 2.4M
        CPU: 8ms
     CGroup: /system.slice/nginx.service
             ??3647 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??3648 "nginx: worker process"
             ??3649 "nginx: worker process"

Oct 10 11:19:45 umami systemd[1]: Starting nginx.service - nginx - high performance web server...
Oct 10 11:19:45 umami systemd[1]: Started nginx.service - nginx - high performance web server.

Passaggio 9: installa SSL utilizzando Let's Encrypt

Dobbiamo installare Certbot per generare certificati SSL gratuiti offerti da Let's Encrypt.

Puoi installare Certbot utilizzando il repository Debian o prendere la versione più recente utilizzando lo strumento Snapd. Utilizzeremo la versione Snapd.

Debian 12 non viene fornito con Snapd installato. Installa il pacchetto Snapd.

$ sudo apt install snapd

Assicurati che la tua versione di Snapd sia aggiornata.

$ sudo snap install core 
$ sudo snap refresh core

Installa Certbot.

$ sudo snap install --classic certbot

Utilizzare il comando seguente per garantire che il comando Certbot possa essere eseguito creando un collegamento simbolico alla directory /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Verificare l'installazione.

$ certbot --version
certbot 2.7.0

Genera il certificato SSL.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email  -d umami.example.com

Il comando precedente scaricherà un certificato nella directory /etc/letsencrypt/live/umami.example.com sul tuo server.

Genera un certificato gruppo Diffie-Hellman.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Controlla il servizio di pianificazione del rinnovo di Certbot.

$ sudo systemctl list-timers

Troverai snap.certbot.renew.service come uno dei servizi pianificati per l'esecuzione.

NEXT                        LEFT        LAST                        PASSED       UNIT                         ACTIVATES
.....
Tue 2023-10-10 14:24:00 UTC 1h 55min left -                           -            snap.certbot.renew.timer   snap.certbot.renew.service
Wed 2023-10-11 00:00:00 UTC 11h left      -                           -            dpkg-db-backup.timer       dpkg-db-backup.service
Wed 2023-10-11 00:00:00 UTC 11h left      Tue 2023-10-10 00:00:04 UTC 12h ago      exim4-base.timer           exim4-base.service

Esegui un test del processo per verificare se il rinnovo SSL funziona correttamente.

$ sudo certbot renew --dry-run

Se non vedi errori, è tutto a posto. Il tuo certificato si rinnoverà automaticamente.

Passaggio 10: configurare Nginx

Crea e apri il file /etc/nginx/conf.d/umami.conf per la modifica.

$ sudo nano /etc/nginx/conf.d/umami.conf

Incolla al suo interno il seguente codice.

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  umami.example.com;

    access_log  /var/log/nginx/umami.access.log;
    error_log   /var/log/nginx/umami.error.log;
    
    # SSL
    ssl_certificate      /etc/letsencrypt/live/umami.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/umami.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/umami.example.com/chain.pem;
    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 8.8.8.8;

    location / {
      proxy_pass http://localhost:3000;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}
# enforce HTTPS
server {
    listen       80;
    listen       [::]:80;
    server_name  umami.example.com;
    return 301   https://$host$request_uri;
}

Salva il file premendo Ctrl + X e inserendo Y quando richiesto una volta terminato.

Apri il file /etc/nginx/nginx.conf per modificarlo.

$ sudo nano /etc/nginx/nginx.conf

Aggiungi la seguente riga prima della riga include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Verifica la sintassi del file di configurazione Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Riavviare il servizio Nginx per abilitare la nuova configurazione.

$ sudo systemctl restart nginx

Passaggio 11: impostare un sito e raccogliere statistiche

Apri l'URL https://umami.example.com nel tuo browser e sarà simile al seguente.

Umami genera un account amministratore predefinito con il nome utente admin e la password umami durante l'installazione. Utilizza queste credenziali per accedere.

Una volta effettuato l'accesso, verrai accolto con la seguente pagina.

Visita la pagina delle impostazioni e fai clic su Aggiungi sito web per iniziare.

Una volta aggiunto il sito, fai clic sul pulsante Modifica e poi passa alla scheda Codice di monitoraggio per ottenere il codice.

Incolla il codice tra i tag HTML dell'intestazione o del piè di pagina e, in pochi minuti, Umami inizierà a ricevere i dati.

Passaggio 12: aggiorna Umami

Per aggiornare Umami, passa alla directory di installazione di Umami.

$ cd ~/umami

Arresta l'applicazione Umami.

$ pm2 stop umami

Installa eventuali dipendenze nuove o aggiornate.

$ yarn install

Ricostruire l'applicazione Umami.

$ yarn build

Avvia l'applicazione Umami.

$ pm2 start umami

Conclusione

Questo conclude il nostro tutorial sull'installazione e la configurazione dello strumento Umami Analytics su un server Debian 12. Se avete domande, pubblicatele nei commenti qui sotto.

Articoli correlati: