WordPress Automatisierung via Kommandozeile

WordPress ist die OpenSource Komplettlösung schlechthin wenn es um die Erstellung von Webseiten geht. Wie jede Software will WordPress gehegt und gepflegt werden. Wenn man nur eine oder zwei Instanzen betreut, dann nimmt man die manuelle Wartung und Pflege dieser gern in Kauf. Bei steigender Anzahl an Instanzen wächst die Anzahl der Sonderlösungen und die Wartung wird aktiver. 

Daher ergeben sich für mich folgende Anforderungen an die Automatisierungslösung:

 

Ich habe mir das Tool wp-cli genauer angeschaut und festgestellt, dass sich damit alle meine Anforderungen umsetzen lassen.

Installation

Die Installation ist denkbar einfach. Mit folgendem Befehl wird die aktuelle Version des Kommandozeilentools wp-cli mittels cURL heruntergeladen (1) und im aktuellen Verzeichnis mit dem Namen wp gespeichert. Nachdem die Datei wp mit dem Executable-Bit versehen ist (2), kann man diese nun direkt ausführen.

curl -o wp https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp

Ordnung ist das halbe Leben und damit das Script seinen definierten Platz hat, mache ich dieses unter /usr/local/bin global auf dem System verfügbar. Alternativ kann man die Datei auch unter $HOME/bin plazieren.

sudo mv wp /usr/local/bin

Was kann das Tool wp-cli

Das Tool ist in meinen Augen sehr mächtig und läßt keine Wünsch offen. Bei Aufruf von wp erhält man eine Übersicht an Möglichkeiten die das Tool bietet. Hier spricht das Tool von „(sub)commands“ welche ausgeführt werden können. 

Die Übersicht ist wie eine man-page aufgebaut. Mit den Pfeil-Tasten, Bild-Tasten oder mit der Maus läßt sich die Seite durchblättern und die man-page Such-Syntax (mittels „/“) ist ebenfalls verfügbar. Das finde ich eine Sache.

Wie nutze ich wp-cli für mich

Prüfen auf Updates

Mit den folgenden Kommandos kann man sich einen Überblick verschaffen, ob man up2date ist oder neue Updates vorliegen. Hier für den WordPress Core:

user@server:/path/to/site/htdocs$ wp core check-update
+---------+-------------+-------------------------------------------------------------------+
| version | update_type | package_url                                                       |
+---------+-------------+-------------------------------------------------------------------+
| 5.9.1   | minor       | https://downloads.wordpress.org/release/de_DE/wordpress-5.9.1.zip |
+---------+-------------+-------------------------------------------------------------------+

Oder Plugins. Hier sind 9 Plugins installiert und 6 davon brauchen ein Update

user@server:/path/to/site/htdocs$ wp plugin status
9 installed plugins:
  A akismet                             4.2.2
 UA elementor                           3.5.4
 UA header-footer-elementor             1.6.8
 UA essential-addons-for-elementor-lite 5.0.5
 UA fluentform                          4.3.0
 UA happy-elementor-addons              3.4.1
  A mautic-for-fluent-forms             1.0.2
  A two-factor                          0.7.1
 UA unlimited-elements-for-elementor    1.4.99

Legend: A = Active, U = Update Available

Oder Themes. Hier sind 5 themes installiert und alle haben ein Update nötig.

user@server:/path/to/site/htdocs$ wp theme status
5 installed themes:
 UA hello-elementor 2.4.1
 UI twentynineteen  2.1
 UI twentytwenty    1.8
 UI twentytwentyone 1.4
 UI twentytwentytwo 1.0

Legend: A = Active, I = Inactive, U = Update Available

Nach dem Prüfen kommt das Aktualisieren

Im nachfolgenden werden das WordPress core, Plugin, sowie Theme-Update ausgeführt. In den folgenden 3 Screenshots kann man sehen dass wp-cli den Aktualisierungsprozess gut meistert und das Handling des Wartungsmodus übernimmt. 

user@server:/path/to/site/htdocs$ wp core update
Updating to version 5.9.1 (de_DE)...
Herunterladen der Aktualisierung von https://downloads.wordpress.org/release/de_DE/wordpress-5.9.1.zip...
Entpacken der aktualisierten Version …
<p>Einige Übersetzungen benötigen eine Aktualisierung. Warte noch ein paar Sekunden ab, während wir diese ebenfalls aktualisieren.</p>
<div class="update-messages lp-show-latest"><h2>Aktualisierung der Übersetzungen für Elementor (de_DE)&#160;&hellip;</h2><p>Herunterladen der Übersetzung von <span class="code">https://downloads.wordpress.org/translation/plugin/elementor/3.5.4/de_DE.zip</span></p>
<p>Entpacken der aktualisierten Version&#160;&hellip;</p>
<p>Die aktuelle Version wird installiert&#160;&hellip;</p>
<p>Alte Übersetzung wird entfernt&#160;&hellip;</p>
<p>Die Übersetzung wurde erfolgreich aktualisiert.</p>
</div><div class="update-messages lp-show-latest"><h2>Aktualisierung der Übersetzungen für Fluent Forms (de_DE)&#160;&hellip;</h2><p>Herunterladen der Übersetzung von <span class="code">https://downloads.wordpress.org/translation/plugin/fluentform/4.3.0/de_DE.zip</span></p>
<p>Entpacken der aktualisierten Version&#160;&hellip;</p>
<p>Die aktuelle Version wird installiert&#160;&hellip;</p>
<p>Alte Übersetzung wird entfernt&#160;&hellip;</p>
<p>Die Übersetzung wurde erfolgreich aktualisiert.</p>
</div><div class="update-messages lp-show-latest"><h2>Aktualisierung der Übersetzungen für Two Factor (de_DE)&#160;&hellip;</h2><p>Herunterladen der Übersetzung von <span class="code">https://downloads.wordpress.org/translation/plugin/two-factor/0.7.1/de_DE.zip</span></p>
<p>Entpacken der aktualisierten Version&#160;&hellip;</p>
<p>Die aktuelle Version wird installiert&#160;&hellip;</p>
<p>Alte Übersetzung wird entfernt&#160;&hellip;</p>
<p>Die Übersetzung wurde erfolgreich aktualisiert.</p>
</div><script type="text/javascript">
					(function( wp ) {
						if ( wp && wp.updates && wp.updates.decrementCount ) {
							wp.updates.decrementCount( "translation" );
						}
					})( window.wp );
				</script>
Success: WordPress updated successfully.
user@server:/path/to/site/htdocs$ wp theme update --all
Anschalten des Wartungsmodus …
Herunterladen der Aktualisierung von https://downloads.wordpress.org/theme/hello-elementor.2.5.0.zip...
Entpacken der aktualisierten Version …
Die aktuelle Version wird installiert …
Die alte Version des Themes wird entfernt...
Das Theme wurde erfolgreich aktualisiert.
Herunterladen der Aktualisierung von https://downloads.wordpress.org/theme/twentynineteen.2.2.zip...
Using cached file '/home/swoodlede/.wp-cli/cache/theme/twentynineteen-2.2.zip'...
...
Das Theme wurde erfolgreich aktualisiert.
Abschalten des Wartungsmodus …
+-----------------+-------------+-------------+---------+
| name            | old_version | new_version | status  |
+-----------------+-------------+-------------+---------+
| hello-elementor | 2.4.1       | 2.5.0       | Updated |
| twentynineteen  | 2.1         | 2.2         | Updated |
| twentytwenty    | 1.8         | 1.9         | Updated |
| twentytwentyone | 1.4         | 1.5         | Updated |
| twentytwentytwo | 1.0         | 1.1         | Updated |
+-----------------+-------------+-------------+---------+
Success: Updated 5 of 5 themes.
user@server:/path/to/site/htdocs$ wp plugin update --all
Anschalten des Wartungsmodus …
Herunterladen der Aktualisierung von https://downloads.wordpress.org/plugin/elementor.3.5.6.zip...
Entpacken der aktualisierten Version …
Die aktuelle Version wird installiert …
Die alte Version des Plugins wird entfernt...
Das Plugin wurde erfolgreich aktualisiert.
Herunterladen der Aktualisierung von https://downloads.wordpress.org/plugin/header-footer-elementor.1.6.9.zip...
...
Das Plugin wurde erfolgreich aktualisiert.
Abschalten des Wartungsmodus …
+-------------------------------------+-------------+-------------+---------+
| name                                | old_version | new_version | status  |
+-------------------------------------+-------------+-------------+---------+
| elementor                           | 3.5.4       | 3.5.6       | Updated |
| header-footer-elementor             | 1.6.8       | 1.6.9       | Updated |
| essential-addons-for-elementor-lite | 5.0.5       | 5.0.9       | Updated |
| fluentform                          | 4.3.0       | 4.3.3       | Updated |
| happy-elementor-addons              | 3.4.1       | 3.4.4       | Updated |
| unlimited-elements-for-elementor    | 1.4.99      | 1.5.3       | Updated |
+-------------------------------------+-------------+-------------+---------+
Success: Updated 6 of 6 plugins.

Automatisierung

Nachfolgend stelle ich hier ein Script zur Verfügung zum automatischen aktualisieren des WordPress Cores, sowie Plugins und Themes. Dieses nutze ich um meine WordPress Instanzen auf dem aktuellen Stand zu halten.

Ich lasse dieses jedoch nicht voll automatisiert laufen auf produktiven Systemen, da es in diesem Zustand nicht über die geeigneten Absicherungsmaßnahmen verfügt. Aber selbst die teilautomatisierte (manuelle) Ausführung hilft bereits viel Zeit einzusparen, insbesondere wenn es darum geht mehrere Instanzen auf den aktuellen Stand zu bringen.

#!/bin/bash


if [ $# -ne 1 ]; then
        echo "Usage: $0 <path to wordpress installation>" && exit 1
fi

if [ ! -f $1/wp-login.php ]; then
        echo "ERROR - wrong path to wordpress installation" && exit 1
fi

PHP="/usr/bin/php"
WP="$PHP /usr/local/bin/wp"
PATH="--path=$1"


echo "Core update"
$WP $PATH core update
$WP $PATH core update-db

echo "Plugin and Theme update"
$WP $PATH plugin update --all
$WP $PATH theme update --all

echo "Elementor DB update"
$WP $PATH elementor update db

echo "Language update"
$WP $PATH language core update
$WP $PATH language plugin update --all
$WP $PATH language theme update --all

Das Script kann unter Angabe des Pfades zur jeweiligen WordPress Installation aufgerufen werden. Als Parameter kann der Pfad full-qualified angegeben werden:

/usr/local/bin/wp-upgrade-all.sh /path/to/my/wordpressinstallation

Oder auch absolut. Hier im Beispiel befinden wir uns direkt im WordPress installationsverzeichnis. Dann reicht ein „.“ als relative Pfadangabe.

cd /path/to/my/wordpressinstallation
/usr/local/bin/wp-upgrade-all.sh .

Bildnachweise:

  • https://pixabay.com
  • https://de.wikipedia.org/wiki/WordPress.com

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert