So optimieren Sie WordPress Multisite-Migrationen mit MU-Migration
Veröffentlicht: 2022-03-10Die Migration einer eigenständigen WordPress-Site in eine Site-Netzwerk- (oder „Multisite“)-Umgebung ist ein mühsames und kniffliges Unterfangen, das Gegenteil ist auch der Fall. Der WordPress-Importer funktioniert recht gut für kleinere, einfachere Websites, lässt aber Raum für Verbesserungen. Es exportiert Inhalte, aber keine Site-Konfigurationsdaten wie Widget- und Customizer-Konfigurationen, Plugins und Site-Einstellungen. Der Importer hat auch Probleme, eine große Menge an Inhalten zu verarbeiten. In diesem Artikel erfahren Sie, wie Sie diese Art der Migration mithilfe von MU-Migration, einem WP-CLI-Plugin, optimieren können.
Multisite verstehen
Mit einer WordPress-Multisite können Sie mehrere Websites innerhalb derselben WordPress-Installation ausführen. Es wird oft als „Multisite-Netzwerk“ bezeichnet. WordPress.com ist wahrscheinlich das größte Beispiel für ein Multisite-Netzwerk, das Tausende von Websites innerhalb derselben WordPress-Instanz betreibt.
Eine WordPress-Multisite kann für mehrere Anwendungsfälle perfekt geeignet sein, einige davon beinhalten:
Ihr Kunde hat möglicherweise mehrere Eigenschaften, und es kann sinnvoll sein, alle seine Websites in einer einzigen WordPress-Installation zu konsolidieren und eine einzige Domain gemeinsam zu nutzen, ist aber nicht darauf beschränkt.
Sobald Sie es eingerichtet haben, ist es ein einfacher und unkomplizierter Prozess, neue Websites zu erstellen und bereits im Netzwerk verfügbare Themen und Plugins zu nutzen
Ein tiefes Verständnis der Funktionsweise von Multisite würde den Rahmen dieses Artikels sprengen, aber Sie können sich die folgenden Links ansehen:
„Erstelle ein Netzwerk“, Codex, WordPress.org
„WordPress Multisite: Praktische Funktionen und Methoden“, Kevin Leary, Smashing Magazine
Die Herausforderungen verstehen
Die Unterschiede zwischen der Struktur einer einzelnen Website und einer WordPress-Multisite sind durchaus vernünftig. Bei Multisite erhält jede Subsite ihren eigenen Satz von Datenbanktabellen, mit Ausnahme der Benutzertabelle ( wp_user
), die von allen Sites gemeinsam genutzt wird. Dies funktioniert in WordPress so, dass jeder Unterwebsite-Satz von Tabellen die ID der Website zu jedem Tabellennamen hinzugefügt hat ( wp_X_posts
, wp_X_postmeta
, wp_X_options
).
Diese Datenbankstruktur selbst bringt bereits einige Komplexitäten mit sich. Wie würden Sie beispielsweise eine Subsite von einer Multisite zu einer einzelnen Installation migrieren? Natürlich können Sie die Datenbank nicht einfach exportieren und in die Einzelinstallation importieren – die Tabellennamen sind unterschiedlich! Sie müssten entweder die Tabellen in der exportierten .sql
-Datei umbenennen oder eine ALTER TABLE SQL
-Abfrage verwenden, um die Tabellen nach dem Importieren umzubenennen. Dasselbe gilt für den umgekehrten Weg: Wenn Sie eine einzelne Site in Multisite importieren, müssen auch die Tabellenpräfixe aktualisiert werden. Klingt nach zu viel Arbeit, oder?
Die Benutzertabelle in Multisite ist global, was bedeutet, dass Sie die Benutzertabelle nicht einfach von Ihrer einzelnen Site importieren können, da dies die globale Multisite-Benutzertabelle vollständig überschreiben würde. Wenn Sie umgekehrt vorgehen, eine Unterwebsite aus WordPress extrahieren und in eine einzelne Website importieren, würden Sie alle Benutzer des Netzwerks übertragen, selbst diejenigen, die nicht zu der zu migrierenden Unterwebsite gehören. Wenn Sie eine Subsite von einer Multisite zu einer anderen migrieren, ist das Exportieren der Tabelle des Benutzers außerdem völlig ausgeschlossen.
Die beste Lösung besteht darin, die Benutzer separat zu exportieren, aber es führt zu einem weiteren Problem: Wenn die Benutzer importiert werden, erhalten sie unterschiedliche IDs. Um dieses Problem zu lösen, ist es notwendig, die IDs des neuen Benutzers im Auge zu behalten, eine Zuordnungstabelle zu erstellen und die Zuordnungstabelle zu verwenden, um alle Verweise auf Benutzer-IDs in WordPress zu aktualisieren! Wieder zu viel Arbeit, oder?
Dies sind nur zwei Beispiele für die Herausforderungen, denen man bei der Bewältigung solcher Migrationen begegnen kann. Es gibt noch ein paar andere kleinere Dinge, die erledigt werden müssen, wie das Verschieben des Upload-Ordners an den richtigen Ort, das Migrieren der Datensätze in der Datenbank, die auf die Site-ID verweisen usw.
Treffen Sie MU-Migration
MU-Migration ist ein WP-CLI-Plugin, das ich während der Arbeit an mehreren Client-Migrationen erstellt und später von 10up als Open Source bereitgestellt habe. Es wurde konzipiert, um den Prozess des Verschiebens von Websites von einzelnen WordPress-Websites zu einer Multisite-Instanz (oder umgekehrt) zu optimieren. Es exportiert im Wesentlichen alles in ein ZIP-Paket, das dann zum Importieren der Site in die gewünschte WordPress-Installation verwendet werden kann.
Es funktioniert, indem es den Inhalt der Website und optional Theme, Plugins und Upload-Ordner in ein Zip-Paket exportiert, das einfach in eine andere WordPress-Installation importiert werden kann. Bei der Nutzung von MU-Migration müssen Sie sich nicht um die zugrunde liegenden technischen Details der Migration kümmern. Es kümmert sich einfach um all das für Sie, sodass Sie sich auf das Wesentliche konzentrieren können: Ihren Kunden eine erfolgreiche Migration zu liefern.
Installation von WP-CLI und MU-Migration
Um MU-Migration verwenden zu können, müssen Sie zunächst WP-CLI, das offizielle WordPress-Befehlszeilentool, installieren. Die Installation von WP-CLI ist so einfach wie das Ausführen der folgenden Befehle auf Ihrem Server:
$ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar $ chmod +x wp-cli.phar $ sudo mv wp-cli.phar /usr/local/bin/wp
Nachdem Sie diese Schritte ausgeführt haben, können Sie WP-CLI ausführen, indem Sie einfach wp
von einer beliebigen WordPress-Installation aus eingeben, solange Sie sich im WordPress-Stammverzeichnis befinden.
Versuchen Sie beispielsweise, in Ihrem WordPress-Installationsordner den folgenden Befehl auszuführen:
$ wp theme status
Es ist ein einfacher Befehl, der alle verfügbaren Designs auflistet und hervorhebt, welches derzeit aktiv ist.
Schließlich können Sie zur Installation von MU-Migration den package install
nutzen. Verwenden Sie den folgenden Befehl, um MU-Migration als WP-CLI-Plugin herunterzuladen und zu installieren.
$ wp package install 10up/mu-migration
Ausführen einer einfachen Migration
Die Nutzung von MU-Migration ist recht einfach. Für unser erstes Szenario verschieben wir eine einzelne WordPress-Site in eine WordPress-Multisite-Installation.
Exportieren der einzelnen Site
Wir beginnen mit dem Exportieren der einzelnen Site. Dazu müssen wir den Befehl export all verwenden:
$ wp mu-migration export all single-site.zip --themes --plugins --uploads
Der obige Befehl exportiert die gesamte Site in ein ZIP-Paket, die Flags --themes
, --plugins
und --uploads
sind optional und schließen das aktuelle Design, alle Plugins bzw. den Uploads-Ordner in den Export ein. Abhängig von der Größe Ihrer Website kann es einige Zeit dauern, bis der Vorgang abgeschlossen ist, aber für die meisten Websites sollte der Exportvorgang nicht länger als ein paar Minuten dauern.
Sobald es fertig ist, wird es eine Datei namens single-site.zip
, die alle Daten, Themen und Plugins der Website sowie das Upload-Verzeichnis enthält. Der nächste Schritt besteht darin, es auf den Server zu verschieben, auf dem sich die WordPress-Multisite befindet. Sie können Ihren bevorzugten SFTP-Client oder eine robustere Lösung wie rsync
verwenden.
Importieren der Single-Site in Multisite
Mit der exportierten Datei auf Ihrem Multisite-Server brauchen Sie nur noch den Importbefehl aus dem WordPress-Multisite-Verzeichnis zu verwenden; Natürlich müssen sowohl WP-CLI als auch MU-Migration auf dem Zielserver installiert sein.
$ wp mu-migration import all /path/to/single-site.zip --new_url=example.com/single-site
Der obige Befehl nimmt die Single- single-site.zip
-Datei, extrahiert sie und importiert alles in Multisite. Es wird eine neue Unterwebsite in Ihrem Netzwerk erstellt. Der Parameter --new_url
ist optional; Es weist MU-Migration an, eine Suche durchzuführen und alle Vorkommen der Site-URL der exportierten Site durch die angegebene zu ersetzen. Dieser Parameter ist praktisch, wenn die Migration eine Änderung der URL beinhaltet oder wenn Sie lokal oder sogar in einer Staging-Umgebung importieren.
Der Importvorgang dauert normalerweise länger und hängt von der Größe der Website ab, die Sie importieren, aber keine Angst, MU-Migration hält Sie auf dem Laufenden, während die Migration läuft. Wenn der Vorgang abgeschlossen ist, teilt Ihnen MU-Migration die endgültige URL Ihrer importierten Website mit. Es wird dringend empfohlen, alle Cache-Layer zu leeren , die auf Ihrem Server ausgeführt werden, insbesondere Memcache oder Redis.
Erneutes Ausführen einer Migration
Bei Migrationen ist es ziemlich üblich, zuerst einen Probelauf durchzuführen, um die Dinge zu testen, bevor die endgültige Migration ausgeführt wird, was normalerweise bedeutet, dass ein weiterer Export und erneuter Import in die Multisite-Zielinstallation durchgeführt wird. Beachten Sie jedoch, dass MU-Migration in unserem ersten Migrationsbeispiel eine neue Unterwebsite innerhalb des Netzwerks erstellt hat, um die einzelne Website darüber zu importieren. Das erneute Ausführen genau desselben Befehls würde zur Erstellung einer weiteren Unterwebsite führen, was nicht genau das ist, was wir erwarten würden.
Glücklicherweise ist es möglich, eine blog_id
anzugeben, die MU-Migration anweist, die Unterwebsite mit der angegebenen blog_id
zu überschreiben. Nehmen wir beispielsweise an, dass der vorherige Importbefehl eine Unterwebsite mit 2
als ID erstellt hat und Sie die Migration erneut ausführen möchten. Sie könnten Folgendes tun:
$ wp mu-migration import all /path/to/single-site.zip --new_url=example.com/single-site --blog_id=2
Wenn Sie die blog_id
nicht kennen, können Sie sie über die Netzwerkadministratoreinstellungen oder durch Ausführen von $ wp site list
abrufen.
Extrahieren einer Subsite aus einer Multisite-Installation
MU-Migration unterstützt auch das Extrahieren von Subsites aus Multisite-Installationen und deren Import entweder in eine andere Multisite oder in eine einzelne Site.
Für diese beiden Szenarien würden wir den Exportbefehl von einer Multisite-Installation und nicht von einer einzelnen Site aus ausführen; Das bedeutet, dass wir eine Möglichkeit brauchen, anzugeben, welche Unterwebsite wir exportieren möchten. Dazu müssen wir nur den Parameter --blog_id
an den Exportbefehl übergeben:
$ wp mu-migration export all subsite-3.zip --themes --plugins --uploads --blog_id=3
In diesem Beispiel exportieren wir eine Unterwebsite mit der ID 3; Dadurch wird eine ZIP-Datei erstellt, die bereit ist, in eine andere Multisite oder in eine einzelne Site importiert zu werden. Der Befehl zum Importieren in eine Single Site und Multisite ist genau gleich, MU-Migration erkennt, ob es auf Multisite läuft oder nicht und passt sich automatisch daran an. Nebenbei bemerkt, beim Importieren in eine andere Multisite-Instanz können Sie auch den Parameter --blog_id
angeben, um eine vorhandene Unterwebsite zu überschreiben.
$ wp mu-migration import all /path/to/subsite-3.zip [--new_url= ] [--blog_id= ]
$ wp mu-migration import all /path/to/subsite-3.zip [--new_url= ] [--blog_id= ]
$ wp mu-migration import all /path/to/subsite-3.zip [--new_url= ] [--blog_id= ]
Tipps zum Ausführen großer Migrationen
Während die vorherigen Beispiele sehr gut für kleine bis mittelgroße Migrationen funktionieren, kann die Migration großer Sites zu oder von mehreren Sites eine angemessene Zeit in Anspruch nehmen. In diesem Abschnitt teile ich einige Lektionen, die ich bei mehreren unternehmensähnlichen Migrationen gelernt habe.
Erstellen Sie einen Migrationsplan
Datenmigrationen sind oft notwendig, werden aber in vielen Projekten vernachlässigt. Migrationen können umständlich und komplex sein, aber wenn sie angemessen geplant werden, können sie schmerzlos sein. Das Erstellen eines Migrationsplans sollte der erste Schritt eines jeden Migrationsprojekts sein.
Ein typischer Migrationsplan umfasst Dinge wie:
Die Auswirkungen der Migration auf alle Produktionsredaktionsprozesse (dh Einfrieren von Inhalten, unterschiedliche Migrationsanforderungen).
Wie lange wird die Migration voraussichtlich dauern?
Wie werden Backups wiederhergestellt? Wie wird eine fehlgeschlagene Migration gehandhabt?
Wie wirkt sich der Exportvorgang auf die Leistung der Website aus? Viele Standorte können sich in Spitzenzeiten einen Datenbankexport nicht leisten.
Als Faustregel gilt, dass Migrationen so nahtlos wie möglich sein sollten, und idealerweise sollten am Tag der Einführung alle schweren Arbeiten bereits abgeschlossen sein und nur die unbedingt notwendigen Schritte durchgeführt werden. Das bedeutet, dass Sie alles, was Sie können, vor dem eigentlichen Startdatum migrieren sollten, da dies Ihnen Raum für die Behebung von Fehlern und die Qualitätssicherung gibt. Wenn es sich um eine neue Website handelt und Sie Daten migrieren, können Sie oft von einem Fenster zum Einfrieren von Inhalten profitieren und Ihre Inhalte vorzeitig verschieben. Sie können auch Strategien anwenden, um Ihre Inhalte nach Möglichkeit schrittweise zu verschieben. Im nächsten Abschnitt finden Sie ein Beispiel für diese Technik.
Obwohl oft vernachlässigt, kann ein richtiger Migrationsplan eine Vielzahl von Problemen bei einer Migration vermeiden. Lassen Sie nicht zu, dass unerwartete Umstände Ihre Migration scheitern lassen, planen Sie voraus! Für eine eingehendere Diskussion über die Planung einer Migration empfehle ich Ihnen, den Migrationsabschnitt der Best Practices von 10up zu lesen.
Verwenden Sie Rsync, um die Uploads nach und nach zu kopieren
Der Upload-Ordner großer Websites kann sehr groß sein, und das Komprimieren in eine ZIP-Datei zum späteren Extrahieren ist nicht immer die beste und schnellste Lösung. Es gibt mehrere andere Möglichkeiten, den Uploads-Ordner auf den Zielserver zu kopieren. Ein häufig verwendetes Tool für die unternehmensähnliche Migration ist rsync
, das Dateien schneller zwischen Servern übertragen kann als mit einer Standard-SFTP-Lösung und als Pluspunkt Übertragungen anhalten und wiederherstellen kann. Es verfolgt, was bereits übertragen wurde, was bedeutet, dass wir unsere Dateien schrittweise synchronisieren können. Sie können beispielsweise einige Tage vor der eigentlichen Migration mit der Synchronisierung der Dateien beginnen, um etwas Zeit zu gewinnen. Am Tag der Migration müssen Sie dann nur noch die Dateien synchronisieren, um sicherzustellen, dass alles, was seit der letzten Synchronisierung hinzugefügt wurde, auf den Zielserver übertragen wird.
Die einzige Einschränkung bei diesem Ansatz ist, dass Sie die Unterverzeichnisse der Uploads manuell an die richtige Stelle verschieben müssen, da Multisites eine etwas andere Struktur für den Uploads-Ordner haben: Jede Site erhält ihren eigenen Unterordner, dessen Name die ID der Site ist .
Sehen wir uns als letztes Beispiel an, wie wir eine große einzelne Site in eine Instanz mit mehreren Sites migrieren können. Wir beginnen damit, die einzelne Site in ein ZIP-Paket zu exportieren und einen Probelauftest auf dem Zielserver durchzuführen. Zu diesem Zeitpunkt wäre die Site für niemanden zugänglich, da die Domain immer noch auf den alten Server verweist, was bedeutet, dass Sie die Datei Ihres Hosts sicher auf den neuen Server verweisen können, um die Migration zu testen. Sie können auch ein Plugin wie Restrict Site Access auf der Zielsite aktivieren, um sicherzustellen, dass sie in keiner Weise öffentlich zugänglich ist.
Für unseren Trockenlauftest exportieren wir die Website einige Tage oder Wochen vor dem geplanten Migrationsdatum, um zu testen und ein Gefühl dafür zu bekommen, wie lange der Prozess dauern wird. Beachten Sie, dass der Ordner „Uploads“ nicht enthalten ist.
Führen Sie zuerst einen Trockenlauf durch
Führen Sie immer zuerst einen Trockenlauf durch. Idealerweise sollte ein Probelauf auf dem eigentlichen Server oder in einer Staging-Umgebung mit einem ähnlichen Server-Stack stattfinden.
Erwägen Sie die Verwendung des --mysql-single-transaction
Der import-Befehl unterstützt auch ein --mysql-single-transaction
Flag, das den SQL-Export in eine einzige Transaktion umschließt, um alle Änderungen aus dem Import auf einmal festzuschreiben, wodurch verhindert wird, dass der Schreibvorgang den Datenbankserver überlastet, insbesondere in geclusterten MySQL-Umgebungen.
$ cd /path/to/wordpress $ wp mu-migration export all site.zip --themes --plugins
Mit rsync
können wir die generierte exportierte Datei einfach übertragen:
$ rsync -aP site.zip [email protected]:/var/www/multisite/
Dann führen wir den Importbefehl auf dem Zielserver aus:
$ ssh [email protected] $ cd /var/www/multisite $ wp mu-migration import all site.zip
Jetzt müssen wir wissen, wie die blog_id
der neu erstellten Unterseite lautet; Wir können diese Informationen erhalten, indem wir Folgendes ausführen:
$ wp-Site-Liste | |||
---|---|---|---|
blog_id | URL | zuletzt aktualisiert | Eingetragen |
1 | https://multisite.com/ | 2017-09-09 20:59:31 | 2016-11-23 21:59:34 |
2 | https://siglesite.com/ | 2017-06-21 18:30:09 | 2017-04-25 13:07:46 |
Aus der Ausgabe des obigen Befehls wissen wir, dass unsere Site mit der ID 2 importiert wurde. Wir benötigen diese, um den Uploads-Ordner mithilfe von rsync
ordnungsgemäß zu verschieben. Auf dem Single-Site-Server würden wir Folgendes ausführen:
$ rsync -azP wp-content/uploads/ [email protected]:/var/www/multisite/wp-content/uploads/sites/2/
Der obige Befehl kopiert den gesamten Uploads-Ordner an die richtige Stelle auf einer Multisite-Installation, die sich unter dem Sites-Ordner und in einem Ordner befindet, dessen Name nur die ID der Site ist (in diesem Fall 2). An diesem Punkt können wir nun die Datei des Hosts bearbeiten, um die Single-Site-Domain auf den Multisite-Server zu verweisen; Dann können wir einige Tests durchführen, um sicherzustellen, dass die Migration wie erwartet funktioniert hat.
Für die endgültige Migration wäre alles gleich, mit der Ausnahme, dass wir --blog_id=2
an den Importbefehl übergeben würden:
$ wp mu-migration import all site.zip --blog_id=2
Und als Vorteil erfolgt die Synchronisierung der Uploads viel schneller, da rsync
nur die Dateien überträgt, die seit der letzten Synchronisierung geändert oder hinzugefügt wurden.
Fazit
Die Migration zu oder von mehreren Standorten ist schwierig, und das in diesem Artikel vorgestellte Tool vereinfacht den gesamten Migrationsprozess, indem es den Aufwand auf ein paar CLI-Befehle reduziert. MU-Migration wird seit mehr als einem Jahr aktiv in der Produktion eingesetzt und ist ein vollständiges Open-Source-Projekt. Das Plugin wird auf Github entwickelt und Pull Requests sind willkommen!