In einer Drupal-Multisite-Installation eine Seite duplizieren
Die Aufgabe ist schnell beschrieben und kommt wahrscheinlich gar nicht so selten vor. Gedacht sei etwa an eine Layout-Überarbeitung und Umstrukturierung einer bestehenden Internet-Präsenz in einer Test-Umgebung samt eigener URL. Auf jeden Fall musste ich heute innerhalb meiner Drupal-6-Installation die Inhalte einer Domain auf eine andere übertragen. Dazu war es gekommen, weil die Reservierung einer neuen Domain, unter der die geplanten neuen Inhalte veröffentlicht werden sollen, länger dauerte als geplant. Deshalb hatte ich die Initial-Installation mit einer anderen Domain vorgenommen, die ich noch besaß und sonst nicht verwende. Wie ich dabei vorging, habe ich kürzlich im Beitrag Mit Drupal 6 mehrere Internet-Präsenzen in deutscher Sprache installieren beschrieben.
Das prinzipielle Vorgehen konnte ich mir vorstellen: Denn eine neue Domain in einer Multisite-Installation wird erstellt, indem unterhalb des sites-Verzeichnisses ein neues Verzeichnis angelegt wird, das den Namen der neuen Domain erhält. Beim Webhosting-Provider oder in den virtuellen Hosts des eigenen Webservers muss dann noch dafür gesorgt werden, dass Aufrufe mit der neuen Domain auf das Wurzelverzeichnis der Drupal-Installation geleitet werden. Insofern lag der Gedanke nah, das vorhandenen Verzeichnis sites/altedomain einfach mitsamt allen Inhalten in ein Verzeichnis sites/neuedomain zu kopieren. Aber was musste ich mit der Datenbank machen? Beim Anlegen des Verzeichnisses für die alte Domain hatte ich festgelegt, dass alle Einträge für diese Domain in die Datenbank in Tabellen vorgenommen werden, deren Name mit dem Präfix altedomain_ beginnt.
Das Vorgehen des Migrationsprozesses beschreibt der Artikel Cloning a Drupal multisite subsite von Chris Hughes kurz, knapp und eingängig. Insofern sind die folgenden Hinweise im wesentlichen Übersetzungen aus diesem Artikel.
- Hughes nimmt das Drupal-Modul Backup and Migrate zu Hilfe. Zunächst wird dies also installiert. Dann sollte der Cache der Drupal-Seiten gelöscht werden. Das geht unter Website-Einstellungen - Leistung.
- Nun wird ich auf dem Webserver - bzw. erstmal in der lokalen Kopie der Verzeichnisse auf dem eigenen Rechner unterhalb des Drupal-Wurzelverzeichnisses das Directory sites/neuedomain angelegt. Alle Inhalte von sites/altedomain werden dort hineinkopiert.
- Rekursiv werden nun die Dateien in sites/neuedomain durchsucht und alle Vorkommen von "altedomain" durch "neuedomain" ersetzt. Dazu habe ich unter Linux das Kommandozeilen-Tool sed verwendet. Wie damit rekursives dateiübergreifendes Suchen und Ersetzen erledigt wird, beschreibt diese Seite sehr schön.
- In der Datei sites/neuedomain/settings.php wird überprüft, dass folgende Zeile vorhanden ist:
$db_prefix = 'neuedomain_'; - Das Verzeichnis sites/neuedomain wird nun komplett auf den Webserver hochgeladen.
- Im Text von Chris Hughes folgen nun Anweisungen, im Document Root des Webservers einen Symlink für neuedomain anzulegen. Das wird bei vielen Providern nicht gehen - so wie bei meinem auch. Stattdessen ist nun der Zeitpunkt da, im Administrationsmenü des Webspaces die neue Domain mit dem Wurzelverzeichnis von Drupal zu verbinden. Wie das im Einzelnen geht, verrät der Webhosting-Provider.
- Mit dem Modul "Backup and Migrate" wird nun eine Kopie der Drupal-Datenbank gezogen und auf den eigenen Rechner heruntergeladen.
- Es entsteht eine wahrscheinlich recht große Textdatei, die MySQL-Anweisungen für die Wiederherstellung der Drupal-Datenbank enthält. Nun geht es darum, aus dieser Datei alles zu löschen, was nichts mit altedomain zu tun hat. Praktisch sind das alle Befehle, die sich nicht auf Tabellen beziehen, die mit altedomain_ beginnen. Diese Befehle stehen alle zusammenhängend in einem Bereich der Datei. Insofern ist es mit einem einfachen Texteditor recht unproblematisch, alles davor und danach zunächst zu markieren und dann zu löschen.
- Dann wird mit der Suchen- und Ersetzen-Funktion des Editors jedes Vorkommen von altedomain_ durch neuedomain_ ersetzt.
- Außerdem sollte geprüft werden, ob es in der Datei auch Verweise auf Verzeichnisse gibt, die in URL-Form geschrieben sind, also beispielsweise etwas wie sites/altedomain.de/. Dieses müsste dann durch sites/neuedomain.de ersetzt werden.
- Die entsprechend abgeänderte Datei wird abgespeichert, und dann wird mit dem Backup-and-Migrate-Modul der Wiederherstellungsprozess eingeleitet. Es wird also der Menüpunkt "Wiederherstellen" aufgerufen und die bearbeitete Datei hochgeladen. Damit sollten neue Tabellen in der Drupal-Datenbank angelegt worden sein, die alle mit neuedomain_ beginnen und ansonsten inhaltlich identisch sind mit denen, die das Präfix altedomain_ tragen. Dies sollte mit phpMyAdmin überprüft werden.
- Falls noch nicht geschehen, sollten dann diejenigen Tabellen per phpMyAdmin geleert werden, die dem Namen nach Cache-Tabellen sind. Im Backup-and-Migrate-Modul gibt es die Option, diese Tabellen von Beginn an nur leer in die Sicherungsdatei zu übertragen. Das erspart das nachträgliche Löschen.
- Nun ist der Zeitpunkt gekommen, sich unter der Adresse der neuen Domain ins Administrationsinterface der Drupal-Präsenz einzuloggen und zunächst den Cache nochmals zu leeren.
Ist alles glatt gelaufen, steht nun die unter der Adresse der alten Domain bekannte Seite unter einer neuen Adresse zur Verfügung. Bei mir war dies der Fall. Lediglich die Verweise auf eigene Logo- und Favicon-Grafiken in in der Konfiguration des verwendeten Themes waren verschwunden. Da dies aber schnell wieder herzustellen ist, war dies kein Beinbruch.




