Skip to content

Environment ​

Umgebungsvariablen enthalten nur, was sich je Umgebung unterscheidet. Alles Projektfeste gehört in project.config.ts.

Das Schema wird über Astros astro:env deklariert und ist damit typisiert. Fehlt eine Pflichtvariable oder hat sie einen unzulässigen Wert, scheitert der Build.

Variablen ​

VariableWerteVorgabeZweck
PUBLIC_ENVIRONMENTproduction · preview · developmentdevelopmentSteuert Indexierbarkeit und das Laden von GTM
PUBLIC_TURNSTILE_SITE_KEYZeichenkette—Nur nötig bei forms.captcha: 'turnstile'

.env.example ist die Vorlage und enthält keine echten Werte. Eine lokale .env wird nicht versioniert.

Die Grenze zwischen öffentlich und geheim ​

Präfix PUBLIC_ bedeutet öffentlich

Jede Variable mit dem Präfix PUBLIC_ landet im Browser-Bundle und ist für jeden lesbar. Ein Geheimnis darf dieses Präfix niemals tragen.

Der Turnstile-Sitekey ist per Design öffentlich — er identifiziert das Widget. Der zugehörige Secret Key wird ausschließlich serverseitig zur Prüfung verwendet und liegt in der Konfiguration des Formular-Handlers auf dem Server, niemals im Repository.

Damit ergeben sich drei Orte für Werte:

OrtInhalt
project.config.tsProjektfeste, öffentliche Werte — versioniert
.env bzw. GitHub VariablesUmgebungsabhängige, öffentliche Werte
GitHub Secrets und serverseitige KonfigurationGeheimnisse — niemals im Repository

Der Formular-Handler hat sein eigenes Schema ​

KT_FORMS_* gehört nicht hierher. Diese Variablen liest der PHP-Handler auf dem Zielsystem zur Laufzeit; sie stehen in keiner .env des Builds und in keinem astro:env-Schema. Sie kämen dort auch zu spät — der Handler läuft, wenn längst gebaut ist.

Die vollständige Liste steht bei ihm: Standalone-PHP → Konfigurieren.

Die einzige Verbindung zwischen beiden Welten ist Turnstile: PUBLIC_TURNSTILE_SITE_KEY im Build, KT_FORMS_TURNSTILE_SECRET beim Handler. Zwei Werte desselben Widgets, mit gegensätzlichen Anforderungen an ihre Sichtbarkeit.

Verhalten je Umgebung ​

In production prüft der Build zusätzlich, ob die Konfiguration noch Platzhalter enthält — etwa eine site.url auf example.de — und ob ein konfiguriertes Captcha tatsächlich einen Sitekey hat. Beides bricht den Build ab.

In development und preview greifen diese Regeln nicht: Ein noch nicht fertig initialisiertes Projekt soll lokal baubar bleiben.

Nur production ist indexierbar

Jede andere Umgebung liefert auf allen Seiten noindex, nofollow und ein Disallow: / in der robots.txt aus. Ein Produktions-Deployment muss die Variable setzen — siehe Indexierung.