So installierst du Umami Analytics unter Debian 12

Umami ist eine sehr schlanke, quelloffene, selbst gehostete Webanalyselösung. Sie ist eine gute, datenschutzfreundliche Alternative zu Google Analytics und anderen kostenpflichtigen Analyselösungen. Einer der Hauptvorteile von Umami ist, dass es keine Cookies im Browser der Nutzerinnen und Nutzer ablegt, so dass du keine lästigen Cookie-Banner auf deiner Website platzieren musst.

In diesem Tutorial lernen wir, wie wir Umami analytics auf einem Debian 12 Server installieren und zum Tracken von Websites verwenden.

Voraussetzungen

  • Ein Server, auf dem Debian 12 läuft.
  • Ein Nicht-Root-Benutzer mit sudo-Rechten.
  • Ein vollständig qualifizierter Domainname (FQDN) wie umami.example.com, der auf den Server zeigt.
  • Die Uncomplicated Firewall(UFW) ist aktiviert und läuft.
  • Aktualisiere alles.
    $ sudo apt update && sudo apt upgrade
    
  • Installiere wichtige Pakete, die dein System braucht. Einige dieser Pakete sind vielleicht schon auf deinem System installiert.
    $ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring unzip -y
    

Schritt 1 – Firewall konfigurieren

Der erste Schritt besteht darin, die Firewall zu konfigurieren. Ubuntu wird standardmäßig mit ufw (Uncomplicated Firewall) ausgeliefert.

Überprüfe, ob die Firewall läuft.

$ sudo ufw status

Du solltest die folgende Ausgabe erhalten.

Status: inactive

Erlaube den SSH-Port, damit die Firewall die aktuelle Verbindung nicht unterbricht, wenn du sie aktivierst.

$ sudo ufw allow OpenSSH

Lasse auch HTTP- und HTTPS-Ports zu.

$ sudo ufw allow http
$ sudo ufw allow https

Aktiviere die Firewall

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

Überprüfe den Status der Firewall erneut.

$ sudo ufw status

Du solltest eine ähnliche Ausgabe sehen.

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)

Schritt 2 – Git installieren

Git wird benötigt, um das offizielle Repository von Umami zu klonen. Installiere Git.

$ sudo apt install git

Überprüfe die Installation.

$ git --version
git version 2.39.2

Setze die ersten Konfigurationsvariablen.

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

Schritt 3 – Node installieren

Umami ist eine JavaScript-App, die auf Nodejs läuft. Um Node zu installieren, verwenden wir den Installer von Nodesource. Da Node v16.0 die aktuelle stabile Version ist, werden wir diese installieren.

Lade den Nodesource GPG-Schlüssel herunter und importiere ihn

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

Erstelle das Node Deb Repository.

$ 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

Aktualisiere die Liste des Debian-System-Paket-Repositorys.

$ sudo apt update

Installiere Node.

$ sudo apt install nodejs

Überprüfe die Node-Installation.

$ node --version
v18.18.0

Schritt 4 – MariaDB Server installieren

Debian 12 wird standardmäßig nicht mit MySQL ausgeliefert und es wurde noch kein offizielles Paket dafür veröffentlicht. Daher werden wir MariaDB dafür verwenden.

Debian 12 wird mit MariaDB 10.11.4 ausgeliefert, das wir installieren werden. Du kannst aber auch die neueste Version aus dem Repository installieren.

$ sudo apt install mariadb-server

Überprüfe die Version von MySQL.

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

Führe das Skript zur sicheren Installation von MariaDB aus.

$ sudo mariadb-secure-installation

Du wirst nach dem Root-Passwort gefragt. Drücke die Eingabetaste, denn wir haben kein Passwort dafür festgelegt.

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):

Als nächstes wirst du gefragt, ob du zur Unix-Socket-Authentifizierungsmethode wechseln möchtest. Mit dem unix_socket Plugin kannst du deine Betriebssystem-Zugangsdaten verwenden, um dich mit dem MariaDB-Server zu verbinden. Da du bereits ein geschütztes Root-Konto hast, gibst du n ein, um fortzufahren.

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

Als nächstes wirst du gefragt, ob du dein Root-Passwort ändern möchtest. Unter Debian 12 ist das Root-Passwort eng mit der automatischen Systemwartung verknüpft, daher solltest du es nicht ändern. Gib n ein, um fortzufahren.

 ... skipping.

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

Change the root password? [Y/n] n

Als nächstes werden dir einige Fragen gestellt, um die Sicherheit von MariaDB zu verbessern. Gib Y ein, um anonyme Benutzer zu entfernen, Remote-Root-Logins zu verbieten, die Testdatenbank zu entfernen und die Berechtigungstabellen neu zu laden.

 ... 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!

Du kannst die MariaDB-Shell aufrufen, indem du sudo mysql oder sudo mariadb in die Befehlszeile eingibst.

Schritt 5 – Umami herunterladen

Der erste Schritt ist die Installation des Yarn-Paketmanagers. Wir können ihn mit NPM installieren.

$ sudo npm install -g yarn

Da Umami eine Node-Anwendung ist und kein öffentliches Webroot-Verzeichnis hat, brauchen wir es nicht über das /var/www Verzeichnis zu hosten.

Klone das GitHub-Repository von Umami.

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

Wechsle in das neu erstellte Verzeichnis.

$ cd umami

Installiere die Umami-Module.

$ yarn install

Schritt 6 – Umami konfigurieren

MySQL-Zugangsdaten erstellen und die Datenbank auffüllen

Rufe die MySQL-Shell auf. Gib dein Root-Passwort ein, um fortzufahren.

$ sudo mysql

Erstelle den Benutzer umami. Vergewissere dich, dass das Passwort den zuvor festgelegten Anforderungen entspricht.

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

Erstelle die Datenbank umami.

mysql> CREATE DATABASE umami;

Erteile dem Benutzer die Rechte für die Datenbank umami.

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

Da wir den Root-Benutzer nicht ändern, solltest du einen weiteren SQL-Benutzer für die Durchführung von Verwaltungsaufgaben anlegen, die eine Passwortauthentifizierung erfordern. Wähle ein sicheres Passwort für diesen Benutzer.

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

Lösche die Privilegien.

mysql> FLUSH PRIVILEGES;

Beende die Shell.

mysql> exit

Umami-Umgebungsvariablen konfigurieren

Wir brauchen ein starkes App-Geheimnis für die Protokollierung. Dafür verwenden wir den OpenSSL-Befehl.

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

Erstelle eine Datei .env, um die Umgebungsvariablen für die Installation von Umami zu speichern.

$ touch .env

Öffne die Datei zum Bearbeiten.

$ nano .env

Füge den folgenden Code in die Datei ein. Du musst alle Sonderzeichen in deinem Passwort für die Datenbank-URL verschlüsseln. Verwende dafür den meyerweb encoder. In unserem Fall wird # in %23 übersetzt. Die Datenbank-URL endet mit dem Namen der Datenbank, mit der wir uns verbinden wollen. Verwende das zuvor erstellte App-Geheimnis für die Variable APP_SECRET. Die Option DISABLE_TELEMETRY=1 deaktiviert das Senden von anonymen Daten durch die App an die Server von Umami. Die Variable TRACKER_SCRIPT_NAME ist nützlich, damit dein Skript nicht von Werbeblockern blockiert wird. Gib dem Skript einen eindeutigen Namen, der nur auf deiner Website vorkommt.

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

Schritt 7 – Umami ausführen

Jetzt, wo alles eingerichtet ist, erstellst du die Umami-Anwendung.

$ yarn build

Der nächste Schritt besteht darin, die Anwendung zu starten. Wir können die Anwendung mit dem Befehl yarn start starten, aber das würde bedeuten, dass du das Terminal geöffnet lassen musst, damit Umami läuft. Deshalb brauchen wir eine Möglichkeit, Umami im Hintergrund laufen zu lassen. Dazu werden wir PM2 (Advanced Production Process Manager for Node) installieren.

Installiere PM2.

$ sudo yarn global add pm2

Die Option global bedeutet, dass wir PM2 global installieren und daher sudo-Rechte benötigen, um den Befehl auszuführen.

Starte die Umami-Anwendung.

$ pm2 start yarn --name umami -- start

Du wirst die folgende Ausgabe erhalten.

[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 ?
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

Speichere die Umami-Anwendung mit PM2 für die weitere Verwendung.

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

Umami wird automatisch neu gestartet, wenn es abstürzt oder beendet wird, aber nicht, wenn das System neu gebootet wird. Wir müssen ein systemd Skript erstellen, um sicherzustellen, dass Umami bei jedem Neustart des Systems neu startet. Führe den folgenden Befehl aus, um ein Startskript zu erstellen.

$ pm2 startup

In der Ausgabe findest du einen Befehl, mit dem du PM2 so einstellst, dass es beim Systemstart gestartet wird. Die Ausgabe enthält in deinem Fall den aktuellen Benutzernamen. Führe den folgenden Befehl aus, um das Startskript zu erstellen.

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

Schritt 8 – Nginx installieren

Debian 12 wird mit einer älteren Version von Nginx ausgeliefert. Um die neueste Version zu installieren, musst du das offizielle Nginx-Repository herunterladen.

Importiere den Signierschlüssel von Nginx.

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

Füge das Repository für die stabile Version von Nginx hinzu.

$ 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

Aktualisiere die System-Repositories.

$ sudo apt update

Installiere Nginx.

$ sudo apt install nginx

Überprüfe die Installation. Auf Debian-Systemen funktioniert der folgende Befehl nur mit sudo.

$ sudo nginx -v
nginx version: nginx/1.24.0

Starte Nginx.

$ sudo systemctl start nginx

Überprüfe den Status des Dienstes.

$ 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.

Schritt 9 – Installiere SSL mit Let’s Encrypt

Wir müssen Certbot installieren, um die von Let’s Encrypt angebotenen kostenlosen SSL-Zertifikate zu generieren.

Du kannst Certbot über das Repository von Debian installieren oder die neueste Version mit dem Snapd-Tool herunterladen. Wir werden die Snapd-Version verwenden.

Bei Debian 12 ist Snapd noch nicht installiert. Installiere das Snapd-Paket.

$ sudo apt install snapd

Vergewissere dich, dass deine Version von Snapd auf dem neuesten Stand ist.

$ sudo snap install core 
$ sudo snap refresh core

Installiere Certbot.

$ sudo snap install --classic certbot

Stelle mit folgendem Befehl sicher, dass der Certbot-Befehl ausgeführt werden kann, indem du einen symbolischen Link auf das Verzeichnis /usr/bin erstellst.

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

Überprüfe die Installation.

$ certbot --version
certbot 2.7.0

Erstelle das SSL-Zertifikat.

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

Mit dem obigen Befehl wird ein Zertifikat in das Verzeichnis /etc/letsencrypt/live/umami.example.com auf deinem Server heruntergeladen.

Erstelle ein Diffie-Hellman-Gruppenzertifikat.

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

Überprüfe den Certbot-Erneuerungsplanerdienst.

$ sudo systemctl list-timers

Du findest snap.certbot.renew.service als einen der Dienste, die für die Ausführung vorgesehen sind.

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

Führe einen Probelauf des Prozesses durch, um zu prüfen, ob die SSL-Erneuerung einwandfrei funktioniert.

$ sudo certbot renew --dry-run

Wenn du keine Fehler siehst, bist du bereit. Dein Zertifikat wird automatisch erneuert.

Schritt 10 – Nginx konfigurieren

Erstelle und öffne die Datei /etc/nginx/conf.d/umami.conf zum Bearbeiten.

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

Füge den folgenden Code in die Datei ein.

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;
}

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Öffne die Datei /etc/nginx/nginx.conf und bearbeite sie.

$ sudo nano /etc/nginx/nginx.conf

Füge die folgende Zeile vor der Zeile include /etc/nginx/conf.d/*.conf; ein.

server_names_hash_bucket_size  64;

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Überprüfe die Syntax der Nginx-Konfigurationsdatei.

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

Starte den Nginx-Dienst neu, um die neue Konfiguration zu aktivieren.

$ sudo systemctl restart nginx

Schritt 11 – Eine Website einrichten und Statistiken sammeln

Öffne die URL https://umami.example.com in deinem Browser und sie sieht wie folgt aus.

Umami Login Seite

Umami erstellt während der Installation ein Standard-Administratorkonto mit dem Benutzernamen admin und dem Passwort umami. Benutze diese Zugangsdaten, um dich einzuloggen.

Sobald du eingeloggt bist, siehst du die folgende Seite.

Umami Dashboard

Besuche die Einstellungsseite und klicke auf Website hinzufügen, um loszulegen.

Umami Website hinzufügen

Sobald du die Website hinzugefügt hast, klickst du auf die Schaltfläche Bearbeiten und wechselst dann zum Reiter Tracking-Code, um den Code zu erhalten.

Umami Tracking Code

Füge den Code zwischen den HTML-Tags deiner Kopf- oder Fußzeile ein und innerhalb weniger Minuten wird Umami anfangen, Daten zu sammeln.

Umami-Statistiken

Schritt 12 – Umami aktualisieren

Um Umami zu aktualisieren, wechsle in das Umami-Installationsverzeichnis.

$ cd ~/umami

Stoppe die Umami Anwendung.

$ pm2 stop umami

Installiere alle neuen oder aktualisierten Abhängigkeiten.

$ yarn install

Baue die Umami-Anwendung neu auf.

$ yarn build

Starte die Umami-Anwendung.

$ pm2 start umami

Fazit

Damit ist unsere Anleitung zur Installation und Einrichtung des Umami Analytics Tools auf einem Debian 12 Server abgeschlossen. Wenn du noch Fragen hast, schreibe sie in die Kommentare unten.

Das könnte dich auch interessieren …