Zum Inhalt

Eine WordPress-Testumgebung mit Oracle VirtualBox und Ubuntu erstellen

In letzter Zeit habe ich mich wieder ein wenig mit WordPress und meiner Website beschäftigt. Das Herumspielen und Herumbasteln an der Seite ist ganz nett und teilweise sieht man auch sofort die Ergebnisse, aber der Nervenkitzel ist bei Änderungen am Live-System ist auch immer mit dabei.

Da ich mit diesem Setup noch mehr ausprobieren und herumspielen kann, aber die Komponente Nervenkitzel komplett entferne, habe ich meine WordPress-Seite in eine Oracle VirtualBox importiert.
Sämtliche dort durchgeführten Änderungen haben keine Auswirkungen auf das Live-System und ich kann jederzeit durch Einspielen des Backups sehr schnell auf den vorherigen Stand zurückspringen. So habe ich mir schnell eine Demo-Umgebung bebaut mit der ich sämtliche Änderungen und auch Aufräumarbeiten an der Website vorher durchspielen kann.

Die Voraussetzungen

Ich verwende auf meinem ganz normalen Windows Client die Virtualisierungssoftware "Oracle VirtualBox". Dort habe ich das aktuellste Ubuntu-Linux installiert. Beides ist kostenlos, einfach zu bedienen. Ubuntu bringt zudem alle notwendigen Software-Tools für eine WordPress-Entwicklungsumgebung schon mit.

Die aktuellste Version von Oracle VirtualBox gibt es auf der offiziellen Seite zum herunterladen: 👉 https://www.virtualbox.org/

Installiert es wie gewohnt auf eurem Windows-, Mac- oder Linux-Client

Das neueste Ubuntu Desktop gibt es ebenfalls von der offiziellen Website zum downloaden: 👉 https://ubuntu.com/download

Ich habe mich für die Desktop-Version entschieden, da ich dann eine Webbrowser, grafischen Editor und andere grafische Tools zur Verfügung habe, über den ich die Anpassungen von WordPress machen kann.

Ihr könnt eure Testumgebung auch auf einem Raspberry Pi nach dieser Anleitung installieren und somit mehreren Benutzern im gleiche Netzwerk zur Verfügung stellen. Die Installation von Apache2, Datenbank-Server und Adminer läuft analog, wie hier beschrieben. Das WordPress-Backup und den Datenbank-Dump könnt ihr per SCP auf den Pi übertragen.

Wie man Ubuntu virtualisiert habe ich in diesem Beitrag beschrieben. 👉 Python Entwicklungsumgebung – Schritt 1: Ubuntu virtualisieren

TIPP: Noch als Tipp, wenn ihr Ubuntu installiert habt und bevor ihr irgendwelche Änderungen vornehmt, erstellt euch eine Kopie. So könnt ihr die virtuelle Box auch für andere Sachen verwenden, ohne die lange Neuinstallation.

Oracle VirtualBox - Kopie erstellen

Nach der Installation benötigt ihr einen "Gemeinsamen Ordner" über den ihr die Backups der WordPress-Datei-Struktur und den Datenbank-Dump von eurem Client in die virtuelle Box bekommt. (Ihr könnt das natürlich auch alles Headless per SCP machen.)

Damit ihr nicht den gesamten Speicherplatz eurer Festplatte für virtuelle Boxen aufbraucht, könnt ihr die auch auf ein externes Speichermedium, wie z.B. einen schnellen USB-Stick auslagern. Ich verwende dafür sehr gerne einen kleinen SanDisk-Stick.

WordPress Backup

Die einfachste Möglichkeit des WordPress-Backups ist eine 1:1 Kopie, die ihr mit einem FTP/SCP von eurem Webspace herunterladet.

Den Datenbank-Dump bekommt ihr über entweder über ein Datenbankverwaltungsprogramm eures Hosters oder über ein WordPress-Plugin, wie z.B. BackWPup 👉 https://de.wordpress.org/plugins/backwpup/

Ich nutze für die Erstellung von Backups in unregelmäßigen Abständen diese Möglichkeit. Anschließend mache ich darauf ein 7z-Archiv, um ein wenig Speicherplatz zu sparen. Dieses 7z-Archiv nutze ich auch für den Import in die virtuelle Box.

Nachdem die Vorbereitungen abgeschlossen sind, kann mit der Konfiguration der Test-Umgebung und dem Import des WordPress-Backups losgehen.

Sämtliche Schritte ab hier sind in der virtuellen Box durchzuführen. Auf eurem Host-System benötigt ihr eigentlich keine weitere Software.

Installation Apache2, Datenbankserver und Adminer

Nach der erfolgreiche Installation von Ubuntu benötigt ihr noch ein paar Dinge, damit ihr eine vollständige Entwicklungsumgebung bekommt.

Vorab noch kurz, weshalb ich mich für Adminer entschieden habe und nicht das bekanntere phpMyAdmin verwende. Adminer ist aus meiner Sicht viel einfacher zu installieren und für die von mir benötigten Zwecke vollkommen ausreichend.

phpMyAdmin mag vielleicht in mancher Hinsicht besser sein, erfordert aber auch ein wenig mehr Aufwand für die Installation, die ich für das gleiche Ergebnis mit Adminer nicht investieren wollte.

Es wird zwingend ein funktionsfähiger Webserver benötigt. Ich habe mich ganz einfach für Apache2 entschieden, da ich den auch für meine anderen Server, wie z.B. die Nextcloud, verwende. Ihr könnt auch ngnix verwenden, den ich z.B. für Gitea verwende. 👉 Gitea – Eine grafische Oberfläche für den Git-Server

Neben dem Webserver wird auch ein Datenbank-Server für WordPress benötigt. Ich habe MySQL für die Testumgebung gewählt.

Zwar kann auch die Datenbank MariaDB verwendet werden, aber ich habe in einem Versuch es nicht geschafft die mit Adminer zu verbinden.
(siehe dazu Abschnitt 👉 Fehler mit MariaDB und Adminer)

Der Installationsbefehl von Apache2 und MySQL sieht so aus:

sudo apt install apache2 php php-curl php-cli php-mysql php-gd mysql-client mysql-server

Apache2 benötigt nach der Installation für unsere Zwecke eigentlich keine Anpassungen mehr.

Nach der Installation der Pakete "sichern" wir den Datenbank-Server jedoch noch ein wenig ab.

sudo mysql_secure_installation

Es werden daraufhin einige Dinge abgefragt, die ihr wie folgt, beantworten könnt.

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
Please set the password for root here.

New password: 

Re-enter new password: 

Estimated strength of the password: 50 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

Nun ist es bei Ubuntu noch erforderlich, dass anstatt des auth_socket das mysql_native_password verwendet wird.

sudo mysql -u root
USE mysql;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
FLUSH PRIVILEGES;
exit;

Ersetzt dabei unbedingt das Passwort "password" durch ein von euch gewähltes Kennwort.

Damit ist der Datenbank-Server fertig und es geht los mit der Installation von Adminer.

sudo mkdir /usr/share/adminer

Mit "wget" laden wird die neueste Version auf die virtuelle Festplatte unseres Ubuntu-Systems.

sudo wget "http://www.adminer.org/latest.php" -O /usr/share/adminer/latest.php

Mit dem nachfolgenden Befehl erstellen wir einen symbolischen Link von einem Verzeichnis in das andere.

sudo ln -s /usr/share/adminer/latest.php /usr/share/adminer/adminer.php

Dann noch ein paar weitere Anpassungen und ein Neustart von Apache und fertig ist die Installation von Adminer.

echo "Alias /adminer.php /usr/share/adminer/adminer.php" | sudo tee /etc/apache2/conf-available/adminer.conf
sudo a2enconf adminer.conf
sudo systemctl reload apache2

Nun könnt ihr Adminer im Webbrowser eurer Wahl aufrufen.

http://localhost/adminer.php

Adminer aufrufen

Wenn ihr Adminer über den Webbrowser aufrufen könnt, ist die Testumgebung fertig. Weiter gehts mit dem Import des WordPress-Backups samt Datenbank-Dump.

WordPress Datenbank-Dump importieren

Im ersten Schritt möchten wir den Datenbank-Dump importieren. Dazu wird aber zuerst eine leere Datenbank in unserem MySQL- oder MariaDB-Server benötigt.

Auf der Konsole ist das kein Problem und geht sehr flüssig von der Hand.

Anlegen einer neuen Datenbank

sudo mysql -u root -p
CREATE DATABASE NEUEDATENBANK;

Alle Datenbanken lassen sich mit dem Befehl auflisten.

SHOW DATABASES;
exit;

Nachdem die Datenbank angelegt wurde, kann der Datenbankdump importiert werden.

Achtung

Bevor ihr die Datenbank importiert, ändert gleich eure Domain gegen 127.0.0.1, das erspart euch weitere Arbeiten. Für das Ersetzen eignet sich hervorragend der Editor Notepad++. ( 👉 https://notepad-plus-plus.org/)

Das Ersetzen der Domain ist erforderlich, da in der virtuellen Umgebung eure genutzt Domain nicht bekannt ist. Dort wird nur localhost oder 127.0.0.1 verwendet.

Domain ersetzen

Beachtet dabei auch gleich den richtigen Ordner, in den ihr in der virtuellen Webserver-Umgebung eure Test-Umgebung laufen lasst.

In dem Beispiel wird z.B. mein Backup des WordPress-Verzeichnisses in /var/www/html/blog verschoben, weshalb ich die Live-Domain gegen "http://127.0.0.1/blog" ersetze.

https://eure-domain.de --> http://127.0.0.1/blog

Achtet auch darauf, dass ihr https gegen http tauscht. In der virtuellen Box verwenden wir kein https mit Zertifikat.

Nachdem ihr den Datenbank-Dump mit einem Editor bearbeitet habt und die Ersetzung von eurer Domain vorgenommen habt, kopiert ihr den Dump über den "Gemeinsamen Ordner" von eurem Host in das virtuelle Ubuntu.

Dort könnt ihr über die Konsole die Datenbank in den Datenbank-Server importieren.

sudo mysql -u BENUTZERNAME -p NEUEDATENBANK < SQL-DUMP.sql

Ihr müsst in diesem Befehl ändern

  • BENUTZERNAME = den von euch für die Datenbank vergebenen Benutzer, in dieser Anleitung ist das root
  • NEUEDATENBANK = tauschen gegen den von euch vergebenen Namen
  • SQL-DUMP.sql = der Name eures Datenbank-Dumps des Live-Systems

Datenbank löschen

Dieser Abschnitt ist dann wichtig, wenn ihr euren Datenbank-Dump erneut einspielen möchtet.

Zuerst löscht ihr eure erstellte Datenbank und legt sie dann wieder wie oben beschrieben an. Damit könnt ihr die Gleiche wp-config.php verwenden, ohne immer wieder eine Anpassung der Anmeldedaten vornehmen zu müssen.

Anmelden am Datenbank-Server

sudo mysql -u root -p

Auflisten aller verfügbaren Datenbanken

SHOW DATABASES;

Datenbank löschen

DROP DATABASE NEUEDATENBANK;

Anschließend könnt ihr euch wieder abmelden

exit;

Datensicherung des Blogs einspielen

Achtung

Denkt daran eure Autopost-Plugins, die eure Beiträge automatisch zu Twitter, Mastodon, etc. senden in eurer Testumgebung zu deaktivieren, zu löschen bzw. die Netzwerkverbindung der virtuellen Box zu unterbrechen bevor ihr neue Beiträge erstellt. Die Verbindung zu den Social Medien besteht auch in der virtuellen Box und es werden eure Beiträge ggf. dort nach wie vor automatisch veröffentlicht.

Anfangs habe ich erwähnt, dass bei mir die WordPress-Backups in 7z-Archiven abgespeichert werden, um Speicherplatz auf den Festplatten zu sparen.

Ubuntu muss nun die 7z-Archive entpacken können. Dazu ist ein Programm aus den Repositories zu installieren.

sudo apt-get install p7zip-full

Kopiert nun euer WordPress-Backup über den Gemeinsamen Ordner in die virtuelle Ubuntu-Umgebung. Ich habe das hier in das Home-Verzeichnis meines Benutzers und dann in den Ordner "Downloads" kopiert.

Von da kopiert ihr das 7z-Archiv in das Apache2-Hauptverzeichnis.

sudo cp /home/dev/Downloads/blog.7z /var/www/html

Wechselt dorthin und entpackt dort das 7z-Archivs.

cd /var/www/html
sudo 7z x blog.7z

Durch das Entpacken werden wird bei mir ein neuer Ordner mit dem Namen "blog" erstellt, der alle WordPress-Dateien beinhaltet. Prüft euren Verzeichnisnamen und passt die nachfolgenden Befehle entsprechend an.

Rechte anpassen

Die Rechte für das neue Verzeichnis sind anzupassen, da aktuell nur der Benutzer "root" Zugriff darauf hat, was die Arbeit mit den Dateien recht umständlich macht.

sudo chown root:root /var/www
sudo usermod -a -G www-data dev
sudo chmod -R 750 /var/www/html/blog
sudo chown -R www-data:www-data /var/www/html/*

Rechte für Verzeichnis anpassen

wp-config.php - anpassen

In der Hauptkonfigurationsdatei von WordPress sind die neuen Anmeldedaten für den Datenbankserver unbedingt anzupassen. Macht ihr die Änderungen nicht, wird beim Aufruf ein Datenbankfehler im Webbrowser ausgegeben.

sudo nano /var/www/html/blog/wp-config.php

Passt die Einträge am Anfang der Datei entsprechend euren Informationen an.

  • DB_NAME
  • DB_USER
  • DB_PASSWORD
  • DB_HOST --> tragt hier localhost ein

Nachdem ihr die "wp-config.php" angepasst habt, könnt ihr eine Kopie der Datei in ein anderes Verzeichnis kopieren. Damit könnt ihr ganz schnell immer wieder das Backup und den Datenbank-Dump einspielen und die gesicherte Konfigurationsdatei verwenden. Voraussetzung ist natürlich, dass ihr immer die gleiche Datenbank und die gleichen Anmeldedaten verwendet.

sudo cp /var/www/html/blog/wp-config.php /home/BENUTZERNAME/Dokumente

Und der gleiche Weg funktioniert auch in die andere Richtung

sudo cp /home/BENUTZERNAME/Dokumente/ wp-config.php /var/www/html/blog/

Damit sind wir fertig und ihr könnt euren WordPress-Blog im Webbrowser vorläufig nur über http://127.0.0.1/blog/wp-admin aufrufen. (Ändert die URL entsprechend euren Daten ab.)

Je nachdem welche Permalink-Stuktur ihr in eurem WordPress-Blog verwendet könnt ihr noch keine Seiten und Beiträge aufrufen. Schaut euch dazu Fehler 3 an.

Fehler beim Aufruf des Blogs in der neuen Testumgebung

Bei den beiden nachfolgenden Problemen fehlt ein php-Paket, dass sich sehr einfach aus den Ubuntu-Repositories nachinstallieren lässt.

Für die Installation der fehlenden Pakete ist es aber notwendig, dass ihr die installierte PHP-Version kennt.

php -v

Fehler 1: Call to undefined function curl_init()

Die Fehlermeldung erscheint im Webbrowser, beim Versuch die WordPress-Installation aufzurufen.

Error thrown

Call to undefined function curl_init()

Abhilfe schafft die Installation des Pakets curl-Pakets

sudo apt install php7.4-curl
sudo systemctl restart apache2.service

Fehler 2: Class 'DOMDocument' not found

Error thrown

Class 'DOMDocument' not found

Auch bei diesem Fehler hilft die Installation des fehlenden php-Pakets

sudo apt install php7.4-xml
sudo systemctl restart apache2.service

Fehler 3: The requested URL was not found on this server.

Beim Aufruf einer beliebigen Blog-Seite, nicht das Admin-Interface wp-admin, wird euch der Fehler ausgegeben.

404 Not Found

The requested URL was not found on this server.
Apache/2.4.46 (Ubuntu) Server at 127.0.0.1 Port 80

Der Grund besteht wahrscheinlich in eurer genutzten Permalink-Struktur von WordPress. Der Webserver Apache2 unterstützt in der virtuellen Testumgebung keine Pretty Links. Wenn ihr im Admin-Interface von WordPress die Permalink-Struktur auf "Einfach" ändert, könnt ihr alles wie gewohnt aufrufen.

WordPress Permalinks

Quick Fix:

"Einstellungen --> Permalinks --> Einfach"

Die Anpassungen des Apache2 für die Pretty Links habe ich nicht vorgenommen, da mir dafür der Aufwand für meinen Testumgebung zu groß war und ich mit diesem Quick Fix zum Ziel gekommen bin.

Damit sind wir fertig mit der Testumgebung und es sollte damit alles in der virtuelle Box laufen. Ein Testen und Herumspielen ist damit ohne den oben genannten Nervenkitzel möglich.

Fehler mit MariaDB und Adminer

Der Datenbankserver MariaDB kann, wie auch MySQL, aus den Ubuntu-Repositories installiert werden.

sudo apt install mariadb-server

Die Installation und das ersten Anpassungen funktionieren auch alle wunderbar. Der Befehl

sudo mysql_secure_installation

lässt sich ausführen und alle Einstellungen vornehmen.

Jedoch ist die zweite Anpassung bei mir nicht möglich gewesen. Diese Anpassung wird benötigt, damit Adminer einen Zugriff auf den Datenbankserver bekommt. Beim Versuch der Anmeldung mit dem Benutzer "root" kommt sonst die Meldung zurück, dass kein Zugriff auf die Datenbank möglich ist.

...
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
...

Nach der Eingabe des Befehls hat MariaDB mitgeteilt, dass die Syntax fehlerhaft ist. Ich habe die unterschiedlichsten Kombinationen ausprobiert, jedoch ohne Erfolg. Es wurde immer dieser Fehler ausgegeben:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ALTER_USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'passw...' at line 1

Es lässt sich aber MariaDB natürlich auch verwenden, der Import des Datenbankdumps funktioniert auch ohne Probleme wie bei MySQL. Nur die Verwendung des grafischen Tools "Adminer" ist so leider nicht möglich.

Gib mir gerne einen Kaffee ☕ aus ❗️

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj

Source

Bildquelle: Gemeinfrei-ähnlich freigegeben durch unsplash.com Lavi Perchik