Zum Inhalt springen

Single → Multi migrieren

Eine bestehende Single-Mode-Website wird Eintrag in einer Multi-Mode-Registry — ohne Datenverlust und ohne dass die Single-Site offline geht. Der Wizard im Admin macht alle Schritte transaktional in einem Commit.

Voraussetzungen

  • Pro- oder Enterprise-Lizenz
  • Eine laufende Single-Mode-Installation
  • Ein leeres Config-Repo (kann der Wizard auch initialisieren)
  • Eine GitHub App, die Schreibrechte auf das bestehende Website-Repo und das Config-Repo hat

Was der Wizard tut

  1. Liest die aktuelle setzkasten.config.ts aus dem Single-Mode-Repo.
  2. Erzeugt einen websites.json-Eintrag für die bestehende Site mit allen ihren Storage-, Auth- und Editoren-Daten.
  3. Schreibt eine neue setzkasten.config.ts, die kind: 'multi' benutzt und auf das Config-Repo zeigt.
  4. Committet beides — atomar, in einem GitHub Tree-Commit.

Wizard öffnen

Im Admin: ⚙ Settings → Single → Multi migrieren. Der Wizard erkennt automatisch, dass ein Single-Mode-Setup läuft, und schlägt das Config-Repo zur Bestätigung vor.

Vorher / Nachher

setzkasten.config.ts (alt)
// vorher: setzkasten.config.ts
storage: {
  kind: 'single',
  repo: 'kunde-a/website',
  branch: 'main',
  appId: process.env.GITHUB_APP_ID!,
  installationId: process.env.GITHUB_APP_INSTALLATION_ID!,
}
setzkasten.config.ts (neu, im Standalone-Admin)
// nachher: setzkasten.config.ts (im neuen Standalone-Admin)
storage: {
  kind: 'multi',
  configRepo: 'meine-agentur/setzkasten-config',
  configBranch: 'main',
  appId: process.env.GITHUB_APP_ID!,
  installationId: process.env.GITHUB_APP_INSTALLATION_ID!,
}

Rollback

Bis der Wizard final committet, ist nichts kaputt: die Single-Site läuft mit dem bestehenden setzkasten.config.ts weiter, der Multi-Mode-Admin ist noch nicht aktiv. Schlägt der Wizard fehl, einfach den letzten Commit im Config-Repo verwerfen und erneut starten.

Markdown-Variante (manuell)

Wer das ohne Wizard machen will: die Schritt-für-Schritt-Anleitung steht im Repo unter docs/migration-single-to-multi.md und beschreibt jeden API-Call einzeln.