Skip to Content
3. EntwicklungReferenzUmgebungsvariablen

Umgebungsvariablen

Diese Seite erklärt die Variablen aus den .env.example-Dateien der drei Repositories. Reale Secrets werden ausschließlich in der Zielumgebung verwaltet.

App

VariableWert und Zweck
NEXT_PUBLIC_CMS_URLÖffentliche Basis-URL des Strapi-CMS, lokal beispielsweise http://localhost:1337. Sie ist Fallback für Serveranfragen und erlaubt Bilder von diesem Origin. Der Wert ist im Browser sichtbar und kein Secret.
NEXT_PUBLIC_INFO_CATEGORY_DOCUMENT_IDStrapi-documentId der veröffentlichten Info-Kategorie. Die App blendet diese Kategorie aus dem Hauptmenü aus und öffnet sie über Info; dort hängt sie die generierte Story mit Open-Source-Lizenzen an. Für eine eigene CMS-Instanz muss die ID zur importierten oder neu angelegten Kategorie passen.
CMS_URLOptionale interne CMS-Adresse für den serverseitigen Same-Origin-Proxy, etwa ein privater Containername. Setzen, wenn der App-Server Strapi anders erreicht als der Browser; sonst wird NEXT_PUBLIC_CMS_URL verwendet.
CMS_MEDIA_URLZusätzlicher öffentlicher Origin, von dem Next.js optimierte Bilder laden darf, wenn Medien nicht über NEXT_PUBLIC_CMS_URL ausgeliefert werden.
CMS_ADMIN_ORIGINÖffentlicher Origin des Strapi-Adminbereichs. Wird nur benötigt, wenn er für die geschützte Preview von der CMS-URL abweicht.
CMS_PREVIEW_API_TOKENServerseitiges Strapi-Lesetoken für Entwürfe. Nur bei aktivierter Vorschau setzen, minimal berechtigen und niemals mit NEXT_PUBLIC_ veröffentlichen.
PREVIEW_SECRETLanges zufälliges Secret für den Preview-Handschlag. Muss exakt dem PREVIEW_SECRET des zugehörigen CMS entsprechen.

NEXT_PUBLIC_*-Werte werden beim App-Build eingebettet. Eine Änderung erfordert daher einen neuen Build der WebApp. CMS_URL, Token und Preview-Secret werden serverseitig ausgewertet.

CMS

Strapi-Laufzeit und Secrets

VariableWert und Zweck
HOSTNetzwerkadresse, an die sich Strapi bindet. 0.0.0.0 macht den Dienst im Container beziehungsweise lokalen Netzwerk erreichbar. Das ist keine öffentliche URL.
PORTInterner HTTP-Port des CMS, standardmäßig 1337. Reverse-Proxy und Healthcheck müssen auf diesen Port zeigen.
NODE_ENVLaufzeitmodus wie development oder production. In production gelten unter anderem die strengeren Regeln für den Medienspeicher.
APP_KEYSKommagetrennte Liste langer, zufälliger Schlüssel, mit denen Strapi Sitzungsdaten signiert. Pro Umgebung eigene Werte verwenden; ein späterer Wechsel kann bestehende Sitzungen ungültig machen.
API_TOKEN_SALTZufälliger Salt für die Speicherung von Strapi-API-Tokens. Als Secret behandeln und nach Inbetriebnahme nicht ohne geplante Token-Erneuerung austauschen.
ADMIN_JWT_SECRETSigniert die Authentifizierung des Strapi-Adminbereichs. Muss ein langer, zufälliger und umgebungsspezifischer Wert sein.
TRANSFER_TOKEN_SALTZufälliger Salt für Strapi-Transfer-Tokens, die beim Datentransfer zwischen Instanzen verwendet werden.
JWT_SECRETSigniert JWTs des Users-&-Permissions-Plugins. Nicht mit ADMIN_JWT_SECRET oder PREVIEW_SECRET gleichsetzen.
ENCRYPTION_KEYSchlüssel für verschlüsselt gespeicherte Admin-Secrets. Pro Umgebung stabil halten und nicht nachträglich ohne Migrationsplan ändern.

Content Preview

VariableWert und Zweck
PREVIEW_ENABLEDtrue aktiviert die Strapi-Vorschau für Kategorien und Stories; false schaltet die Preview-Schaltfläche ab.
PREVIEW_FRONTEND_URLÖffentliche Basis-URL der zugehörigen App, lokal beispielsweise http://localhost:3000. Strapi erzeugt daraus den Aufruf von /api/preview und erlaubt diesen Origin für die Vorschau.
PREVIEW_SECRETLanges zufälliges Secret für den Übergang vom CMS in die App-Vorschau. Muss exakt dem gleichnamigen serverseitigen Wert der App entsprechen.

MySQL-Datenbank

VariableWert und Zweck
DATABASE_CLIENTDatenbanktreiber. Die Projektkonfiguration verwendet standardmäßig mysql; postgres und sqlite werden technisch ebenfalls unterstützt.
DATABASE_URLOptionale vollständige Verbindungs-URL. Wenn sie für MySQL gesetzt ist, wird sie zusätzlich zu den Einzelwerten an den Treiber übergeben.
DATABASE_HOSTHostname oder interne Netzwerkadresse des Datenbankservers, lokal häufig 127.0.0.1.
DATABASE_PORTDatenbankport; für MySQL standardmäßig 3306.
DATABASE_NAMEName der für diese CMS-Umgebung vorgesehenen Datenbank. Staging und Produktion verwenden getrennte Datenbanken.
DATABASE_USERNAMEDatenbankbenutzer mit den für Strapi benötigten Rechten auf genau dieser Datenbank.
DATABASE_PASSWORDPasswort des Datenbankbenutzers. Server-seitiges Secret, das niemals committed wird.
DATABASE_SSLtrue aktiviert TLS für die Datenbankverbindung. Ob das nötig ist, hängt vom Datenbankanbieter und Netzwerk ab.
DATABASE_SSL_REJECT_UNAUTHORIZEDBei aktivem TLS legt true fest, dass das Serverzertifikat gültig und vertrauenswürdig sein muss. false nur verwenden, wenn die Infrastruktur dies bewusst erfordert.

Strapi unterstützt zusätzlich DATABASE_SSL_KEY, DATABASE_SSL_CERT, DATABASE_SSL_CA, DATABASE_SSL_CAPATH und DATABASE_SSL_CIPHER für eigene TLS-Zertifikate sowie DATABASE_POOL_MIN, DATABASE_POOL_MAX und DATABASE_CONNECTION_TIMEOUT zur Verbindungssteuerung. Diese erweiterten Werte sind für die Standardinstallation nicht erforderlich.

Medien und S3

VariableWert und Zweck
MEDIA_UPLOAD_PROVIDERlocal speichert Uploads im CMS-Dateisystem und ist für lokale Entwicklung gedacht. s3 speichert sie im konfigurierten Bucket. In NODE_ENV=production verweigert das CMS den Start mit local.
AWS_ACCESS_KEY_IDKennung des S3-Zugangs. Der zugehörige Account sollte nur die für Medien beziehungsweise Datenreleases benötigten Bucket-Rechte erhalten.
AWS_ACCESS_SECRETGeheimer Schlüssel zum S3-Zugang. Wird vom Strapi-Upload-Provider und vom Release-Script verwendet.
AWS_REGIONRegion des Buckets, beispielsweise eu-central-1. Sie wird auch zur Bildung der öffentlichen S3-Adresse verwendet.
AWS_BUCKETBucketname für produktive Medien. Dient als Fallback auch als Ziel für öffentliche Datenreleases, wenn DATA_RELEASE_BUCKET fehlt.
AWS_ACLOptionale Objekt-ACL wie public-read für ältere Buckets. Bei modernen Buckets mit deaktivierten ACLs leer lassen.
MEDIA_BASE_URLOptionale öffentliche Basis-URL für Medien, etwa eine CDN-Domain. Ihr Host wird zusätzlich in der Content Security Policy des Adminbereichs erlaubt.

In Produktion muss der Medienspeicher auf S3 konfiguriert sein. Das CMS verweigert dort absichtlich den Start mit lokalem Uploadspeicher.

Öffentlicher Datenimport und Datenrelease

VariableWert und Zweck
DIGEKO_DATA_LATEST_URLÖffentliche URL der zu importierenden latest.json. npm run data:import lädt darüber das aktuelle Archiv und dessen Prüfsumme.
DATA_RELEASE_BUCKETZiel-Bucket für npm run data:release. Ist der Wert leer, verwendet das Script AWS_BUCKET.
DATA_RELEASE_PREFIXOrdnerpräfix im Bucket, standardmäßig data. Darunter entstehen latest.json und releases/<version>/.
DATA_RELEASE_PUBLIC_BASE_URLÖffentliche Basis-URL des Releaseordners. Sie wird in latest.json und im Manifest verwendet und muss aus fremden Installationen erreichbar sein.
DATA_RELEASE_SOURCEFreie Quellenbezeichnung im Manifest, standardmäßig production. Sie beschreibt, aus welcher Instanz der Export erzeugt wurde.

Aufbau und Import des Datenexports →

TTS-Anbieter auswählen

VariableWert und Zweck
TTS_PROVIDERAktiver Adapter: qwen, kugelaudio oder elevenlabs. Nur die Zugangsdaten und Modelle dieses Anbieters sind für die Generierung erforderlich.
TTS_WORKER_POLL_MSAbstand in Millisekunden, in dem der Worker nach verarbeitbaren Jobs sucht; Projektstandard ist 5000.
TTS_WORKER_IDLE_LOGtrue protokolliert auch Worker-Durchläufe ohne Job. Für die normale Produktion bleibt der Wert false, um unnötige Logs zu vermeiden.
TTS_UPLOAD_PATHUnterordner des Upload-Providers für erzeugte Audiodateien, standardmäßig tts.
TTS_MEDIA_FOLDER_NAMEAnzeigename des Ordners in der Strapi Media Library. Fällt ohne eigenen Wert auf TTS_UPLOAD_PATH zurück.

Locale-spezifische Werte folgen einem einheitlichen Muster. Für en-US wird zuerst <VARIABLE>_EN_US, danach <VARIABLE>_EN und zuletzt der globale Wert ohne Suffix verwendet.

KugelAudio

Diese Variablen werden ausgewertet, wenn TTS_PROVIDER=kugelaudio gesetzt ist.

VariableWert und Zweck
KUGELAUDIO_API_KEYAPI-Key für KugelAudio und für diesen Provider verpflichtend. Ein Präfix eu- wird vom Adapter bei Bedarf für den EU-Endpunkt ausgewertet.
KUGELAUDIO_API_URLBasis-URL der API, im Projekt standardmäßig https://api.eu.kugelaudio.com.
KUGELAUDIO_TRANSPORTwebsocket oder rest. WebSocket ist Standard und notwendig, wenn KugelAudio Wort-Zeitmarken mitsenden soll.
KUGELAUDIO_MODEL_IDKennung des zu verwendenden KugelAudio-Modells, in der Beispielkonfiguration kugel-3.
KUGELAUDIO_VOICE_ID, KUGELAUDIO_VOICE_ID_DE, KUGELAUDIO_VOICE_ID_ENNumerische Voice-ID. Die suffigierten Varianten wählen je Sprache eine andere Stimme; weitere Locale-Suffixe sind möglich.
KUGELAUDIO_LANGUAGE, KUGELAUDIO_LANGUAGE_DE, KUGELAUDIO_LANGUAGE_ENOptionaler Sprachcode für die API. Ohne Override leitet der Adapter ihn aus der Inhalts-Locale ab.
KUGELAUDIO_WORD_TIMESTAMPStrue fordert beim WebSocket-Aufruf Wort-Zeitmarken für die Hervorhebung in der App an.
KUGELAUDIO_REQUIRE_TIMESTAMPStrue lässt den Job fehlschlagen, wenn zwar Audio, aber keine Wort-Zeitmarken zurückgegeben wurden.
KUGELAUDIO_NORMALIZEtrue aktiviert die Textnormalisierung des Providers vor der Synthese.
KUGELAUDIO_DEBUGtrue protokolliert technische WebSocket-Metadaten zur Fehlersuche. Im Regelbetrieb false lassen.
KUGELAUDIO_TIMEOUT_MSMaximale Laufzeit eines Provideraufrufs in Millisekunden, standardmäßig 600000.
KUGELAUDIO_SAMPLE_RATEGewünschte Sample-Rate und Grundlage der erzeugten WAV-Datei, standardmäßig 24000.
KUGELAUDIO_CHANNELSKanalanzahl der erzeugten WAV-Datei, standardmäßig 1 für Mono.
KUGELAUDIO_CFG_SCALEOptionaler numerischer Guidance-Wert des Modells. Leer lassen, um den Providerstandard zu verwenden.
KUGELAUDIO_MAX_NEW_TOKENSOptionales Tokenlimit für die Generierung. Leer bedeutet, dass kein eigener Wert an KugelAudio gesendet wird.
KUGELAUDIO_SPEEDOptionaler numerischer Geschwindigkeitsfaktor für die Sprachausgabe.

ElevenLabs

Diese Variablen werden ausgewertet, wenn TTS_PROVIDER=elevenlabs gesetzt ist.

VariableWert und Zweck
ELEVENLABS_API_KEYGeheimer API-Key und für diesen Provider verpflichtend.
ELEVENLABS_API_URLBasis-URL der API, standardmäßig https://api.elevenlabs.io.
ELEVENLABS_VOICE_ID, ELEVENLABS_VOICE_ID_DE, ELEVENLABS_VOICE_ID_ENVerpflichtende Voice-ID mit optionalen sprach- oder locale-spezifischen Overrides.
ELEVENLABS_MODEL_IDModellkennung für die Synthese, standardmäßig eleven_multilingual_v2.
ELEVENLABS_OUTPUT_FORMATPCM- oder WAV-Ausgabeformat einschließlich Sample-Rate, beispielsweise pcm_24000. Andere Formatfamilien werden abgewiesen, weil das CMS WAV-Dateien speichert.
ELEVENLABS_LANGUAGE_CODE, ELEVENLABS_LANGUAGE_CODE_DE, ELEVENLABS_LANGUAGE_CODE_ENOptionaler Sprachcode. Ohne Override wird der Sprachanteil der Inhalts-Locale verwendet.
ELEVENLABS_FORCE_ALIGNMENTtrue ruft nach der Synthese Forced Alignment auf, um Wort-Zeitmarken zu erzeugen.
ELEVENLABS_ENABLE_LOGGINGSteuert den gleichnamigen Queryparameter der ElevenLabs-API. Der Wert betrifft das providerseitige Request-Logging.
ELEVENLABS_TIMEOUT_MSMaximale Laufzeit für Synthese oder Alignment in Millisekunden, standardmäßig 600000.
ELEVENLABS_STABILITYOptionaler numerischer Stabilitätswert der Stimme. Leer verwendet den Providerstandard.
ELEVENLABS_SIMILARITY_BOOSTOptionaler numerischer Wert für die Ähnlichkeit zur gewählten Stimme.
ELEVENLABS_STYLEOptionaler numerischer Stilwert der Stimme.
ELEVENLABS_USE_SPEAKER_BOOSTOptionales true oder false für die Speaker-Boost-Option.
ELEVENLABS_SEEDOptionaler numerischer Seed, um Generierungen bei gleicher Konfiguration besser reproduzierbar zu machen.
ELEVENLABS_APPLY_TEXT_NORMALIZATIONTextnormalisierung der API, beispielsweise auto. Der Wert wird unverändert an ElevenLabs übergeben.
ELEVENLABS_APPLY_LANGUAGE_TEXT_NORMALIZATIONOptionales true oder false für die sprachspezifische Textnormalisierung.
ELEVENLABS_OPTIMIZE_STREAMING_LATENCYOptionaler numerischer API-Parameter zur Latenzoptimierung. Leer verwendet den Providerstandard.

Qwen3-TTS

Diese Variablen werden ausgewertet, wenn TTS_PROVIDER=qwen gesetzt ist.

VariableWert und Zweck
QWEN_TTS_PYTHON_BINPfad zum Python-Interpreter der vorbereiteten Qwen-Umgebung. npm install richtet diese Python-Umgebung nicht ein.
QWEN_TTS_SCRIPT_PATHPfad zum Adapter-Script, normalerweise ./scripts/qwen_tts_generate.py.
QWEN_TTS_BASE_MODEL_PATHPfad zum lokalen Qwen-Base-Modell für Voice Cloning. Die Modellgewichte sind nicht Bestandteil des Repositories.
QWEN_TTS_DEVICETorch-Gerät für die Synthese, beispielsweise cuda:0; muss zur Serverhardware passen.
QWEN_TTS_DTYPERechengenauigkeit des Modells, beispielsweise bfloat16; muss von Gerät und Installation unterstützt werden.
QWEN_TTS_ATTNAttention-Implementierung, etwa flash_attention_2 oder bei fehlendem FlashAttention eine unterstützte Alternative wie sdpa.
QWEN_TTS_MAX_NEW_TOKENSAbsolute Obergrenze der generierten Tokens, standardmäßig 2048. Kann ebenfalls je Locale überschrieben werden.
QWEN_TTS_DYNAMIC_MAX_NEW_TOKENStrue berechnet abhängig von Text- und Wortlänge eine kleinere dynamische Grenze, um Weitergenerieren nach kurzen Labels zu vermeiden.
QWEN_TTS_MIN_NEW_TOKENSUntergrenze der dynamischen Berechnung, standardmäßig 48.
QWEN_TTS_NEW_TOKENS_PER_CHARZeichenfaktor der dynamischen Tokenabschätzung, in der Beispielkonfiguration 2.2.
QWEN_TTS_NEW_TOKENS_PER_WORDWortfaktor der dynamischen Tokenabschätzung, in der Beispielkonfiguration 6.
QWEN_TTS_TRIM_TO_ALIGNMENTtrue schneidet das erzeugte Audio auf das vom Forced Aligner erkannte Sprachfenster zu.
QWEN_TTS_TRIM_PADDING_BEFOREZusätzlicher zeitlicher Rand in Sekunden vor dem Alignment-Fenster, beispielsweise 0.08.
QWEN_TTS_TRIM_PADDING_AFTERZusätzlicher zeitlicher Rand in Sekunden nach dem Alignment-Fenster, beispielsweise 0.18.
QWEN_TTS_TIMEOUT_MSMaximale Laufzeit des Python-Prozesses in Millisekunden, standardmäßig 600000.
QWEN_TTS_X_VECTOR_ONLYtrue verwendet beim Voice Cloning nur den Sprecher-Vektor. Bei false kann zusätzlich das exakte Referenztranskript berücksichtigt werden.
QWEN_TTS_REFERENCE_AUDIO_PATH, QWEN_TTS_REFERENCE_AUDIO_PATH_DE, QWEN_TTS_REFERENCE_AUDIO_PATH_ENPfad oder unterstützte URL der Referenzaufnahme für Voice Cloning. Sprachspezifische Aufnahmen sind empfohlen.
QWEN_TTS_REFERENCE_TEXT, QWEN_TTS_REFERENCE_TEXT_DE, QWEN_TTS_REFERENCE_TEXT_ENExaktes Transkript der jeweiligen Referenzaufnahme. Text und Aufnahme müssen übereinstimmen.
QWEN_TTS_MODE_DE, QWEN_TTS_MODE_ENModus pro Sprache: voice-clone verwendet das Base-Modell mit Referenz; custom-voice verwendet eine vorbereitete Modellstimme.
QWEN_TTS_CUSTOM_VOICE_MODEL_PATHPfad zum CustomVoice-Modell. Nur erforderlich, wenn mindestens eine Locale custom-voice verwendet.
QWEN_TTS_SPEAKER_ENPreset-Sprecher des CustomVoice-Modells für Englisch. Entsprechende Suffixe können für weitere Locales gesetzt werden.
QWEN_TTS_INSTRUCT_ENOptionale Stilanweisung für die englische CustomVoice-Stimme; weitere Locale-Suffixe werden analog ausgewertet.
QWEN_ALIGNER_CHECKPOINTPfad zum Qwen3-ForcedAligner. Ohne Checkpoint erzeugt der lokale Aligner keine Wort-Zeitmarken.
QWEN_ALIGNER_DEVICETorch-Gerät des Aligners, beispielsweise cuda:0.
QWEN_ALIGNER_DTYPERechengenauigkeit des Aligners, beispielsweise bfloat16.
QWEN_ALIGNER_KWARGSJSON-Objekt mit zusätzlichen Argumenten für das Laden des Aligners, beispielsweise {"device_map":"cuda:0","dtype":"bfloat16"}.

Technischen Ablauf der TTS-Pipeline ansehen →

Docs

VariableWert und Zweck
NEXT_PUBLIC_DOCS_ENVVeröffentlichungsziel production oder staging. Bei staging zeigt die Website den Entwicklungshinweis und setzt noindex, nofollow; bei production werden diese Einschränkungen nicht gesetzt. Der Wert wird beim Build eingebettet.
NEXT_PUBLIC_SITE_URLVollständige Basis-URL der gebauten Umgebung ohne Seitenpfad, lokal beispielsweise http://localhost:3000. Sie wird als kanonische Site-URL in den Metadaten verwendet und muss zur Zielumgebung passen.

Beide Docs-Variablen sind öffentlich und enthalten keine Secrets. Änderungen werden erst mit einem neuen Docs-Build wirksam.

Regeln

  • Secrets erhalten niemals das Präfix NEXT_PUBLIC_.
  • .env und .env.local werden nicht committed.
  • .env.example enthält nur Platzhalter oder unkritische lokale Defaults.
  • Preview-Secret und Ziel-URLs müssen innerhalb einer Umgebung zusammenpassen.
  • Staging und Produktion verwenden getrennte Secrets.