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-2025 | Initialer Release |
| 08-01-2026 | Upgrade 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) |
|---|---|
SECRET | Nicht mehr nötig |
DISABLE_CONTINUE | Nicht mehr nötig |
GENERIC_CLIENT_ID | PROVIDERS_POCKETID_CLIENT_ID |
GENERIC_CLIENT_SECRET | PROVIDERS_POCKETID_CLIENT_SECRET |
GENERIC_AUTH_URL | PROVIDERS_POCKETID_AUTH_URL |
GENERIC_TOKEN_URL | PROVIDERS_POCKETID_TOKEN_URL |
GENERIC_USER_URL | PROVIDERS_POCKETID_USER_INFO_URL |
GENERIC_SCOPES | PROVIDERS_POCKETID_SCOPES |
GENERIC_NAME | PROVIDERS_POCKETID_NAME |
| - | PROVIDERS_POCKETID_REDIRECT_URL (NEU!) |
Wichtig: Beachtet das
_INFO_inPROVIDERS_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.