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.