Konfiguration
Zwei Dinge zum Konfigurieren: die Secrets für die genutzten Dienste und deine Markendaten. Diese Seite ist die vollständige Referenz für beides.
Wo die Konfiguration liegt
Lokale Secrets liegen in apps/api/.dev.vars (gitignored). Der Scaffolder erstellt sie aus .dev.vars.example, die jede Variable auflistet, die die gewählten Module nutzen können, sodass du nur die für deine App relevanten Variablen siehst. Markendaten liegen separat in packages/ui/src/config.ts.
Hinweis
RESEND_API_KEY loggt das E-Mail-Modul und überspringt den Versand; ohne Stripe-Schlüssel bleiben die Checkout-Endpunkte inaktiv. Du kannst bauen und herumklicken, bevor du auch nur einen externen Dienst anbindest.Kernvariablen
Diese gibt es in jeder Kavel-App, egal welche Module du wählst.
- `ENVIRONMENT` Der Laufzeitmodus,
developmentoderproduction. Lokal ist erdevelopment; bereitgestellte Workers setzenproduction, was die interaktive/rpc/docs-API-Referenz deaktiviert. - `WEB_URL` Die öffentliche URL der Web-App,
http://localhost:3000in der Entwicklung. Genutzt für CORS und zum Aufbau von Links in E-Mails und Auth-Callbacks. - `API_URL` Die öffentliche URL des API-Workers,
http://localhost:8787in der Entwicklung. Die Web-App liest sie, um das Backend zu erreichen.
Modulvariablen
Jedes Modul fügt nur seine eigenen Variablen zu .dev.vars.example hinzu. Trage die für die aktivierten Module ein.
Auth
- `BETTER_AUTH_SECRET` Erforderlich. Signiert Sitzungen und Tokens. Erzeuge eines mit
openssl rand -base64 32. - `GITHUB_CLIENT_ID` und `GITHUB_CLIENT_SECRET` Optional. Aktivieren GitHub-Social-Login, erstellt in den Einstellungen deiner GitHub-OAuth-App.
- `GOOGLE_CLIENT_ID` und `GOOGLE_CLIENT_SECRET` Optional. Aktivieren Google-Social-Login, aus der Google-Cloud-Konsole.
Lass die OAuth-Paare leer, um diese Anbieter aus zu lassen. Die Anmeldung mit E-Mail und Passwort funktioniert ohne sie.
- `RESEND_API_KEY` Zum Senden erforderlich. Dein Resend-API-Schlüssel. Ohne ihn loggt das Modul die E-Mail und überspringt die Zustellung.
- `EMAIL_FROM` Die Absenderadresse, zum Beispiel
My App <noreply@myapp.com>. Die Domain muss in Resend verifiziert sein. - `CONTACT_TO` Wohin die Einsendungen des Kontaktformulars zugestellt werden.
Zahlungen
- `STRIPE_SECRET_KEY` Erforderlich. Dein geheimer Stripe-Schlüssel aus dem Stripe-Dashboard.
- `STRIPE_WEBHOOK_SECRET` Erforderlich. Verifiziert eingehende Stripe-Webhooks, angezeigt beim Registrieren deines Webhook-Endpunkts.
- `STRIPE_PRICE_ID` Der Preis, den der Checkout berechnet.
Lokal vs. Produktion
.dev.vars ist nur für die lokale Entwicklung und wird nie committet. In der Produktion teilen sich dieselben Namen in zwei Arten:
- Secrets, die sensiblen Werte (API-Schlüssel,
BETTER_AUTH_SECRET, Stripe-Schlüssel), setzt du mitwrangler secret put NAMEoder im Cloudflare-Dashboard. Sie landen nie im Repo. - Einfache Vars, die nicht sensiblen (
ENVIRONMENT,WEB_URL), liegen inwrangler.jsoncuntervars.
Warnung
.dev.vars ist nur für die lokale Entwicklung. Setze Secrets in der Produktion mit wrangler secret put NAME auf dem Worker, committe sie nie. Siehe Deployment.Markenkonfiguration
Name, Tagline, Kontaktdaten und Social-Links liegen in einem typisierten Objekt in packages/ui/src/config.ts. Marketing-Seiten, der Footer und E-Mail-Vorlagen lesen daraus, deine Marke zu aktualisieren ist also eine einzige Änderung:
Typen neu generieren
Nach dem Ändern von Worker-Bindings in wrangler.jsonc generierst du die Cloudflare-Typen neu, damit die API typsicher bleibt: