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_mariadbimportiert:
$ 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_wordpressladen:
$ 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.