Zum Inhalt springen

Auf Cloudflare bereitstellen

Cloudflare Workers bietet eine schnelle, global verteilte Laufzeitumgebung für EmDash. Diese Anleitung zeigt, wie Sie EmDash mit D1 als Datenbank und R2 für die Medienspeicherung bereitstellen.

  • Ein Cloudflare-Konto
  • Installierte Wrangler CLI (npm install -g wrangler)
  • Bei Cloudflare authentifiziert (wrangler login)
Terminal-Fenster
wrangler d1 create emdash-db

Notieren Sie sich die database_id aus der Ausgabe.

Terminal-Fenster
wrangler r2 bucket create emdash-media

Erstellen Sie wrangler.jsonc im Stammverzeichnis Ihres Projekts:

wrangler.jsonc
{
"$schema": "node_modules/wrangler/config-schema.json",
"name": "my-emdash-site",
"compatibility_date": "2025-01-15",
"compatibility_flags": ["nodejs_compat"],
"d1_databases": [
{
"binding": "DB",
"database_name": "emdash-db",
"database_id": "your-database-id",
},
],
"r2_buckets": [
{
"binding": "MEDIA",
"bucket_name": "emdash-media",
},
],
}

Aktualisieren Sie Ihre Astro-Konfiguration, um D1 und R2 zu verwenden:

js title="astro.config.mjs"
import { defineConfig } from "astro/config";
import cloudflare from "@astrojs/cloudflare";
import emdash from "emdash/astro";
import { d1, r2 } from "@emdash-cms/cloudflare";
export default defineConfig({
output: "server",
adapter: cloudflare(),
integrations: [
emdash({
database: d1({ binding: "DB" }),
storage: r2({ binding: "MEDIA" }),
}),
],
});

Generieren und wenden Sie das Datenbankschema an.

Terminal-Fenster
npx emdash init --database ./data.db
Terminal-Fenster
wrangler d1 migrations apply emdash-db

Wenn Sie keine Migrationsdateien haben, wenden Sie das Kernschema direkt an:

Terminal-Fenster
wrangler d1 execute emdash-db --file=./node_modules/emdash/migrations/0001_core.sql

Auf Cloudflare Workers bereitstellen:

Terminal-Fenster
wrangler deploy

Ihre Seite ist jetzt live unter https://my-emdash-site.<your-subdomain>.workers.dev.

Für global verteilte Seiten aktivieren Sie die D1-Lesereplikation, um Leseanfragen an nahegelegene Replikate zu leiten, anstatt immer die primäre Datenbank zu belasten. Dies reduziert die Latenz für Besucher, die weit von der primären Region entfernt sind, erheblich.

astro.config.mjs
emdash({
database: d1({
binding: "DB",
session: "auto",
}),
storage: r2({ binding: "MEDIA" }),
}),

Sie müssen die Lesereplikation auch in der D1-Datenbank selbst im Cloudflare-Dashboard oder über die REST-API aktivieren.

Siehe Datenbankoptionen — Read Replicas für Sitzungsmodi und die Funktionsweise der lesezeichenbasierten Konsistenz.

Fügen Sie eine benutzerdefinierte Domain im Cloudflare-Dashboard hinzu:

  1. Gehen Sie zu Workers & Pages > Ihren Worker
  2. Klicken Sie auf Custom Domains > Add Custom Domain
  3. Geben Sie Ihre Domain ein und folgen Sie den DNS-Einrichtungsanweisungen

Um Medien direkt von R2 bereitzustellen (empfohlen für die Leistung):

  1. Gehen Sie im Cloudflare-Dashboard zu R2 > Ihren Bucket
  2. Klicken Sie auf Settings > Public access
  3. Aktivieren Sie den öffentlichen Zugriff und notieren Sie die öffentliche URL
  4. Aktualisieren Sie Ihre Speicherkonfiguration:
astro.config.mjs
storage: r2({
binding: "MEDIA",
publicUrl: "https://pub-xxx.r2.dev"
}),

Wenn Ihre Organisation Cloudflare Access verwendet, können Sie es anstelle von Passkeys als Ihren Authentifizierungsanbieter nutzen. Dies bietet SSO mit Ihrem bestehenden Identitätsanbieter.

astro.config.mjs
emdash({
database: d1({ binding: "DB" }),
storage: r2({ binding: "MEDIA" }),
auth: access({
teamDomain: "myteam.cloudflareaccess.com",
audience: "your-app-audience-tag",
roleMapping: {
"Admins": 50,
"Editors": 40,
},
}),
}),

Siehe den Authentifizierungsleitfaden für alle Konfigurationsoptionen.

EmDash benötigt bestimmte Secrets für die Authentifizierung und Vorschaufunktionalität.

VariableZweck
EMDASH_AUTH_SECRETSigniert Sitzungs-Cookies und Authentifizierungs-Tokens. Erforderlich für die Produktion.
EMDASH_PREVIEW_SECRETSigniert Vorschau-URLs für Entwurfsinhalte. Erforderlich für die Vorschaufunktionalität.

Generieren Sie sichere Secrets:

Terminal-Fenster
npx emdash auth secret

Setzen Sie Secrets über Wrangler:

Terminal-Fenster
wrangler secret put EMDASH_AUTH_SECRET
wrangler secret put EMDASH_PREVIEW_SECRET

Greifen Sie in Ihrer Konfiguration über import.meta.env oder die Cloudflare env-Bindung auf Umgebungsvariablen zu.

Stellen Sie einen Vorschau-Branch bereit:

Terminal-Fenster
wrangler deploy --env preview

Fügen Sie einen Environment-Abschnitt zu wrangler.jsonc hinzu:

{
"env": {
"preview": {
"d1_databases": [
{
"binding": "DB",
"database_name": "emdash-db-preview",
"database_id": "your-preview-db-id",
},
],
},
},
}

Überprüfen Sie, ob der Bindungsname in wrangler.jsonc mit Ihrer Datenbankkonfiguration übereinstimmt:

// Muss übereinstimmen mit: d1({ binding: "DB" })
"binding": "DB"

Überprüfen Sie, ob der R2-Bucket korrekt gebunden ist:

// Muss übereinstimmen mit: r2({ binding: "MEDIA" })
"binding": "MEDIA"

D1-Migrationen werden über Wrangler ausgeführt, nicht zur Laufzeit. Wenn Sie Schemafehler sehen:

  1. Überprüfen Sie, ob Migrationen angewendet wurden: wrangler d1 migrations list emdash-db
  2. Wenden Sie sie bei Bedarf erneut an: wrangler d1 migrations apply emdash-db