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 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.
Besuche die Einstellungsseite und klicke auf Website hinzufügen, um loszulegen.
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.
Füge den Code zwischen den HTML-Tags deiner Kopf- oder Fußzeile ein und innerhalb weniger Minuten wird Umami anfangen, Daten zu sammeln.
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.