Als marktführendes Content-Management-System (CMS) ermöglicht WordPress die Erstellung von Websites mit einer benutzerfreundlichen Oberfläche und zahlreichen Erweiterungsmöglichkeiten. Wenn die Website zu einem späteren Zeitpunkt umgestaltet oder geändert werden soll, ist es sinnvoll, diese Arbeiten in einer STAGE- oder TEST-Umgebung durchzuführen und die LIVE-Website erst nach Abschluss dieser Arbeiten zu aktualisieren. Für dieses Klonen einer WordPress Website gibt es gute und detaillierte Blog-Posts, wie z.B. How to Clone a WordPress Site (Complete Guide).
Dieser Post zeigt kurz die notwendigen Schritte für zwei konkrete Beispiele. Zunächst wird eine STAGE-Instanz mit einer Subdomain beim Hoster eingerichtet und anschließend eine lokale TEST-Instanz in einem Docker-Container. Die Anleitung richtet sich an erfahrene Administratoren.
⚠ Erstelle unbedingt ein Backup Deiner WordPress-Seite, bevor Du mit der Arbeit beginnst. Oder verwechsle niemals LIVE und STAGE 😅
In meinem Beispiel ist ALL-INKL.COM der Webhoster. Die Verwaltung erfolgt mit dem Dienst kasserver.com, hier im Beispiel für die Site URL website.de
, die dort aus dem Verzeichnis /live
ausgeliefert wird:
stage.website.de
mit dem Verzeichnis /stage
anlegen/live
mit FTP herunterladenwp-config.php
die existierenden Einträge für DB_NAME
, DB_USER
und DB_PASSWORD
anpassen und zwei neue Zeilen vor … stop editing! … einfügen:
define('WP_HOME', 'https://stage.website.de');
define('WP_SITEURL', 'https://stage.website.de');
/* That's all, stop editing! Happy blogging. */
wp-config.php
und alle anderen Dateien in das Verzeichnis /stage
hochladen/stage
einrichten, damit die Subdomain nicht von den Suchmaschinen gefunden wird (erst jetzt, damit die Änderungen erst in der hochgeladenen Datei .htaccess
erfolgen)wp-admin
dem Titel der Website ein „STAGE” voranstellen in Einstellungen | Allgemein | Titel der Websitebody::before {
content: "STAGE";
position: fixed;
top: 30px;
left: 30px;
background-color: darkblue;
color: red;
font-size: 24px;
font-weight: bold;
padding: 5px 10px;
z-index: 9999;
}
Anmerkung: Im Datenbank-Dump finden sich selbst bei einer kleinen Website tausende von Einträgen mit der URL www.website.de
und hunderte mit dem Verzeichnis /live
. Diese müssen jedoch nicht im Datenbank-Dump geändert werden. Es genügt, die Einträge WP_HOME
und WP_SITEURL
hinzuzufügen und den Webserver die Dateien aus dem Verzeichnis /stage
ausliefern zu lassen.
Anmerkung II: In den Beiträgen und in der Konfiguration können noch absolute Links enthalten sein. Diese absoluten Links springen dann zur LIVE-Website. Das Ersetzen dieser Links durch relative Links funktioniert dann sowohl für STAGE als auch für LIVE und ist die richtige Vorbereitung für das Rückwärtsklonen von STAGE zu LIVE, sobald die Arbeit erledigt ist. Beispiele:
https://www.website.de/Referenzen
ändern in /Referenzen
.https://www.website.de/Impressum
ändern in /Impressum
.Damit steht unter stage.website.de
eine geklonter Version der Website zur Verfügung und kann in Ruhe verändert, erweitert und getestet werden. Wenn alles passt, findet ein Rückklonen von STAGE nach LIVE statt.
Wird lediglich eine lokale Testinstanz benötigt, z.B. um einen Fehler zu analysieren oder ein Upgrade zu testen, dann bieten sich Docker Container an. Für das Aufsetzen der Docker Container kann github.com/muhme/wordpress-maildev verwendet werden. Die folgenden Shell-Kommandos sind für ein Unix-artigem Betriebssystem, wie z.B. Mac OS X:
$ git clone https://github.com/muhme/wordpress-maildev wordpress-test
$ cd wordpress-test
$ docker compose up -d
Dann wird die Datenbank wp_test
erstellt und in den Docker Container wp_mariadb
importiert:
$ echo "CREATE DATABASE wp_test;" | docker exec -i wp_mariadb mysql -uroot -proot
$ docker exec -i wp_mariadb mysql -uroot -proot $DATABASE < export.sql
Dann in der Datei wp-config.php
die folgenden existierenden vier Einträge anpassen und drei neue Zeilen hinzufügen:
define('DB_NAME', 'wp_test');
define('DB_USER', 'root');
define('DB_PASSWORD', 'root');
define('DB_HOST', 'mysql'); # docker container wp_mariadb
define('WP_HOME', 'http://localhost:3080'); # docker container wp_wordpress
define('WP_SITEURL', 'http://localhost:3080');
define('FORCE_SSL_ADMIN', false); # simple use http on TEST instance
Dann die WordPress Installation im Docker Container wp_wordpress
löschen und die angepasste Datei wp-config.php
und alle anderen Dateien in das Verzeichnis /var/www/html
in den Docker Container wp_wordpress
laden:
$ docker exec -i wp_wordpress /bin/bash -c "rm -rf /var/www/html 2>/dev/null"
$ tar -c * | docker exec -i wp_wordpress tar x -C /var/www/html
Damit steht die TEST-Instanz unter http://localhost:3080 zur Verfügung. Der große Vorteil liegt in der einfacheren Installation und in der Möglichkeit, beliebig viele Testinstanzen parallel laufen zu lassen.