Umgebungsvariablen
Alle Env-Vars, die OSSTBlok liest, thematisch gruppiert. Pflicht-Vars werden beim Start geprüft — der Prozess crasht laut statt mit schlechten Defaults weiterzulaufen.
Core — Pflicht beim Start
Werden in src/index.ts beim Start geprüft und werfen wenn sie fehlen. Niemals ohne sie produktiv gehen.
DATABASE_URLPflichtPostgreSQL-Connection-String. Von api und storage gelesen.
postgres://cms:cms@postgres:5432/cmsBETTER_AUTH_SECRETPflichtMindestens 32 Zeichen. Signiert Session-Cookies und hashiert Access-Tokens at-rest. Rotation invalidiert alle Tokens und Sessions.
openssl rand -hex 32STORAGE_SECRETPflichtMindestens 32 Zeichen. Gemeinsames HMAC-Secret zwischen api (stellt Upload-Tokens aus) und storage (verifiziert sie). Muss auf beiden Services identisch sein.
openssl rand -hex 32S3_ENDPOINTPflichtS3-kompatibler Endpunkt, gegen den der Storage-Service spricht.
http://minio:9000S3_ACCESS_KEYPflichtS3-Access-Key-ID für den Asset-Bucket.
S3_SECRET_KEYPflichtS3-Secret-Access-Key für den Asset-Bucket.
S3_BUCKETPflichtBucket, der die Asset-Blobs hält. Keys haben die Form spaces/<id>/assets/<n>/<filename>.
cmsURLs & Netzwerk
PUBLIC_URLOptionalDefault: http://localhost:8080Basis-URL der Installation. Landet in Better-Auths Trusted-Origins, OIDC-Redirect-URIs, Webhook-Payloads und Asset-URLs. In Produktion auf den externen HTTPS-Hostnamen setzen.
https://cms.example.comPUBLIC_HOSTOptionalDefault: localhostReiner Hostname (ohne Schema, ohne Port). Wird in der Caddyfile und als OIDC-RP-ID verwendet.
cms.example.comBETTER_AUTH_URLOptionalÜberschreibt Better-Auths Callback-URL. Default ist PUBLIC_URL — nur setzen, wenn der Callback-Origin vom Public-Frontend-Origin abweicht.
PORTOptionalListen-Port des Services. Defaults pro Service: api 3001, storage 3002, admin 3000.
HOSTOptionalDefault: 0.0.0.0Bind-Adresse des Services. In Containern auf 0.0.0.0 lassen; für lokale Binds auf 127.0.0.1 setzen.
PROXY_PORTOptionalDefault: 8080Listen-Port des Caddy-Reverse-Proxys.
API_UPSTREAMOptionalDefault: api:3001Caddyfile-Upstream-Ziel für /api/*-Routen.
ADMIN_UPSTREAMOptionalDefault: admin:3000Caddyfile-Upstream-Ziel für / (Admin-UI).
STORAGE_UPSTREAMOptionalDefault: storage:3002Caddyfile-Upstream-Ziel für /storage/*-Routen.
INTERNAL_STORAGE_URLOptionalDefault: http://localhost:3002URL, über die die api den storage für Privacy-Lookups anspricht. In Docker auf http://storage:3002 setzen.
API_URLOptionalDefault: http://api:3001URL, über die der storage die api für Privacy-Cross-Checks anspricht.
TRUSTED_ORIGINS_EXTRAOptionalKomma-separierte Liste weiterer CORS-Origins neben PUBLIC_URL. Hier Staging- oder eigene Preview-Hostnamen eintragen.
https://preview.example.com,https://stage.example.comAuth, Sessions, OIDC
Wird OIDC_ISSUER_URL gesetzt, wechselt die Installation in den OIDC-only-Modus — Email+Passwort-Login wird automatisch deaktiviert.
OIDC_ISSUER_URLOptionalDiscovery-URL des OIDC-Providers. Vorhandensein schaltet OIDC-only-Modus ein.
https://auth.example.com/realms/mainOIDC_CLIENT_IDOptionalOIDC-Client-ID. Pflicht, wenn OIDC_ISSUER_URL gesetzt ist.
osstblokOIDC_CLIENT_SECRETOptionalOIDC-Client-Secret. Pflicht, wenn OIDC_ISSUER_URL gesetzt ist.
OIDC_PROVIDER_IDOptionalDefault: oidcInterner Identifier des Providers. Erscheint in Better-Auths Account-Tabelle.
OIDC_DISPLAY_NAMEOptionalDefault: Single Sign-OnBeschriftung des SSO-Buttons auf der Login-Seite.
OIDC_SCOPESOptionalDefault: openid profile emailKomma- oder leerzeichensepariert angefragte OIDC-Scopes.
OIDC_TRUST_EMAILOptionalAuf 'true' setzen, um der Email-Claim des IdP zu vertrauen und OIDC- + Email-Accounts mit übereinstimmender verifizierter Email zu mergen. Opt-in — standardmässig aus.
EMAIL_VERIFICATIONOptionalAuf 'off' setzen, um Email-Verifikation im Signup zu überspringen. Nur für Dev — in Produktion an lassen.
DISABLE_SIGNUPOptionalAuf 'true' setzen, um Email-Signup komplett zu deaktivieren. OIDC-Login bleibt aktiv.
SIGNUP_ALLOWED_DOMAINSOptionalKomma-separierte Liste erlaubter Signup-Email-Domänen. Leer = alle Domänen erlaubt.
example.com,acme.orgMAX_SPACES_PER_USEROptionalDefault: 0Maximale Anzahl Spaces pro User. 0 = unbegrenzt.
Storage & Image-Pipeline
S3_REGIONOptionalDefault: us-east-1S3-Region-Name. Für echtes AWS S3 die tatsächliche Region eintragen; für Minio beliebig.
MAX_UPLOAD_BYTESOptionalDefault: 52428800Maximale Upload-Grösse in Bytes. Default 50 MB.
ALLOWED_CONTENT_TYPESOptionalKomma-separierte Liste erlaubter Upload-MIME-Typen. Leer = eingebaute Default-Liste (Bilder, PDF, Video, Audio, Fonts).
ALLOW_AVIFOptionalAuf '1' setzen, um AVIF-Output in der Image-Pipeline zu aktivieren. Default aus, weil das Encoding langsam ist.
TRANSFORM_CONCURRENCYOptionalDefault: 4Parallele Image-Transform-Jobs pro Storage-Prozess. Auf Many-Core-Maschinen erhöhen; auf speicher-knappen Hosts senken.
PRIVACY_CACHE_TTL_SECOptionalDefault: 300Wie lange (Sekunden) der Storage-Service Privacy-Flag-Lookups aus der api cached, bevor er neu nachfragt.
STORAGE_RATE_LIMIT_PER_MINOptionalDefault: 500Request-Budget pro IP und Minute für den Storage-Service.
Cache & CDN
REDIS_URLOptionalRedis-Connection-URL. Leer → Cache-Client ist stiller No-Op (kein try/catch, keine Fehler, nur langsamer). Gesetzt → CDN-Responses und Link-Maps werden kurzlebig gecacht.
redis://redis:6379Outbound-Fetches & SSRF-Guard
Jeder fetch() mit user-beeinflusster URL läuft durch assertSafeOutboundUrl. Diese Knobs steuern was erlaubt ist.
OUTBOUND_ALLOW_LOOPBACKOptionalDefault: 0Escape-Hatch des SSRF-Guards. In Tests, die gegen einen lokalen Receiver fetchen, auf '1' setzen — niemals über NODE_ENV gaten.
IMPORT_MAX_ASSET_BYTESOptionalDefault: 52428800Maximale Byte-Grösse für einen einzelnen Asset-Download während eines Storyblok-Imports.
ASSET_FROM_URL_MAX_BYTESOptionalMaximale Grösse für POST /v1/spaces/:id/assets/from_url-Downloads. Default ist IMPORT_MAX_ASSET_BYTES.
MCP
MCP_TOOL_CALL_LIMITOptionalDefault: 200Maximale MCP-Tool-Calls im Sliding-Window (pro Token).
OSSTBLOK_MCP_DEBUGOptionalAuf 'true' setzen für ausführliches MCP-Request/Response-Logging. In Produktion nicht an lassen — Payloads können Content enthalten.
Testing & Dev-Tools
DATABASE_URL_TESTOptionalDefault: postgres://cms:cms@localhost:5433/cms_testConnection-String ausschliesslich während bun test. Drizzle läuft gegen diese DB — echte Daten bleiben unberührt.
NODE_ENVOptionalAuf 'production' setzen, um OIDC-Validation zu härten und SSRF-Warnungen bei erlaubtem Loopback zu emittieren. Kein Config-Switch — keine Business-Logik daran hängen.
PREVIEW_URLOptionalDefault: http://localhost:3000Default-Ziel für den Preview-Redirect-Helper des Admins. Auf Frontend-Demo- / Docs-Site setzen.
SMOKE_HOSTOptionalLAN-IP für ./scripts/smoke-test.sh. Wird standardmässig per 'hostname -I' ermittelt — nur überschreiben, wenn das falsche Interface erkannt wird.
Infrastruktur-Defaults
Sitzen in docker-compose.yml und konfigurieren die Backing-Container, nicht den App-Code direkt. Änderungen heißt den entsprechenden Container neu bauen / recreaten.
POSTGRES_USER / POSTGRES_PASSWORD / POSTGRES_DBOptionalDefault: cms / cms / cmsCredentials und DB-Name des Postgres-Containers. DATABASE_URL muss dazu passen.
MINIO_ROOT_USER / MINIO_ROOT_PASSWORDOptionalDefault: minioadmin / minioadminMinio-Admin-Credentials. In Produktion beide ersetzen — Minio bootet mit genau diesen Default-Werten.
NUXT_PUBLIC_API_BASEOptionalClient-seitige API-Basis-URL im Admin-UI. Leer lassen für einen relativen Pfad (same-origin über den Proxy).