Skip to content

Configuration

Everything is an environment variable. .env.example has the same list with comments.

Variable Default Meaning
PUBLIC_URL derived from the request The address clients reach freundebuch at (OAuth issuer, links in notifications). Set it behind a reverse proxy.
DATA_DIR /data Where the database (freundebuch.db) and the generated secret live. Mount a volume here.
PORT 3000 Port the server listens on.
TZ Europe/Berlin Birthdays and "today" are computed in this IANA time zone.
FREUNDEBUCH_SECRET generated into ${DATA_DIR}/secret Signs OAuth tokens and sign-in cookies; at least 32 bytes (openssl rand -hex 32). Changing it signs out every browser and every connected Claude.
FREUNDEBUCH_OIDC_ISSUER none, required OIDC issuer URL (authentik).
FREUNDEBUCH_OIDC_CLIENT_ID none, required Client ID.
FREUNDEBUCH_OIDC_CLIENT_SECRET none, required Client secret.
FREUNDEBUCH_OIDC_ALLOW * Optional extra restriction, comma-separated: addresses or @domain (verified email). By default authentik alone decides who gets in.
FREUNDEBUCH_NOTIFY_AT 08:00 Time of day (HH:MM, TZ) the daily reminders go out.
FREUNDEBUCH_TRUST_PROXY off Set to 1 behind a reverse proxy that sets X-Forwarded-For/-Proto/-Host. Without it those headers are ignored and every client shares one failed-sign-in bucket.
FREUNDEBUCH_RATE_LIMIT 60 Failed sign-ins per minute and client IP; 0 turns the limit off.
FREUNDEBUCH_LOG_LEVEL info error, warn, info, debug or silent.