Files
qrcode-generator/docker-compose.yml
T
Florian Wilde c8d60d8006 Anmeldung ueber Authentik und andere OIDC-Anbieter
Anmeldefluss mit PKCE (S256), State und Nonce. Das ID-Token wird gegen den
JWKS des Anbieters geprueft — Signatur, Aussteller, Empfaenger, Ablauf und
Nonce; alles Noetige kommt aus dem Discovery-Dokument, damit die Anbindung
nicht auf Authentik festgelegt ist.

Wiedererkannt wird jemand an der Kennung des Anbieters (sub), nicht an der
E-Mail-Adresse — Adressen aendern sich. Ein bestehendes Konto mit derselben
Adresse wird verknuepft statt verdoppelt, aber nur bei bestaetigter Adresse:
sonst koennte sich beim Anbieter jemand eine fremde Adresse eintragen und
damit ein hiesiges Konto uebernehmen.

Uebernommen wird bewusst nur, wer jemand ist — plus die Instanz-Administration,
wenn OIDC_ADMIN_GROUP gesetzt ist. Gruppen und Rollen bleiben Sache dieser
Anwendung: die Gruppen im Verzeichnis bedeuten etwas anderes als die hier.

Konten aus dem Verzeichnis haben kein Passwort mehr (passwordHash ist jetzt
optional); Konto-Bereich und Passwort-Anmeldung sagen das statt an einer
leeren Pruefung zu scheitern.

Anleitung mit allen Feldern in Authentik: docs/authentik.md
2026-08-15 00:12:21 +02:00

58 lines
2.1 KiB
YAML

services:
db:
image: postgres:18-alpine
restart: unless-stopped
environment:
POSTGRES_USER: ${POSTGRES_USER:-qrcode}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?POSTGRES_PASSWORD fehlt — bitte .env aus .env.example anlegen}
POSTGRES_DB: ${POSTGRES_DB:-qrcode}
volumes:
# Ab PostgreSQL 18 liegt das Datenverzeichnis in einem Unterordner mit
# Versionsnummer — der Mountpunkt ist deshalb /var/lib/postgresql und
# nicht mehr /var/lib/postgresql/data.
- db-data:/var/lib/postgresql
healthcheck:
# Die App startet erst, wenn die Datenbank wirklich Anfragen annimmt.
test:
["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-qrcode} -d ${POSTGRES_DB:-qrcode}"]
interval: 5s
timeout: 5s
retries: 12
start_period: 10s
app:
build:
context: .
restart: unless-stopped
depends_on:
db:
condition: service_healthy
environment:
# Achtung beim Ergänzen: Compose liest die .env nur, um Platzhalter wie
# ${BASE_URL} zu ersetzen. In den Container gelangt ausschließlich, was
# hier aufgeführt ist — eine neue Variable in der .env allein bleibt
# wirkungslos.
#
# Öffentliche Adresse der App — landet in jedem dynamischen QR-Code.
BASE_URL: ${BASE_URL:-http://localhost:3000}
DATABASE_URL: ${DATABASE_URL}
# Anmeldung mit Benutzern, Gruppen und Rollen.
AUTH_ENABLED: ${AUTH_ENABLED:-false}
MAX_UPLOAD_MB: ${MAX_UPLOAD_MB:-10}
OIDC_ENABLED: ${OIDC_ENABLED:-false}
OIDC_ISSUER: ${OIDC_ISSUER:-}
OIDC_CLIENT_ID: ${OIDC_CLIENT_ID:-}
OIDC_CLIENT_SECRET: ${OIDC_CLIENT_SECRET:-}
OIDC_BUTTON_LABEL: ${OIDC_BUTTON_LABEL:-Mit Authentik anmelden}
OIDC_SCOPES: ${OIDC_SCOPES:-openid email profile}
OIDC_ONLY: ${OIDC_ONLY:-false}
OIDC_DEFAULT_ROLE: ${OIDC_DEFAULT_ROLE:-VIEWER}
OIDC_ADMIN_GROUP: ${OIDC_ADMIN_GROUP:-}
OIDC_GROUPS_CLAIM: ${OIDC_GROUPS_CLAIM:-groups}
ports:
# Direktes Port-Mapping, bewusst ohne Reverse Proxy.
- "${APP_PORT:-3000}:3000"
volumes:
db-data: