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.
git clone https://github.com/thosor87/setzkasten.git
cd setzkasten/templates/standalone-admin
pnpm installKonfiguration
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.
// 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).
# 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.comHosting-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-Commandpnpm build, Publish Directorydist. - 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 zuhttps://<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-Middlewareframe-ancestors in der CSP der Iframe-Antwort. Eigene Header dürfen das nicht überschreiben.