Ich wandere und laufe gerne und möchte meine Routen mit anderen teilen und sie für mich aufzeichnen. Ich möchte meine Daten selbständig verwalten. Ich nutze teilweise die bekannten Online-Fitness-Tracker. Dabei gefällt es mir, dass ich meine Aktivitäten mit anderen teilen kann. Es gefällt mir nicht, dass die Daten nicht in meiner Hand liegen. Außerdem kann ich bei den meisten Anbietern zwar festlegen, wer was sehen darf. Damit bin ich aber nicht ganz glücklich, weil ich selbst keinen Zugang zum Quellcode der Systeme habe.
Eine Open Source Anwendung, die
von mir selbst installiert werden kann
die die Möglichkeit der gemeinsamen Nutzung bietet und
idealerweise das ActivityPub-Protokoll unterstützt
unterstützt, schien mir schon lange die ideale Lösung zu sein.
So war ich froh, als ich Fittrackee gefunden habe. Die lokale Installation funktionierte reibungslos. Wer nur seine Daten in einer schön aufbereiteten Form tracken möchte, dem reicht es unter Umständen, seine GPX-Dateien in der lokalen Installation zu verwalten. Die Unterstützung des ActivityPub-Protokolls ist zwar noch nicht realisiert, aber in Planung.
Ich habe nach einem Hosting-Anbieter gesucht, bei dem ich alle Tools installieren kann, die ich zum Betrieb von Fittrackee benötige. Diesen habe ich mit Uberspace gefunden.
Hier möchte ich meine Schritte bei der Testinstallation teilen.
Konto bei Uberspace einrichten
Account anlegen
Als erstes habe ich ein Konto bei Uberspace angelegt. Der Hoster bietet die Möglichkeit, einen Monat lang alles zu testen, bevor man für das Angebot zahlen muss. So kann man sich selbst davon überzeugen, dass alles klappt und ob man mit dem Angebot und Support von Uberspace zufrieden ist. Beim Einrichten ist es lediglich erforderlich eine E-Mail-Adresse anzugeben.
Zugang einrichten
Um sich am Uberspace-Server per Secure Shell SSH anzumelden ist es erforderlich, ein Passwort festzulegen. Dies geschieht am einfachsten nach der Anmeldung im Kundenbereich über den Tabulator Zugänge im Bereich SSH-Zugang zum Uberspace.
Ich habe zum Testen ein einfaches Passwort verwendet.
Via SSH anmelden
Die Anmeldung am Uberspace Server erfolgt über die Kommandozeile. Alle notwendigen Daten findet man im Uberspace Kundenbereich - konkret im Tabulator Datenblatt.
Der dem Benutzer ub zugeteilte Uberpace liegt auf dem Server lupus.uberspace.de.
Zugang zu dem mir zugewiesenen Bereich habe ich über ub.uber.space.
Konkret sieht das auf der Komandozeile wie folgt aus:
Dabei ist [ub@lupus ~]$ die Kommandozeile des Servers bei Uberspace.
Orientieren
Ich möchte mir zu Beginn gerne einen Überblick verschaffen. Als erstes sehe ich mir das Stammverzeichnis für den Webspace im Ordner html an.
Das Verzeichnis html enthält eine Datei namens nocontent.html. Ich prüfe den Code der Datei mit cat nocontent.html:
Wenn ich https://[MeinBenutzer].uber.space/ in der Adressleiste meines Browsers eintippe und die Seite aufrufe, wird genau diese HTML-Datei ausgegeben.
Fittrackee
Der Entwickler von Fittrackee hat in der Dokumentation die Installation beschrieben.
Verzeichnisse für Fittrackee anlegen
Damit alles übersichtlich bleibt lege ich im Verzeichnis /home/ub/
ein Verzeichnis fittrackee an, in dem ich alle Daten zu Fittracke gesammelt abspeichere sowie
ein separates Verzeichnis für die Uploads der GPX Dateien fittrackee\upldad.
Am Ende wechsele ich in das Verzeichnis /home/ub/fittrackee.
Fittrackee installieren und virtuelle Umgebung für Python einrichten
Fittrackee ist eine Python-Anwendung und es ist sinnvoll diese in einer virtuelle Umgebung zu installieren. Mindestvoraussetzung ist Python in Version 3.8.
Informationen dazu, wie Python in Uberspace vorinstalliert ist, bietet das Manual.
Einen Überblick über die verschieden Versionen von Python findet man unter python.org.
Nachfolgend zeige ich meine Schritte bei der Installation auf.
In der virtuelle Umgebung, installiere ich die Anwendung Fittrackee via dem Befehl install fittrackee.
Ich aktualisiere den Paketinstaller für Python pip via pip3.9 install --upgrade pip.
Im Anschluß installiere ich explizit die Version 1.26.6 von urllib3, weil ich aus Erfahrung weiß, dass mir andernfalls später beim Einrichten der Datenbank eine Fehlermeldung bezüglich der Version angezeigt wird. Ich führe also pip3.9 install urllib3==1.26.6 aus.
Anderfalls, also ohne den vorherigen Schritt, würde das Einrichten der Datenbank später mit der folgenden Fehlermeldung abgebrochen.
Mit deactivate verlasse ich die virtuelle Umgebung um mit der Konfiguration der Datenbank fortzufahren.
Datenbank
Fittrackee nutzt eine PostgreSQL-Datenbank. Mindestvoraussetzung ist PostgreSQL in Version 11. Informationen zu PostgreSQL bei Uberspace findet man in der Dokumentation.
Welche PostgreSQL Version auf dem Uberspace-Server aktiv ist, kann man via uberspace tools version show postgresql in Erfahrung bringen.
Initialisierung
Umgebungsvariablen
Via Editor füge die folgenden Zeile zur Datei ~/.bash_profile hinzu.
Ich verwende als Editor Nano. Wer lieber mit dem Editor Vi arbeitet kann dies bei Uberspace ebenfalls tun.
Ich öffne die Datei ~/.bash_profile via nano ~/.bash_profile und editiere diese.
Im Anschluß prüfe ich via cat, ob alles korrekt gespeichert wurde und die neu eingefügte Zeile am Ende der Datei vorhanden ist.
Dann rufe ich die Datei .bash_profile via source ~/.bash_profile auf, so dass meine neue Umgebungsvariable geladen wird:
Am Ende überzeuge ich mich davon, dass die Variable $PGPASSFILE korrekt gesetzt ist.
Das Datenbank Cluser
Ich habe das Datenbank Cluster angelegt, wie in der Dokumentation beschrieben.
Als erstes habe ich via openssl rand eine Zufallszahl generiert und diese in der temporären Datei ~/pgpass.temp gespeichert und anschließend in eine versteckten Datei ~/.pgpass kopiert.
Die Datei enthält bisher lediglich die Zufallszahl.
~/.pgpass soll laut PostgreSQL Doku Zeilen in folgendem Format enthalten:
An meine Umgebung angepasst editiere ich die Datei so, wie im nächsten Codeblock zu sehen ist. Das Zeichen * ist ein Wildcard, ein Platzhalter für beliebig viele Zeichen. ub ist der Benutzer und die Zufallszahl ist das Passwort.
Damit alles funktioniert, müssen die Berechtigungen für die Datei ~/.pgpass konfiguriert werden.
Im Anschluss rufe ich initdb --pwfile ~/pgpass.temp --auth=scram-sha-256 -E UTF8 -D ~/opt/postgresql/data/ auf.
Schließlich lösche ich die temporäre Datei ~/pgpass.temp.
Konfiguration
Unix Socket
Jetzt schaue ich mir die Datei ~/.bashrc an.
Hier füge ich die benutzerspezifischen Aliasnamen und Funktionen unterhalb von User specific aliases and functions ein. Konkret sind das die Zeilen export PGHOST=localhost und export PGPORT=5432.
Nun rufe ich die Datei via source auf, damit meine neuen Variablen gesetzt werden.
PostgreSQL Konfiguration
Als nächstes öffne ich die Datei ~/opt/postgresql/data/postgresql.conf zum Editieren.
Die Datei ist sehr umfangreich. In der Datei suche ich nach dem folgenden Text: #unix_socket_directories = '/var/run/postgresql, /tmp' # comma-separated list of directories
Ich lösche diese Zeile und füge anstelle davon die Zeile unix_socket_directories = '/home/[MeinBenutzername]/tmp' ein. In meinem Fall ist dies konkret:
Daemon
Jetzt richte ich alles Notwendige für den PostgreSQL-Dienst ein. Die Datei ~/etc/services.d/postgresql.ini existiert noch nicht.
Ich erstelle die Datei ~/etc/services.d/postgresql.ini und füge den erforderlichen Text für den Dienst PostgreSQL ein.
Jetzt teste ich, ob der PostgreSQL Dienst problemlos funktioniert, indem ich ihn stoppe und starte und mir die Ausgaben in der Kommandozeile ansehe. Manchmal muss ich etwas Geduld haben, weil es etwas dauert, bis der Dienst den Status von STARTING auf RUNNING wechselt.
Wie ich Dienste bei Uberspace verwalte ist im Manuel beschrieben.
Falls etwas schief läuft, suche ich Hinweise in der Protokolldatei ~/opt/postgresql/data/log/.
Datenbank, Datenbankbenutzer und Schema erstellen
Wenn alles problemlos läuft, kann ich den für Fittrackee
Via psql erstelle ich das in der Fittrackee-Dokumentation geforderte Schema.
Alles Wichtige für die Datenbank ist nun eingestellt.
Redis
Informationen über Redis bei Uberspace findet man im Manuel und über Redis im Allgemeinen habe ich in der Redis Doku nachgesehen.
Laut Manuel läuft Redis bei Uberspace standardmäßig nicht auf einem Port, sondern bietet einen Unix-Socket unter /home/$USER/.redis/sock. Entweder muss man die Konfiguration der Fittrackee-Anwendung anpassen oder die Redis-Konfiguration von Port 0 auf Port 6379 ändern. Ich habe mich für die letztere Option entschieden.
Konfiguration
Beim Anpassen der Konfiguration habe ich den Port nicht auf 0 gesetzt, wie im Manuel beschrieben, sondern auf 6379. So ist es nicht erforderlich, etwas in der Anwendung Fittrackee selbst zu ändern.
Daemon
Um den Redis Dienst zu starten, lege ich die Datei ~/etc/services.d/redis.ini an. Die nächsten Schritte sind analog der Beschreibungen im Manuel.
Stoppen und starten
Zugriff testen
Im Uberspace Manuel ist der Aufruf redis-cli -s ~/.redis/soc zum Testen vorgeschlagen. Dies funktioniert bei der hier vorgeschlagen Installationsvariante nicht, weil wir den Port geändert haben.
Deshalb versuche ich es anders. Ich öffne die redis-cli.
Das sieht für mich gut aus.
Optional: E-Mail
Damit E-Mails von Fittrackee aus versendet werden können benötigt man ein E-Mail Konto, welches man später in der Datei .env spezifiziert. Hierzu kann ein beliebiges Konto verwendet werden. Wer mag kann das Konto bei Uberspace direkt anlegen.
Im Uberspace Manuel findet man Informationen zu den E-Mail Konten.
Umgebungsvariablen für Fittrackee
Ich lege eine Datei an, in der ich alle für Fittrackee erforderlichen Umgebungsvariablen einfüge. Weitere Informationen zu den Umgebungsvariablen findet man in der Dokumentation von Fittrackee.
Standarddatei zur Konfiguration der Umgebunsvariablen
Ich lege die Datei an, in der ich meine angepassten Umgebungsvariablen konfiguriere.
Meine Datei sieht wie folgt aus.
Was habe ich geändert? Das meiste ist im Abdruck der Datei ersichtlich. Zu beachten sind insbesondere die Zeilen export HOST=0.0.0.0 und export DATABASE_URL=postgresql://fittrackee:fittrackee@localhost:5432/fittrackee.
Zu Beginn aktiviere ich via source fittrackee_venv/bin/activate die virtuelle Umgebung für Python.
Umgebungsvariablen für Fittrackee laden
Im Anschluss lade ich die zuvor in der Datei /home/ub/fittrackee/.env konfigurierten Umgebungsvariablen. Da der Name der Datei .env mit einem Punkt beginnt, wird diese im Betriebssystem standardmäßig versteckt. Mithilfe des Parameters a beim Befehl ls, werden mir die versteckten Dateien angezeigt. So stelle ich sicher, dass die Datei vorhanden ist.
Dann rufe ich die Datei .env via source auf, um alle Umgebungsvariablen ins System zu laden.
Datenbankschema initialisieren
Der Befehl netstat -tupen zeigt jetzt folgende Liste:
Fittrackee und Worker starten
Wir könnten Fittrackee nun via fittrackee starten. Der Vollständigkeithalber beschreibe ich dies in diesem Kapitel. Da wir Fittrackee aber später per Dienst aktivieren, überspringe ich diesen Schritte bei der echten Installation.
Der Befehl netstat -tulpen kann in einer weiteren Kommandozeile geöffnet werden. Der Befehl zeigt jetzt folgende Liste. Die zweite Zeile ist hinzugekommen.
Worker für E-Mail Versendung via Flask starten:
Port 5000 zur Dokment-Root umleiten
Da man von außen nicht auf alle Ports des Uberspace Servers zugreifen kann und wir außerdem einen Aufruf ohne Portangabe im Internet zur Verfügung stellen möchte, konfigurieren wir Web Backends. Weitere Informationen kann man im Manuel abrufen.
Wie sieht die Ausgabe der Web Backend Liste standardmäßig aus? Dies zeigt der Befehl uberspace web backend list:
Zur Dokument-Root / kann man die Ausgabe des Ports 5000 via uberspace web backend set / --http --port 5000 umleiten.
Die aktualisierte Liste sieht nun wie folgt aus, wenn Fittrackee bereits gestartet ist:
Falls der Service noch nicht gestartet ist, weil du wie ich vorgeschlagen habe, nun gleich erst den Dienst einrichtest, gibt es den Hinweis / http:5000 => NOT OK, no service.
Daemon/Systemd
Application: fittrackee.service
task queue workers: fittrackee_workers.service
Start Services
Nun sind die Dienste aktive und die Anwendung kann über das Internet aufgerufen werden,
Anwendung im Web öffnen
Unter der Adresse https://ub.uber.space/ kann man die Anwendung nun im Internet-Browser öffnen, wobei ub für den spezifischen Benutzer steht.
Benutzer registrieren
Nun ist es möglich einen Benutzer anzulegen.
Nach dem Abschicken des Registrierformulares, sollte eine Info erscheinen. Falls ein Fehler auftritt, ist es sehr wahrscheinlich, dass mit der E-Mail konfiguration etwas nicht stimmt.
Einem Benutzer den Status Admin zuordnen
Optional
Web Backends für externe Domain einrichten
Möchtest du, dass deine Fittrackee-Anwendung unter deiner Domain wie example.org oder einer Subdomain wie subdomain.example.org erreichbar ist? Es soll nicht nur eine einfache Weiterleitung sein, sondern eine DNS-Adressierung. In dem Fall kommen Uberspace Web Backends ins Spiel! Weitere Informationen zu Web Backends bei Uberspace findet man im Manuel.
Ich füge im ersten Schritt die Domain ub.dimna.de zur Uberspace Konfiguration hinzu.
Die Werte, die mir hinter A und AAAA ausgegeben werden, muss ich im zweiten Schritt bei dem Anbieter konfigurieren, bei dem ich die ub.dimna.de registriert habe.
Im dritten Schritt richte ich das Web Backend für die Domain ub.dimna.de ein.
Fittrackee ist noch nicht auf Port 5000 aktiviert. Dies muss ich nachholen.
Probleme
So sollte es aussehen
Prozess killen
Einen Prozess den du (also dein Linuxuser) gestartet hat kannst du auch wieder killen. Wenn nicht klar ist, welcher das ist helfen Tools wie ps, top, htop oder in diesem Fall auch netstat weiter:
Wie man hier sieht, ist der Port 5000 durch einen Python-Prozess mit der Prozess-ID (PID) 3801 blockiert. Man kann den Prozess auch mit dieser numerischen ID beenden. Das wäre dann:
Standardmäßig sendet kill allerdings nicht das Signal KILL sondern TERM. Letzteres kann man sich als höfliche Anfrage an den Prozess vorstellen, sich doch bitte zu beenden. Wenn es wirklich eines KILL bedarf, weil der Prozess auf TERM nicht mehr reagiert, geht das auch:
oder kürzer mit der numerischen Entsprechung von KILL:
Fazit
Das Ziel dieses Beitrags ist es, meine Schritte bei der Installation von Fittrackee bei Uberspace aufzuzeichnen. Ich stelle den Text online, um meine Erfahrungen zu teilen.