
OwnTracks ist ein Open-Source-Projekt zum privaten Aufzeichnen und Teilen von Standortdaten via HTTP – direkt von deinem Smartphone, an deinen eigenen Server.
Der Recorder ist der schlanke Server-Dienst, der die Positionsmeldungen speichert, verwaltet und eine API bereitstellt (ideal zum Self-Hosting).
Das Frontend ist die dazugehörige Web-Oberfläche, mit der du deine Wege, Aufenthaltsorte und Geofences komfortabel auf Karten ansehen und durchsuchen kannst.
Zusammen bilden Recorder + Frontend eine datenschutzfreundliche, selbstbetriebene Lösung für Live-Tracking und Standort-Historie.
Wofür kann OwnTracks genutzt werden?
- Familie & Freunde: Kurz den Standort teilen, sehen, ob jemand gut angekommen ist.
- Eigene Kinder: Mit Zustimmung: Schulweg im Blick behalten, Hinweis bekommen „ist angekommen/ist losgegangen“.
- Treffen & Ausflüge: Leichter zueinander finden, sehen, wer schon in der Nähe ist.
- Sport & Outdoor: Lauf-, Rad- oder Wanderstrecken mitschneiden und später auf der Karte ansehen.
- Kleine Teams: Überblick, wo sich alle gerade ungefähr befinden.
Voraussetzungen:
- Linux-Grundkenntnisse an der Konsole
(SSH, Dateien bearbeiten, Dienste/Logs prüfen)
- Eigener VPS/Server mit Domain
- Öffentliche Domain mit Zugriff auf die DNS-Einträge (A/AAAA, optional CNAME)
- Feste öffentliche IP empfohlen (VPS / Homeserver)
- Docker & Docker Compose installiert
Schnelltest:
docker --version
docker compose version
- Nginx Proxy Manager (NPM) installiert und konfiguriert
– für Let’s-Encrypt-Zertifikate (HTTPS) und Zugriffsschutz (Basic Auth/Access Lists)
- Zugriff auf DNS – Domain/Subdomain für das OwnTracks-Frontend (z. B. tracks.yourdomain.com / maps.yourdomain.com) zeigt auf deinen Server
1. docker-compose.yml und Projektordner
Lege einen neuen Ordner in deinem Projektordner an. Zum Beispiel:
cd home
mkdir owntracks
cd owntracks
In dem Ordner /home/owntracks wird dann eine docker-compose.yml angelegt
nano docker-compose.yml
In die docker-compose.yml kommt folgender Inhalt hinein:
Version: "3.9"
services:
otrecorder:
image: owntracks/recorder:latest
container_name: otrecorder
restart: always
ports:
- "8083:8083" # HTTP-API, Websocket und einfache Weboberfläche
environment:
- OTR_PORT=0 # MQTT explizit deaktivieren (nur HTTP nutzen)
- OTR_HTTPHOST=0.0.0.0 # HTTP nach außen binden
- OTR_HTTPPORT=8083
volumes:
- ./config:/config # Recorder-Konfiguration (recorder.conf etc.)
- ./store:/store # Persistente Datenablage
owntracks-frontend:
image: owntracks/frontend:latest
container_name: owntracks-frontend
restart: always
depends_on:
- otrecorder
ports:
- "8101:80"
environment:
- SERVER_HOST=otrecorder # der Service-Name aus diesem Compose
- SERVER_PORT=8083
Als Erklärung:
Der OwnTracks-Recorder ist unter Port 8083 verfügbar. Diesen Port machen wir später öffentlich unter https://tracks.yourdomain.com
Das OwnTracks-Webinterface ist unter Port 8101 verfügbar. Diesen Port machen wir später öffentlich unter https://maps.yourdomain.com
In dem Ordner /home/owntracks/ legen wir noch einen unterordner „config“ an:
mkdir config
cd config
Und in den config ordner kommen noch folgende Datei hinein: recorder.conf mit folgendem inhalt
nano recorder.conf
Inhalt:
# MQTT komplett aus (nur HTTP)
OTR_PORT = 0;
# HTTP-Server binden
OTR_HTTPHOST = "0.0.0.0";
OTR_HTTPPORT = 8083;
Nun kehren wir in den Ordner /home/owntracks/ zurück und starten die docker-compose.yml
cd ..
docker compose up -d
Der OwnTracksRecorder und der OwnTracksFronted(Webseite) dürften jetzt schon laufen.
2. DNS Namen einrichten
Wir richten bei dem VPS Anbieter (zum Beispiel Hetzner.com) jweils zwei A und AAAA-DNS Einträge ein:
- maps.yourdomain.com
- tracks.yourdomain.com
Die erste Seite dient dazu sich anzuschauen wo die einzelnen Personen sich aufhalten und die zweite Seite ist die URL, wohin die Android App zum Beispiel die Daten meldet.


3. Nginx Proxy Manager (NPM) konfigurieren:
Auch im NPM richten wir diese Domains jetzt mit SSL Zertifikat ein:

Wichtig bei unserer Konfiguration:
maps.yourdomain.com = 127.0.0.1 und Port 8101
tracks.yourdomain.com = 127.0.0.1 und Port 8083
Alles so wie wir es oben in der docker-compose.yml konfiguriert haben. Voraussetzung: NPM und Owntracks laufen auf dem gleichen System.
Damit keine Unbefugten auf Standortdaten zugreifen können schützen wir die Url „maps.yourdomain.com“ noch mit einem Benutzernamen und Passwort.
Das geht einfach über NPM und den „Access Lists“:



Dann auf „Save“ klicken und alles ist gespeichert.
4. GANZ WICHTIG ! (Leaks verhindern) !!
Keine Leaks zulassen oder das dritte Personen auf eure Bewegungsdaten (Familie/Freunde/Kinder) zugreifen können. Dazu müsst ihr den recorder noch weiter einschränken im NPM (tracks.yourdomain.com):
Nur /pub
durchlassen (nur POST), und /api/
& /ws/
blockieren bzw. schützen. Außerdem solltest du den Recorder nicht direkt am Host veröffentlichen, damit niemand NPM umgehen kann (oder per Firewall die Ports nicht durchlassen).
Folgende „Custom Locations“ (tracks.yourdomain.com) sind nötig:

Diesen Custom-Code noch eingeben (siehe auch Screenshot):
if ($request_method != POST) { return 405; }
client_max_body_size 1m;

Jeweils noch eingeben (siehe Screenshot):
return 403;
Der Schritt ist ganz wichtig, so dass man als Dritter keine Daten über eure „tracks.yourdomain.com“ Seite einsehen kann.
Und im „Advanced Tab“ der „tracks-Domain“ noch:

location / { return 404; }
Fertig: Serverseitig ist jetzt alles erledigt.
5. Android App / IOS App installieren
Die App installieren:

Alle Berechtigungen erteilen und vergeben:


Auf Einstellungen klicken:

Und die Verbindungsdaten bearbeiten:

Mode = HTTP
Host = https://tracks.yourdomain.com/pub (Wichtig: nicht maps.yourdomain.com!)
Port = Weglassen bei HTTP
ClientID = Weglassen bei HTTP
DeviceID = Name z.B. tomphone
TrackerID = 1 (fortlaufende Nummern wählen oder z.B. tp)
Username und Passwort ebenfalls weglassen
Das war es schon. 😀
Die App meldet nun die aktuellen Standortdaten an euren eigenen Server und unter https://maps.yourdomain.com kann alles nachgesehen und live verfolgt werden:


bc1q8dxp9mlt3mkvaklu2vn8j6jteqyv53kschc90v

Lightning: itsc@strike.me
