Webseiten migrieren: Ordner kopieren, fertig
Was bei datenbankbasierten Systemen ein mehrstufiger Prozess mit Fehlerquellen ist, reduziert sich beim CMF auf einen Kopiervorgang. Alles ist eine Datei – also ist Migration nur Dateien verschieben. Kein Spezialwissen nötig, kein Risiko für Datenverlust.
Migration in 3 Schritten
Kopieren
Projektordner per FTP, SCP oder Git auf den neuen Server übertragen. Alle Dateien und Ordner – das ist die komplette Webseite.
URL anpassen
In config/site.json die baseUrl auf die neue Domain ändern. Oder im Backend unter Einstellungen.
Sitemap generieren
Im Backend unter Einstellungen oder per API ?a=sitemap_generate. Die Sitemap enthält dann die neuen URLs.
Fertig. Keine Datenbank-Migration, keine Plugin-Kompatibilität prüfen, keine Theme-Anpassung. Die Webseite sieht auf dem neuen Server exakt gleich aus wie auf dem alten.
Vier Wege zum Backup
Backend-Export
Im Backend unter Einstellungen → Export. Per Checkboxen wählen was enthalten sein soll: Header, Footer, Seiten, Medien.
Ergebnis: cmf-backup-YYYY-MM-DD.zip – eine Datei, alles drin. Der einfachste Weg für Nicht-Techniker.
API-Export
GET ?a=site_export liefert die komplette Webseite als JSON: Site-Konfiguration, Styles, Header, Footer, Custom CSS und alle Seiten.
Ideal für automatisierte Backups per Cron-Job oder n8n-Workflow. Ein Request, ein JSON-Objekt.
Ordner kopieren
Den gesamten Projektordner per FTP, SCP oder rsync sichern. Enthält alles: Code, Inhalte, Medien, Konfiguration.
Kein separater Datenbank-Dump nötig. Was auf dem Server liegt, ist das komplette Backup.
Git
Da alle Inhalte JSON-Dateien sind, funktioniert Git-Versionierung für den gesamten Content. Jede Änderung ein Commit, vollständige Historie, Rollback jederzeit möglich.
Auch Diffs sind lesbar – man sieht genau, welcher Block sich geändert hat.
Was gesichert werden muss – und was nicht
Kritisch (Inhalte)
- content/pages.json – Seitenindex
- content/pages/ – alle Seiteninhalte
- content/blog.json – Blogindex
- content/blog/ – alle Blogbeiträge
- content/globals/ – Header + Footer
- public/media/ – alle Uploads
Wichtig (Konfiguration)
- config/site.json – Name, Sprache, URL
- config/styles.json – Design-Tokens
- config/users.json – Benutzer + Token-Hashes
- public/assets/css/custom.css – eigene Klassen
Regenerierbar
- theme.css – wird aus styles.json generiert
- sitemap.xml – wird aus Seitenindex generiert
- robots.txt – wird mit Sitemap generiert
- login_attempts.json – temporäre Daten
Tipp: Diese Dateien werden beim Speichern im Backend oder per API automatisch neu erzeugt.
Migrations-Szenarien
Hoster wechseln
Ordner per FTP zum neuen Hoster kopieren. baseUrl in site.json ändern. DNS auf den neuen Server zeigen lassen. Sitemap neu generieren.
Die Webseite funktioniert sofort – kein Setup-Wizard, keine Datenbank anlegen, keine PHP-Extensions prüfen (ab PHP 8.1 reicht alles).
Staging-Umgebung
Ordner in ein Unterverzeichnis kopieren oder auf eine Subdomain legen. Eigene baseUrl setzen. Fertig – eine identische Testumgebung.
Änderungen auf Staging testen, dann per site_export / site_import auf Production übertragen. Oder einfach die geänderten JSON-Dateien kopieren.
Vorlagen verteilen
Eine fertige Webseite als ZIP-Vorlage verteilen. Jeder Empfänger entpackt, ändert baseUrl und Benutzer, und hat eine funktionierende Seite.
Ideal für Agenturen die mehrere Kunden mit dem gleichen Grundlayout bedienen – oder für CMF-Installationen die als Startpunkt dienen sollen.
Der Vergleich
- Datenbank exportieren (phpMyAdmin)
- Dateien per FTP herunterladen
- Auf neuem Server Datenbank anlegen
- Datenbank importieren
- wp-config.php anpassen
- URLs in serialisierten Daten ersetzen (Search-Replace-Tool)
- Permalinks neu speichern
- Plugins prüfen und ggf. neu aktivieren
- Theme-Einstellungen prüfen
- Cache leeren
- Ordner kopieren
- baseUrl in site.json ändern
- Sitemap generieren
Fertig. Gleiche Webseite, neuer Server.
Automatisierte Migration per API
Export (Quelle)
GET /api.php?a=site_export
Authorization: Bearer TOKEN_QUELLELiefert ein JSON-Objekt mit: site, styles, header, footer, custom_css und pages (Array mit Index + Inhalt jeder Seite).
Dieses JSON ist die komplette Webseite – ohne Medien. Medien müssen separat per media aufgelistet und übertragen werden.
Import (Ziel)
POST /api.php?a=site_import
Authorization: Bearer TOKEN_ZIEL
Content-Type: application/json
{ komplettes Export-JSON }Alle mitgesendeten Felder werden überschrieben. Felder die fehlen bleiben unverändert. Nichts wird gelöscht.
Vorhandene Seiten werden aktualisiert (gleiche ID), neue werden erstellt. Ideal für Synchronisation zwischen Staging und Production.