2tap2b

Tinyauth mit Docker und Traefik installieren

Inhaltsverzeichnis

1. Intro

Tinyauth ist eine meiner Lieblingsanwendungen in meinem Homelab. Es ist eine super schnelle, lightweight Alternative zu Authelia oder Authentik – perfekt fürs Homelab. Die Installation ist in wenigen Minuten erledigt und die Integration mit Traefik läuft absolut reibungslos.

In diesem Setup verwende ich Tinyauth ausschließlich in Kombination mit Pocket ID, um z. B. das Traefik-Dashboard abzusichern und vor externem Zugriff zu schützen. Wie genau das funktioniert, zeige ich euch hier.


Versionierung

DatumÄnderung
25-07-2025Initialer Release
08-01-2026Upgrade zu v4

2. Voraussetzungen


3. Projektverzeichnis erstellen

Erstelle ein neues Verzeichnis für Tinyauth:

mkdir -p /opt/containers/tinyauth/data
cd /opt/containers/tinyauth

4. docker-compose.yml erstellen

nano docker-compose.yml
services:
  tinyauth:
    container_name: tinyauth
    image: ghcr.io/steveiliop56/tinyauth:v4
    environment:
      - APP_URL=https://tinyauth.dein.server
      - PROVIDERS_POCKETID_CLIENT_ID=deine-client-id
      - PROVIDERS_POCKETID_CLIENT_SECRET=dein-client-secret
      - PROVIDERS_POCKETID_AUTH_URL=https://pocket.dein.server/authorize
      - PROVIDERS_POCKETID_TOKEN_URL=https://pocket.dein.server/api/oidc/token
      - PROVIDERS_POCKETID_USER_INFO_URL=https://pocket.dein.server/api/oidc/userinfo
      - PROVIDERS_POCKETID_REDIRECT_URL=https://tinyauth.dein.server/api/oauth/callback/pocketid
      - PROVIDERS_POCKETID_SCOPES=openid email profile groups
      - PROVIDERS_POCKETID_NAME=Pocket ID
    volumes:
      - ./data:/data
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.tinyauth.entrypoints=websecure"
      - "traefik.http.routers.tinyauth.rule=Host(`tinyauth.dein.server`)"
      - "traefik.http.routers.tinyauth.tls=true"
      - "traefik.http.routers.tinyauth.tls.certresolver=cloudflare"
      - "traefik.http.routers.tinyauth.service=tinyauth"
      - "traefik.http.services.tinyauth.loadbalancer.server.port=3000"
      - "traefik.docker.network=frontend"
      - "traefik.http.middlewares.tinyauth.forwardauth.address=http://tinyauth:3000/api/auth/traefik"
    networks:
      - frontend
    restart: unless-stopped
networks:
  frontend:
    external: true

Hier muss einiges angepasst werden: APP_URL, alle PROVIDERS_POCKETID_* Variablen und der Traefik Host.

Ihr müsst natürlich den OAuth Client in Pocket ID erstellen. Wichtig ist, dass die Callback-URL exakt so eingetragen wird:

https://tinyauth.dein.server/api/oauth/callback/pocketid

5. Container starten

Starte den Container mit:

docker compose up -d

6. Middleware benutzen

Um Tinyauth nun beispielsweise vor Traefik als Middleware zu verwenden, müssen wir folgendes Label zur Traefik-Konfiguration hinzufügen:

- "traefik.http.routers.traefik.middlewares=tinyauth"

Anschließend starten wir Traefik neu – und ab sofort ist das Traefik-Dashboard durch Tinyauth abgesichert.

Dieses Label lässt sich natürlich ganz einfach an jeden über Traefik exponierten Dienst anhängen und verpasst dem Dienst eine zusätzliche Sicherheitsebene – besonders dann sinnvoll, wenn der Dienst von Haus aus keine eigene Authentifizierung mitbringt.


7. Von v3 auf v4 upgraden

Falls ihr noch eine ältere Tinyauth-Version (v3.x) laufen habt, gibt es einige Breaking Changes zu beachten. Hier zeige ich euch, wie ihr das Upgrade sauber durchführt.

Was hat sich geändert?

Tinyauth v4 bringt einige wichtige Neuerungen:

  • SQLite-Datenbank: Sessions werden jetzt persistent gespeichert
  • Mehrere OAuth-Provider: Nicht mehr nur ein Generic-Provider
  • Neue Umgebungsvariablen: Die alten GENERIC_* Variablen sind deprecated
  • Light Mode: Endlich auch ein helles Theme
  • Health Check Command: Besseres Monitoring

Alte Konfiguration (v3)

So sah die alte Konfiguration aus:

services:
  tinyauth:
    image: ghcr.io/steveiliop56/tinyauth:latest  # oder 11notes/tinyauth:3.x
    environment:
      - SECRET=mein-secret-key
      - APP_URL=https://tinyauth.dein.server
      - DISABLE_CONTINUE=true
      - GENERIC_CLIENT_ID=meine-client-id
      - GENERIC_CLIENT_SECRET=mein-client-secret
      - GENERIC_AUTH_URL=https://pocket.dein.server/authorize
      - GENERIC_TOKEN_URL=https://pocket.dein.server/api/oidc/token
      - GENERIC_USER_URL=https://pocket.dein.server/api/oidc/userinfo
      - GENERIC_SCOPES=openid, profile, email
      - GENERIC_NAME=PocketID

Neue Konfiguration (v4)

Und so sieht die neue Konfiguration aus:

services:
  tinyauth:
    image: ghcr.io/steveiliop56/tinyauth:v4
    environment:
      - APP_URL=https://tinyauth.dein.server
      - PROVIDERS_POCKETID_CLIENT_ID=meine-client-id
      - PROVIDERS_POCKETID_CLIENT_SECRET=mein-client-secret
      - PROVIDERS_POCKETID_AUTH_URL=https://pocket.dein.server/authorize
      - PROVIDERS_POCKETID_TOKEN_URL=https://pocket.dein.server/api/oidc/token
      - PROVIDERS_POCKETID_USER_INFO_URL=https://pocket.dein.server/api/oidc/userinfo
      - PROVIDERS_POCKETID_REDIRECT_URL=https://tinyauth.dein.server/api/oauth/callback/pocketid
      - PROVIDERS_POCKETID_SCOPES=openid email profile groups
      - PROVIDERS_POCKETID_NAME=Pocket ID
    volumes:
      - ./data:/data  # NEU: Für die SQLite-Datenbank

Migration Schritt für Schritt

1. Backup erstellen

cd /opt/containers/tinyauth
cp docker-compose.yml docker-compose.yml.bak

2. Data-Verzeichnis erstellen

Ab v4 speichert Tinyauth Sessions in einer SQLite-Datenbank:

mkdir -p /opt/containers/tinyauth/data

3. Umgebungsvariablen anpassen

Die wichtigsten Änderungen:

Alt (v3)Neu (v4)
SECRETNicht mehr nötig
DISABLE_CONTINUENicht mehr nötig
GENERIC_CLIENT_IDPROVIDERS_POCKETID_CLIENT_ID
GENERIC_CLIENT_SECRETPROVIDERS_POCKETID_CLIENT_SECRET
GENERIC_AUTH_URLPROVIDERS_POCKETID_AUTH_URL
GENERIC_TOKEN_URLPROVIDERS_POCKETID_TOKEN_URL
GENERIC_USER_URLPROVIDERS_POCKETID_USER_INFO_URL
GENERIC_SCOPESPROVIDERS_POCKETID_SCOPES
GENERIC_NAMEPROVIDERS_POCKETID_NAME
-PROVIDERS_POCKETID_REDIRECT_URL (NEU!)

Wichtig: Beachtet das _INFO_ in PROVIDERS_POCKETID_USER_INFO_URL – das wurde in v4 hinzugefügt!

4. Callback-URL in Pocket ID anpassen

Die Callback-URL hat sich geändert! Aktualisiert sie in eurem Pocket ID OAuth Client:

Alt: https://tinyauth.dein.server/api/oauth/callback
Neu: https://tinyauth.dein.server/api/oauth/callback/pocketid

Der letzte Teil (pocketid) entspricht dem Provider-Namen in Kleinbuchstaben.

5. Container aktualisieren

cd /opt/containers/tinyauth

# Alten Container stoppen
docker compose down

# Neues Image pullen
docker compose pull

# Mit neuer Config starten
docker compose up -d

6. Logs prüfen

docker logs tinyauth --tail 50

Ihr solltet keine Fehler sehen und die Meldung, dass die SQLite-Datenbank initialisiert wurde.

Mehrere OAuth-Provider (Bonus)

Der große Vorteil von v4: Ihr könnt jetzt mehrere OAuth-Provider gleichzeitig nutzen! Zum Beispiel Pocket ID und GitHub:

environment:
  # Pocket ID
  - PROVIDERS_POCKETID_CLIENT_ID=xxx
  - PROVIDERS_POCKETID_CLIENT_SECRET=xxx
  # ... weitere Pocket ID Einstellungen
  
  # GitHub (Client ID und Secret reichen!)
  - PROVIDERS_GITHUB_CLIENT_ID=xxx
  - PROVIDERS_GITHUB_CLIENT_SECRET=xxx

Bei google und github als Provider-Namen werden die URLs automatisch ausgefüllt – ihr braucht nur Client ID und Secret.


Quellen