Wie richte in ein Staging-System für Wordpress ein?

Wordpress hat den Ruf sehr unkompliziert zu sein. Zurecht. Doch oft bleibt es nicht dabei, dass man ein paar Beiträge verfasst. Die Seite kann schnell von einem einfachen Blog zu einem großen CMS heranwachsen und wird dann nicht nur mit Texten und Bildern, sondern dank eines riesigen Angebotes an Plugins und Template auch mit Funktionalitäten gefüllt. Und dann wird man mit einem Konflikt konfrontiert, dass die gesamte Seite bedroht: Updates und Inkompatibilität. Es ist nämlich gar nicht so selbstverständlich, dass die eigenen Anpassungen mit alle Wordpress-, Plugin- und Template-Versionen oder gar der Hosting-Umgebung harmonieren. Je angepasster die eigene Wordpress-Installation ist, desto komplexer sind im Hintergrund die Abhängigkeiten. Ein kleines Update kann im schlimmsten Fall die gesamte Seite gefährden. Ein Staging-System für Wordpress kann da helfen.

Zwei Wege und drei Plugins führen nach Rom

Deswegen ist es ratsam, sich möglichst früh um eine Testumgebung Gedanken zu machen. Das Ziel soll eine sogenannte Staging-Umgebung sein, die synchron zum öffentlichen Live-System betrieben werden kann. Gleiche Inhalte, gleiche Templates, gleiche Plugins. Auf diesem Staging-System kann dann jedes Update und jede Änderung auf Kompatibilität getestet werden. Bei Erfolg installiert man das Update auch auf dem Live-System. Die gute Nachricht: Das Lesen des Beitrages wird dich vermutlich mehr Zeit kosten, als der ganze Prozess. Je nach Größe des Blogs kannst du ein Staging-System für Wordpress in 5 bis 10 Minuten aufsetzen.

Es gibt viele Möglichkeiten (sprich Plugins), die versprechen, Wordpress-Installationen zu kopieren oder in irgendeiner Form zu synchronisieren. Doch keines erfüllt das Ziel wirklich komfortabel, nämlich:

per Knopfdruck im Wordpress-Backend Dateien und Datenbank an einen anderen Ort kopieren

Ich will an dieser Stelle zwei Wege und drei Plugins vorstellen, die ich als sehr nützlich betrachte und die die Aufgabe zumindest in Teilen erfüllen.

Welche Plugins kommen für das Staging-System für Wordpress in Frage

  • Der 1. Weg: WP Sync DB ist ein Plugin, dass zwar sehr bequem nur über das Backend läuft, aber eben auch nur den Inhalt der Datenbank kopiert. Praktisch ist allerdings, dass immerhin auch die Medien-Bibliothek komplett übertragen wird. Außerdem: Der Duplicator ist ein sehr mächtiges, teilweise kostenpflichtiges Plugin; allerdings reicht für diese Zwecke auch die kostenlose Variante aus. Damit werden sämtliche Dateien und Tabellen aus der Datenbank in ein Archiv gepackt, aus dem dann an anderer Stelle eine eigenständige Installation erstellt wird. Leider muss dazu auch per FTP oder der Shell hantiert werden. Mit der  Kombination aus beiden Plugins lässt sich das o.g. Ziel jedenfalls schon recht gut erreichen. Zusammen mit WP Sync DB lassen sich die Installationen aber halbwegs komfortabel synchron halten.
  • Das dritte Plugin (für den 2. Weg) heißt WP Staging. Damit kann man sehr bequem eine komplette Kopie von Wordpress erstellen. Der Vorteil: Das Plugin übernimmt den ganzen Prozess und wird nur über das Backend bedient. Der Nachteil aus meiner Sicht: Das Staging-System wird unterhalb des Live-Systems in einem Unterverzeichnis erstellt und es wird die exakt gleiche Datenbank verwendet. Für meinen Geschmack ist die Trennung zwischen Live- und Test-System damit nicht strikt genug.

Zuerst beschreibe ich die Vorbereitung auf dem Server. Danach gehe ich auf die Installation der jeweiligen Tools ein. Und abschließend fasse ich im Fazit noch einmal zusammen, wie unser Live-Staging-System nun genutzt werden kann. Wer also wissen will, was auf ihn zukommt, fängt ausnahmsweise mal von unten an zu lesen.. ;)

Vorbereitung

Bevor ich mich an die Plugins mache, möchte ich eine Sub-Domain und einen getrennten Ort im Dateisystem einrichten (Für den zweiten Weg ist das nicht notwendig). Außerdem soll der Zugriff auf das Staging-System mit htaccess geschützt werden.

Ich gehe im folgenden davon aus, dass die Seite bei einem Shared-Hosting-Anbieter eingerichtet ist. Wer einen Dedicated, V- oder Managed-Server nutzt, dem räume ich einfach mal genügend Sachverstand ein, die Schritte auch auf so einem System nachvollziehen zu können. Ansonsten werde ich versuchen, diese Anleitung so detailliert und einfach wie möglich zu gestalten.

Los geht es mit einem zusätzlichen Ordner auf unserem Webspace, der natürlich nicht unterhalb unseres aktuellen Live-System liegen darf. Nun richte ich mir eine Sub-Domain ein, die auf diesen Ordner zeigen soll. Das passiert in zwei Schritten. 1. Anlegen der Subdomain und 2. Einstellen des Verweises auf den entsprechenden Ordner, in meinem Fall also staging.

[caption id=“attachment_1684” align=“aligncenter” width=“300”]Ziel für die Sub-Domain einrichten am Beispiel von Strato Ziel für die Sub-Domain einrichten am Beispiel von Strato[/caption]

Die Installation von Wordpress können wir uns sparen, das übernimmt gleich der Duplicator. Den Verzeichnisschutz können wir übrigens erst nach einrichten, nachdem wir Wordpress einmal “dupliziert” haben. Dazu also später mehr.

Mit Duplicator einen ganzen Blog umziehen

Weiter geht es auf dem aktuellen Live-System, wo wir uns den Duplicator installieren und sofort aktivieren. Im Hauptmenü gelangst man über “Duplicator” und den Punkt “Archive” zu “Neues erstellen” Zuerst wird die System-Umgebung geprüft. Damit das Plugin funktioniert, sollten natürlich alle Anforderungen erfüllt sein. Hier kann es z.B. passieren, dass das “ZIP-Archiv” für PHP fehlt.

Wenn du Shell-Zugriff auf deinen Server hast, kannst du das Problem sehr einfach beheben, indem du das entsprechende PHP-Modul installierst und den Web-Server neu startest.

apt-get install php-zip service apache2 restart

Ansonsten kannst du dieses Paket ggf. im Backend deines Hosting-Paketes aktivieren oder deinen Provider fragen, ob er dir das Modul einrichtet. Nun solltest du über den gleichen Dialog die weiteren Einstellungen vornehmen können. Den Speicher-Ort musst du nicht ändern. In der Pro-Version kannst du hier auch einen FTP-Server oder sogar eine Dropbox-Freigabe auswählen. Unter “Archive” musst du ebenfalls keine Einschränkungen vornehmen, es geht ja darum, die komplette Installation inklusive aller Dateien zu kopieren.

Natürlich kann es hilfreich sein, hier bereits die Verbindungsdaten zur MySQL-Datenbank zu hinterlegen. Das Passwort muss bei der späteren  Installation aber dennoch nachgereicht werden.

[caption id=“attachment_1686” align=“aligncenter” width=“300”]Duplicator - Grundeinstellungen Duplicator - Grundeinstellungen[/caption]

Weiter geht es sodann mit dem “Scan”. Hier werden Datenbank und Dateisystem auf mögliche Fehlerquellen gescannt, wie z.B. Sonderzeichen in den Dateinamen. Wenn es zu Warnungen kommt, muss man diese per Häkchen aktiv “ignorieren”. Und kann dann den sogenannten “Build-Prozess” starten.

[caption id=“attachment_1687” align=“aligncenter” width=“300”]Duplicator - Das Archiv wird erstelllt Duplicator - Das Archiv wird erstelllt[/caption]

Nach dem Build-Prozess lädt man nur noch den Installer und das Archiv herunter, die man direkt in den neu angelegten Staging-Ordner kopiert. Die installer.php ruft man nun im Browser auf und startet das “Deployment”.

Das Deployment - Das Staging-System wird zum Leben erweckt

Dabei wird das Archiv entpackt und alle Dateien von Wordpress in das Dateisystem geschrieben. Wenn  keine Warnungen dazwischen kommen. Wie z.B. fehlende Schreibrechte, die man natürlich korrigieren muss.

Im 2. Schritt wird die Datenbankverbindung eingestellt. Natürlich wollen wir, aus bereits genannten Gründen, unbedingt eine getrennte Datenbank nutzen, um den Live-Betrieb nicht zu gefährden. Außerdem würden alle Tabellen in der Datenbank gelöscht werden. Hier muss also unbedingt eine leere Datenbank angegeben werden. Natürlich kann man auch eine Datenbank anlegen lassen, benötigt dazu aber einen Benutzer mit den entsprechenden Rechten.

[caption id=“attachment_1688” align=“aligncenter” width=“300”]Duplicator - Einstellungen der Datenbank Duplicator - Einstellungen der Datenbank[/caption]

Nachdem also auch die Datenbank mit den Inhalten unserer Seite gefüllt, geht es in Schritt 4 abschließend noch an die Pfade für Wordpress. In den Zusatzoptionen sollte man prüfen, ob alles korrekt eingestellt ist. Als Titel der Seite wähle ich natürlich “Staging” aus. Alle anderen Einstellungen bleiben unverändert - ich will eine exakte Kopie erhalten.

Grundsätzlich war es das. Unter der Staging-URL ist nun eine exakte Kopie des Live-Systems erreichbar. Zum Schluß richten wir aber noch einen Verzeichnisschutz ein, damit die Staging-Umgebung erstens nicht von außen erreichbar ist und zweitens auch nicht von Suchmaschinen besucht wird und unsere SEO-Stratgie stört. Dazu brauchen wir zweit Dateien im staging-Ordner: .htaccess und .htpasswd

Die Datei .htaccess sollte bereits vorhanden sein, da diese auch von Wordpress genutzt wird. Diese wird um die folgenden Zeilen ergänzt:

AuthName “Staging” AuthType Basic AuthUserFile ./.htpasswd require valid-user

Die .htpasswd-Datei musst du selber erstellen. Dort hinterlegst du deine Zugangsdaten - einen Benutzernamen und ein sicheres Passwort, wie z.B:

benutzer1:afasdfgasdfg

Das ist natürlich nicht das Passwort im Klartext, sondern verschlüsselt. Das kannst du dir auf dieser Seite erstellen lassen.

Beim ersten Aufruf des Staging-Systems wird man noch dazu aufgefordert, die Installationsdateien zu entfernen. Fertig.

[caption id=“attachment_1685” align=“aligncenter” width=“300”]Duplicator - Bereinigen der Installationsdateien Duplicator - Bereinigen der Installationsdateien[/caption]

Mit WP Sync DB die Datenbanken kopieren

Zwar haben wir jetzt schon eine vollständige Kopie, allerdings wird unser Live-System in der Zukunft ja durchaus wachsen. Deshalb benötigen wir nun WP Sync DB.

Leider ist das Plugin nicht über das Wordpress-Repository verfügbar. Die Installation ist deshalb aber nicht viel komplizierter: Man lädt sich das Archiv des Plugins von github.com herunter, entpackt es, lädt die Dateien auf den FTP-Server in den Ordner /wp-content/plugins/wp-sync/ der Staging-Umgebung und kann es dann wie gewohnt im Backend von Wordpress aktivieren. Genauso sollte man auch mit dem Plugin verfahren, dass Medien-Datein synchronisieren kann. Das ist auch nur über github.com erhältlich. Mit der Live-Installation verfährt man danach genauso: Einfach die Dateien in den jeweiligen Ordner im plugin-Verzeichnis kopieren und schließlich im Backend aktivieren.

Als nächstes starten wir die allererste Synchronisation der beiden Seiten. Dabei ist es egal, ob wir das vom Live-System oder aus der Test-Umgebung heraus machen.

Im ersten Schritt benötigt ihr die “Connection Info” eures Live-Systems.  Diese befindet sich bei den Werkzeugen unter Migrate DB und dort unter Settings. Außerdem muss der Haken bei “Accept pull requests allow this database to be exported and downloaded” gesetzt sein. Damit erlaubt ihr, dass die Daten von außerhalb heruntergeladen bzw. “gezogen” (pull) werden dürfen. Das ist eine zusätzliche Sicherheit, um das Kopieren der gesamten Daten von außen zu verhindern. Aus Sicherheitsgründen ist es ratsam, diese Funktion nach der Synchronisierung wieder zu deaktivieren und immer nur bei Bedarf zu aktivieren.

[caption id=“attachment_1683” align=“aligncenter” width=“300”]WP Sync Connection Info des Live-Systems WP Sync Connection Info des Live-Systems[/caption]

Die Anbindung zum Staging-System

Im Staging-System müsst ihr nun die Connection-Info hinterlegen. Das passiert auf der gleichen Einstellungsseite unter dem Reiter “Migrate”. Hier können außerdem einige andere Einstellungen vorgenommen werden. Wichtig, und für gewöhnlich automatisch ausgefüllt, ist natürlich die Anpassung der URL und der Pfade in der Datenbank. Hier lassen sich weitere Felder hinterlegen.

[caption id=“attachment_1682” align=“aligncenter” width=“300”]WP Synch Connection Info hinterlegen WP Synch Connection Info hinterlegen[/caption]

Außerdem könnt ihr auswählen, ob bestimmte Tabellen oder Spam-Kommentare beim Kopieren ignoriert werden sollen. Es gibt eine Menge weitere Optionen. Ich empfehle zunächst den Haken bei “Backup the local database before replacing it” zu setzen. Sollte jetzt, aus welchen Gründen auch immer, irgendetwas schief gehen, gibt es immer noch ein Backup. Grundsätzlich sollte ihr aber sowieso ein regelmäßiges Backup mit einem anderen Werkzeug anlegen.

Außerdem sollen auch Medien-Dateien synchronisiert werden. Vorsicht: Wer hier einen großen Bestand an Dateien hat, muss natürlich dafür sorgen, dass genügend Speicher frei ist.

Abschließend speichern wir die getroffenen Einstellungen für die nächste Synchronisierung indem wir  Save Migration Profile aktivieren.

Wer übrigens einen anderen Tabellen-Präfix bei der Installation von Wordpress angegeben hat, wird unten eine Warnung erhalten.

Warning: Different Table Prefixes Whoa! We’ve detected that the database table prefix differs between installations. Clicking the Migrate DB button below will create new database tables in your local database with prefix “foobar_”.

Das ist allerdings kein Problem. Das Tabellen-Präfix der Live-Datenbank wird verwendet und man muss nach dem Prozess den Präfix manuell in der wp-config.php nachtragen:

$table_prefix = ‘foobar_’;

Und dann gehts mit Migrate DB and Save auch schon los. Bei mir hat der Kopiervorgang nur einige Sekunden gedauert. Kurze Zeit danach erscheint das Login-Fenster von Wordpress.

[caption id=“attachment_1680” align=“aligncenter” width=“300”]WP Synch Synchronisierungsprozess WP Synch Synchronisierungsprozess[/caption]

Mit WP Staging und einem Klick eine Kopie erstellen

WP Staging erscheint auf den ersten Blick sehr benutzerfreundlich und unkompliziert. Nachdem man einen Namen für die Staging-Seite angegeben hat, legt das Plugin eine komplette Kopie in einem Unterverzeichnis der Haupt-Domain an, also https://www.nickyreinert.de/staging. Das ist verblüffend komfortabel. Aber leider auch nicht ganz ohne Probleme. Erstens funktionieren Permalinks nicht ohne weiteres. So ist der Beitrag https://www.nickyreinert.de/staging/coii/ nur über den Direkt-Link erreichbar https://www.nickyreinert.de/staging/?p=1643

Außerdem befindet sich die Dateien des Staging-System innerhalb des Ordners vom Live-Systen, genauso wird die gleiche Datenbank benutzt. Das finde ich persönlich etwas unsauber und widerspricht außerdem meiner Vorstellung eines getrennten Test-Systems.

Freilich kann (bzw. sollte) man auch diesen Unterordner noch mit einem Passwortschutz versehen, wie ich es weiter oben schon beschrieben habe.

Wie nutze ich das Live-Staging-System?

Wenn du dich für den zweiten Weg mit dem WP Staging-Plugin entschieden hast, ist der Prozess natürlich relativ einfach: Per Knopfdruck erzeugst du eine Kopie auf der du Updates auf Kompatibilität testen kannst. Außerdem kannst du hier natürlich auch Änderungen am Layout prüfen, bevor du sie ins Live-System übernimmst. Das ist bequem, aber wie gesagt für meinen Geschmack nicht “abgetrennt” genug.

Der erste Weg ist etwas anfangs etwas aufwendiger, aber meiner Meinung nach auch sicherer. Den umständlichen Schritt zur Vorbereitung mit dem Duplicator muss man nur einmal ausführen. Danach kann man mit WP Sync DB die Datenbank und sämtliche Mediendateien kopieren, um das Staging-System für Wordpress auf den aktuellen Stand zu bringen. Jetzt lassen sich dort ebenfalls Plugins und Updates auf Kompatibilität prüfen um sie erst danach im Live-System zu installieren.