WordPress manuell Klonen

WordPress LogoAls 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 😅

STAGE-Instanz beim Webhoster

ALL-INKL.COM LogoIn 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:

  • eine Subdomain stage.website.de mit dem Verzeichnis /stage anlegen
  • unter SSL-Schutz ein Let’s Encrypt Zertifikat generieren und SSL erzwingen einstellen
  • eine neue Datenbank anlegen
  • einen Datenbank-Dump mit phpMyAdmin exportieren und ebenso mit phpMyAdmin in die neue Datenbank importieren
  • alle Dateien des Verzeichnisses /live mit FTP herunterladen
  • in der Datei wp-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. */
    
  • die angepasste Datei wp-config.php und alle anderen Dateien in das Verzeichnis /stage hochladen
  • einen Verzeichnisschutz (unter Tools) mit Benutzernamen und Kennwort für das Verzeichnis /stage einrichten, damit die Subdomain nicht von den Suchmaschinen gefunden wird (erst jetzt, damit die Änderungen erst in der hochgeladenen Datei .htaccess erfolgen)
  • nice to have ist nun noch die Markierung der neuen STAGE-Instanz, oder verwechsle niemals LIVE und STAGE 😅
    • in wp-admin dem Titel der Website ein „STAGE” voranstellen in Einstellungen | Allgemein | Titel der Website
    • Auf alle Seiten einen Aufkleber „STAGE” kleben mit Design | Customize | Zusätzliches CSS und:
      STAGE
      body::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:

  • Link in einer Seite von https://www.website.de/Referenzen ändern in /Referenzen.
  • URL im Menü von 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.

docker Logo

Test-Instanz mit Docker Container

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.