Erscheinungsbild
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
| Variable | Werte | Vorgabe | Zweck |
|---|---|---|---|
PUBLIC_ENVIRONMENT | production · preview · development | development | Steuert Indexierbarkeit und das Laden von GTM (M5) |
PUBLIC_TURNSTILE_SITE_KEY | Zeichenkette | — | 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:
| Ort | Inhalt |
|---|---|
project.config.ts | Projektfeste, öffentliche Werte — versioniert |
.env bzw. GitHub Variables | Umgebungsabhängige, öffentliche Werte |
| GitHub Secrets und serverseitige Konfiguration | Geheimnisse — niemals im Repository |
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.