Zum Inhalt springen

Setzkasten als eigene App deployen

Im Single-Mode lebt der Admin im Astro-Projekt selbst (unter /admin). Im Multi-Mode läuft Setzkasten als eigenständige App, die mehrere Website-Repos verwaltet. Diese App ist eine kleine Astro-Site und deployt überall, wo Astro mit SSR läuft.

Template klonen

Im Repo unter templates/standalone-admin/ liegt ein fertiges Setup mit Adapter-Stub, setzkasten.config.ts und passenden Build-Scripts.

Terminal
git clone https://github.com/thosor87/setzkasten.git
cd setzkasten/templates/standalone-admin
pnpm install

Konfiguration

Der Standalone-Admin läuft immer im Multi-Mode — auch wenn er nur eine Website verwaltet. Das Config-Repo enthält die websites.json und globale Editoren-Datei.

setzkasten.config.ts
// templates/standalone-admin/setzkasten.config.ts
import { defineConfig } from '@setzkasten-cms/core'

export default defineConfig({
  storage: {
    kind: 'multi',
    configRepo: 'meine-agentur/setzkasten-config',
    configBranch: 'main',
    appId: process.env.GITHUB_APP_ID!,
    installationId: process.env.GITHUB_APP_INSTALLATION_ID!,
  },
  auth: {
    providers: ['github'],
  },
})

Environment-Variablen

Alle Secrets liegen im ENV des Hostings — nicht im Repo. Der private Key der GitHub App ist eine PKCS#8-PEM-Zeichenkette mit echten Zeilenumbrüchen (\\n in einer Zeile, oder über die UI als mehrzeiliger Wert).

ENV (Vercel/Netlify)
# Vercel / Netlify / Cloudflare Pages — Environment Variables
GITHUB_APP_ID=123456
GITHUB_APP_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n…"
GITHUB_APP_INSTALLATION_ID=111

GITHUB_CLIENT_ID=Iv23li…
GITHUB_CLIENT_SECRET=abc…

SETZKASTEN_LICENSE_EMAIL=du@example.com
SETZKASTEN_LICENSE_KEY=SK-PRO-XXXXXXXX-XXXXXXXX-XXXXXXXX

# Optional: nur diese Emails dürfen sich überhaupt einloggen
SETZKASTEN_ALLOWED_EMAILS=admin@example.com

Hosting-Plattformen

  • Vercel: @astrojs/vercel-Adapter, Region in der Nähe des Editor-Standorts wählen. Kostenloser Hobby-Plan reicht für kleine Setups.
  • Netlify: @astrojs/netlify-Adapter, Build-Command pnpm build, Publish Directory dist.
  • Cloudflare Pages: @astrojs/cloudflare-Adapter, mit Functions-Workers für die Server-Routes.

Custom Domain

Die Domain ist sichtbar in der GitHub App-Konfiguration (Callback-URL muss zu https://<deine-admin-domain>/api/setzkasten/auth/callback zeigen). Bei einem Domainwechsel die App-Settings mit-aktualisieren.

Cross-Origin-Iframe

Die Live-Preview lädt die kontrollierte Website per Iframe. Damit das auch Cross-Origin funktioniert, setzt die Preview-Middleware frame-ancestors in der CSP der Iframe-Antwort. Eigene Header dürfen das nicht überschreiben.