Automatisierte WordPress Installation

Keywords: #automatiierung #bash #installation #script #setup #wordpress

Et voilá. Ein BASH Script, um WordPress automatisiert über die Kommandozeile zu installieren, inklusive Theme und beliebigen Plugins sowie - wenn benötigt - zufälligen Beiträgen, Kategorien, Tags und Bildern.

Warnung!

Du solltest geübt im Umgang mit der Shell, Bash und WordPress sein und unbedingt Backups nutzen. Das Script verwendet, wenn der entsprechende Parameter gesetzt ist, den Befehl “rm -rf”, um einen Ordner komplett zu löschen. Dieser Schritt lässt sich nicht widerrufen. Außerdem wird, sofern per Parameter gefordert, eine Datenbank mit “DROP DATABASE” komplett entfernt. Wenn du das Script auf eine existierende WordPress-Installation oder Datenbank anwendest, können existierende Daten überschrieben werden!

Funktionsweise

Das Script wird über die Kommandozeile aufgerufen und nutzt die WordPress Kommandozeilen-Benutzeroberfläche, um WordPress zu installieren sowie samt Themes und Plugins einzurichten. Du kannst außerdem beliebig viele Beiträge anlegen. Die Inhalte für die Beiträge stammen von einem Online-Dienst für zufällige englische Texte: metaphorpsum.com/paragraphs. Außerdem werden zufällige Textauszüge (Excerpts) sowie Schlagwörter (Tags) und sogar Bilder jedem Beitrag hinzugefügt. Beiträge werden außerdem Kategorien zugeordnet. Diese werden ebenfalls zufällig bis zu einer Tiefe von 2 Ebenen erzeugt.

Installation

Du findest den Sourcecode auf github: https://github.com/nickyreinert/AutomatedWordPressInstallation.

Nach der Installation kopierst du die Datei settings-template zu .settings, um in dieser Datei die Einstellungen für deine WordPress-Installation vorzunehmen. Du startest den Prozess mit bash start.sh oder setzt den Ausführen-Flag für bash.sh um diese direkt auszuführen:

chmod u+x bash.sh
./bash.sh

Zufällige Inhalte

Das Script ermöglicht das Anlegen von beliebig vielen zufälligen Beiträgen in beliebig vielen zufälligen Kategorien. Was genau dabei passiert, beschreibe ich hier kurz:

Zunächst wird eine Kategorie erzeugt. Dazu wird von der folgenden API ein zufälliges Wort abgerufen: https://random-word-api.herokuapp.com/word?swear=0&number=

Dieser Kategorie wird dann ein Beitrag wird mit einer beliebigen Anzahl von Absätzen von dieser API zugeordnet: http://metaphorpsum.com/paragraphs/. Der Beitrag erhält einen zufälligen Titel (von dort: http://metaphorpsum.com/sentences), einen Textauszug (gleiche API), sowie eine beliebige Anzahl zufälliger Tags (Schlagwörter), ebenfalls von random-word-api.herokuapp.com. Dann werden für diesen Beitrag Revisionen erzeugt - auch diese in beliebiger Höhe. Abschließend erhält jeder Beitrag ein zufälliges Featured Image sowie ein weiteres zufälliges Bild am Ende des Fließtextes.

Je nachdem, wieviele Beiträge und Kategorien bzw. Sub-Kategorien eingerichtet werden soll, wird dieser Prozess natürlich wiederholt.

(Bisher werden die Inhalte leider nur auf Englisch eingefügt)

Einstellungen

Alle Einstellungen befinden sich in der Datei .settings und werden im Folgenden beschrieben. Der PROJECT-Parameter kann im weiteren Verlauf als Platzhalter verwendet werden und sollte keine Leerzeichen oder Sonderzeichen enthalten:

PROJECT=myWordPressBlog

Datenbank

Du kannst eine neue Datenbank anlegen (CREATE_DB) oder auf eine existierende Datenbank zurückgreifen.

DB_DROP=yes|no
CREATE_DB=yes|no
DB_ROOT=root
DB_ROOT_PASSWORD=secret

Willst du eine frische Datenbank anlegen, solltest du die alte Datenbank mit DB_DROP=yes löschen. Soll eine neue Datenbank angelegt werden, müssen die Zugangsdaten für einen privilegierten Nutzer angegeben werden: Mit den folgenden Parameter legst du fest, wie WordPress auf die Datenbank zugreift:

DB_HOST=127.0.0.1
DB_NAME="${PROJECT}_database"
DB_PREFIX="wp_"

ADD_DB_USER=yes|no
DB_USER="${PROJECT}_dbuser"
DB_USER_PASSWORD=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)

Das Passwort wird im Beispiel zufällig erzeugt, willst du ein eigenes Passwort verwenden, kannst du den Parameter überschreiben, z.B:

DB_USER_PASSWORT=secret

Der DB-Nutzer wird natürlich nur angelegt, wenn ADD_DB_USER=yes gesetzt ist. Andernfalls musst du hier die passenden Zugangsdaten angeben.

WordPress

Du kannst auf eine existierende Installation zurückgreifen, um z.B. dort Beiträge hinzuzufügen, oder WordPress komplett neu installieren. Hier kannst du z.B. auch den oben festgelegten PROJECT-Parameter nutzen:

WP_PATH="/var/nginx/htdocs/${PROJECT}/"
INSTALL_CORE=yes|no
WP_DROP=yes|no

Mit WP_DROP kannst du festlegen, dass der Ordner WP_PATH komplett gelöscht wird. Vorsicht ist hier also geboten! Die folgenden Parameter betreffen deine allgemeinen WordPress-Einstellungen. Bei der URL kannst du wieder den PROJECT-Platzhalter nutzen.

WP_TITLE='WordPress Test'
URL="https://blog.example.org/${PROJECT}"
WP_ADMIN_NAME=admin
WP_ADMIN_EMAIL=mail@example.org
WP_ADMIN_PASSWORD=secret

Willst du ein eigene Passwort vergeben, kannst du auch hier ein zufälliges Passwort erzeugen lassen:

WP_ADMIN_PASSWORD=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)

Theme und Plugins

Mit den folgenden Parametern legst du fest, welches Theme eingerichtet und welche Plugins installiert werden sollen. Der Theme-Name ist der Slug des Themes:

INSTALL_THEME=yes|no
THEME="elementor"

INSTALL_PLUGINS=no
PLUGINS="elementor wordpress-seo tinymce-advanced ninja-forms shortcodes-ultimate instagram-feed ml-slider the-events-calendar amp contact-widgets coblocks woocommerce"

Du kannst mehrere Plugins angeben, wenn diese per Leerzeichen voneinander getrennt sind.

Inhalte

Der nächste Abschnitt regelt das (zufällige) Anlegen von Beiträgen, Kategorien usw. Natürlich musst du keine Inhalte anlegen. Ist RANDOMIZE_EVERY_ITEM auf yes gesetzt, wird jeder Beitrag wie oben zufällig erzeugt. Da das eine Menge HTTP-Requests erfordert, kannst du den Parameter auch auf no setzen. In dem Fall wird jede Zufalls-API genau einmal abgerufen. Der ganze Prozess wird dadurch maßgeblich beschleunigt.

ADD_CONTENT=yes|no
META_INPUT=""
RANDOMIZE_EVERY_ITEM=yes|no

Manche Themes, wie z.B. Elementor, fügen den Inhalten, also Beiträgen, bestimmte Meta-Informationen hinzu. Beim automatisierten Anlegen von Beiträgen passiert das allerdings nicht automatisch. Du kannst das hier also entsprechend einrichten. Der Wert wird als JSON übergeben. Achte auf das einfache Anführungszeichen.

META_INPUT='{"_elementor_edit_mode":"<![CDATA[builder]]>","_elementor_template_type":"<![CDATA[kit]]>","_elementor_version":"<![CDATA[2.9.13]]>"}'

Die folgenden Paremeter legen fest, wieviele Inhalte du erzeugen möchtest:

COUNT_CATEGORIES_LEVEL1=10
COUNT_CATEGORIES_LEVEL2=5

COUNT_POSTS=100
COUNT_PARAGRAPHS=20
COUNT_POST_REVISIONS=5
COUNT_TAGS=20

Im Beispiel werden 10 Haupt-Kategorien mit jeweils 5 Unter-Kategorien angelegt. Jede Kategorie wird mit 100 Posts befüllt und jeder Post erhält 20 Tags und 5 Revisionen. Das ergibt also 10 * 5 * 100 * 5 Beiträge = 25.000 Beiträge! In diesem Fall macht es Sinn RANDOMIZE_EVERY_ITEM auf no zu setzen, da du sonst mehre tausende Anfragen an die Zufalls-APIs generieren würdest. COUNT_PARAGRAPHS legt die Länge jedes Beitrags in Absätzen fest.

Standard-Parameter

Die folgenden Parameter musst du in der Regel nicht anpassen. WP_CLI legt den Pfad zur WordPress Kommandozeilen Oberfläche fest. Wird die Datei nicht gefunden, muss WP CLI installiert werden. Dazu dient der Parameter WP_CLI_SOURCE.

WP_CLI_EXEC=~/wp-cli.phar
WP_CLI_SOURCE=https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

Im folgenden werden die Quellen für die APIs festgelegt. Hier solltest du nichts ändern, da das Script für die Zusammenarbeit mit diesen Quellen eingerichtet ist. Einzig beim Parameter RANDOM_IMAGE_API_URI kannst du bei Bedarf in der URL die Auflösung der abgefragten Bilder festlegen.

RANDOM_WORD_API_URL='https://random-word-api.herokuapp.com/word?swear=0&number='
RANDOM_SENTENCE_API_URL='http://metaphorpsum.com/sentences/'
RANDOM_TEXT_API_URL='http://metaphorpsum.com/paragraphs/'
RANDOM_IMAGE_API_URI='https://picsum.photos/200/300.jpg'