ChastityTrackerEnglish
← Zum Blog

2026-04-04 · 3 Min. Lesezeit · TrueBlue

Chastity Tracker mit Docker selbst hosten

Wer den Chastity Tracker nicht über das Self-Service-Portal beziehen möchte, kann die Anwendung vollständig auf einem eigenen Server betreiben. Das Docker-Image ist öffentlich verfügbar — ihr behaltet damit die vollständige Kontrolle über eure Daten, euren Server und eure Updates.

Diese Anleitung richtet sich an Personen mit Grundkenntnissen in Linux und Docker. Die Software wird ohne Gewähr bereitgestellt.

Voraussetzungen

Bevor ihr beginnt, stellt sicher, dass folgendes vorhanden ist:

Das GitHub-Repository findet ihr unter github.com/trublue-2/chastitytracker. Dort sind auch Release-Notes und bekannte Probleme dokumentiert.

Docker Compose Setup

Legt ein Verzeichnis für die Installation an und erstellt darin eine docker-compose.yml:

mkdir chastitytracker && cd chastitytracker
services:
  chastitytracker:
    image: ghcr.io/trublue-2/chastitytracker:latest
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      NEXTAUTH_SECRET: "your-secret-here"
      NEXTAUTH_URL: "https://your-domain.com"
      DATABASE_URL: "file:./data/prod.db"
    volumes:
      - ./data:/app/data

Das Volume ./data:/app/data sorgt dafür, dass die SQLite-Datenbank auch nach einem Container-Neustart oder Update erhalten bleibt. Ohne dieses Volume gehen alle Daten beim nächsten docker compose pull verloren.

Konfiguration (.env)

Die Umgebungsvariablen können direkt in der docker-compose.yml gesetzt werden (wie oben gezeigt) oder in eine separate .env-Datei im selben Verzeichnis ausgelagert werden:

NEXTAUTH_SECRET=your-secret-here
NEXTAUTH_URL=https://your-domain.com
DATABASE_URL=file:./data/prod.db

NEXTAUTH_SECRET ist zwingend erforderlich. Generiert einen zufälligen String mit mindestens 32 Zeichen, zum Beispiel:

openssl rand -base64 32

NEXTAUTH_URL muss exakt mit der URL übereinstimmen, unter der die App erreichbar ist — inklusive Protokoll (https://) und ohne abschliessenden Schrägstrich.

DATABASE_URL zeigt auf die SQLite-Datenbankdatei innerhalb des Containers. Der Pfad file:./data/prod.db legt die Datei im gemounteten Volume ab.

SMTP (optional, empfohlen)

Benachrichtigungen per E-Mail funktionieren nur, wenn SMTP konfiguriert ist. Fügt folgende Variablen hinzu:

SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_USER=your-user@example.com
SMTP_PASS=your-password
SMTP_FROM=noreply@your-domain.com

Ohne SMTP-Konfiguration läuft die App, aber E-Mail-basierte Funktionen (z.B. Benachrichtigungen) stehen nicht zur Verfügung.

Starten

Startet den Container mit:

docker compose up -d

Beim ersten Start initialisiert die Anwendung die Datenbank automatisch. Es werden keine Standard-Benutzer angelegt — ihr müsst euch nach dem Start über die Benutzeroberfläche registrieren oder den Admin-Benutzer manuell anlegen.

Prüft den Status mit:

docker compose logs -f

Sobald die Zeile Ready on http://0.0.0.0:3000 erscheint, ist die App erreichbar.

Traefik / Reverse Proxy (optional)

Wer Traefik als Reverse Proxy verwendet, kann die Labels direkt im Compose-File setzen. Entfernt dabei den ports-Block und ersetzt ihn durch Labels:

services:
  chastitytracker:
    image: ghcr.io/trublue-2/chastitytracker:latest
    container_name: kg-yourname
    restart: unless-stopped
    environment:
      NEXTAUTH_SECRET: "your-secret-here"
      NEXTAUTH_URL: "https://yourname.your-domain.com"
      DATABASE_URL: "file:./data/prod.db"
    volumes:
      - ./data:/app/data
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.chastitytracker.rule=Host(`yourname.your-domain.com`)"
      - "traefik.http.routers.chastitytracker.entrypoints=websecure"
      - "traefik.http.routers.chastitytracker.tls.certresolver=letsencrypt"
      - "traefik.http.services.chastitytracker.loadbalancer.server.port=3000"
    networks:
      - traefik

networks:
  traefik:
    external: true

Passt yourname.your-domain.com sowie den Netzwerknamen an eure Traefik-Konfiguration an. TLS wird über Let's Encrypt automatisch ausgehandelt, sofern euer Traefik-Setup einen letsencrypt-Certresolver kennt.

Andere Reverse Proxies (nginx, Caddy) funktionieren ebenfalls — leitet in dem Fall einfach Port 3000 des Containers weiter und setzt den NEXTAUTH_URL entsprechend.

Updates

Um auf eine neue Version zu aktualisieren:

docker compose pull
docker compose up -d

Docker zieht das neue Image und startet den Container neu. Die Datenbank im Volume bleibt dabei unverändert. Lest vor jedem Update die Release-Notes im GitHub-Repository, um auf breaking changes oder notwendige Migrationsschritte hingewiesen zu werden.

Ein automatisches Backup des ./data-Verzeichnisses vor jedem Update ist empfehlenswert.


Bei Fragen oder Problemen schaut zunächst in die GitHub Issues. Wer keinen eigenen Server betreiben möchte, kann eine verwaltete Instanz über das Self-Service-Portal erstellen.