Verwendung von Puppet zum Verwalten von WordPress-Themes und -Plugins unter Ubuntu 14.04

Einführung

Wenn Sie ein Website-Administrator sind, der mehrere Instanzen von WordPress verwaltet, wissen Sie, wie sich ein Job wiederholt, um alle Ihre Designs und Plugins auf dem neuesten Stand zu halten. Da jeden zweiten Tag so viele neue und interessante Themen und Plugins auftauchen, müssen Sie viele von ihnen installieren und deinstallieren.

In diesem Tutorial lernen Sie, wie Sie einfache Puppet-Manifeste und WP-CLI verwenden, um Aktivitäten wie das Installieren, Löschen und Aktualisieren von WordPress-Themes und -Plugins zu automatisieren.

Voraussetzungen

Sie benötigen Folgendes:

  • Ein Ubuntu 14.04 Droplet

  • Ein sudo Benutzer

  • Grundlegendes Verständnis der Funktionsweise von Puppet-Modulen und -Manifesten. In diesem Tutorial können Sie Ihre Puppet-Fähigkeiten auffrischen: How To Use Puppet To Manage Ihre Server

  • WordPress 4.1 oder neuer

  • Puppet 3.7.1 oder neuer

Verwenden Sie dieses Tutorial, um sowohl WordPress als auch Puppet einzurichten: https://www.digitalocean.com/community/tutorials/how-to-create-a-puppet-module-to-automate-wordpress-installation-on-ubuntu-14 -04 [Erstellen eines Puppet-Moduls zur Automatisierung der WordPress-Installation unter Ubuntu 14.04]

Schritt 1 - Erstellen Sie ein neues Modul

In diesem Schritt bauen wir auf der Vanilla WordPress-Installation auf, die wir unter https://www.digitalocean.com/community/tutorials/how-to-create-a-puppet-module-to-automate-wordpress-installation- erstellt haben. on-ubuntu-14-04 [das erste Tutorial].

Unser Modul wird WP-CLI (WordPress Command Line Interface) verwenden, um die meisten seiner Operationen durchzuführen. Wie der Name schon sagt, ist WP-CLI ein Tool, mit dem wir mit WordPress über die Befehlszeile (und Skripte) anstelle eines Browsers interagieren können.

Erstellen Sie nun ein Modul, mit dem Sie mit Puppet mit WP-CLI interagieren können.

Rufen Sie das Puppet-Modulverzeichnis auf.

cd /etc/puppet/modules

Nennen wir das Modul "+ wordpress_manager +". Erstellen Sie ein neues Verzeichnis dafür.

sudo mkdir /etc/puppet/modules/wordpress_manager

Erstellen Sie ein Verzeichnis mit dem Namen "+ manifests +", um alle seine Manifeste zu speichern.

sudo mkdir /etc/puppet/modules/wordpress_manager/manifests

Schritt 2 - Erstellen Sie eine Klasse zum Installieren von WP-CLI

In diesem Schritt automatisieren wir die Installation von WP-CLI. Die Installation von WP-CLI muss automatisiert werden, da sie auf jedem Server vorhanden sein muss, auf dem WordPress ausgeführt wird.

Folgendes machen wir in dieser Klasse:

  • Stellen Sie sicher, dass "+ curl +" installiert ist. Dies ist erforderlich, um die neueste Version von WP-CLI herunterzuladen.

  • Stellen Sie sicher, dass + php5-cli installiert ist.

  • Laden Sie WP-CLI mit + curl + herunter und platzieren Sie es im Verzeichnis + / usr / bin +.

  • Machen Sie WP-CLI ausführbar, indem Sie den Modus auf "+ 775 " oder " a + x +" setzen.

Verwenden Sie "+ nano ", um eine neue Datei mit dem Namen " install.pp +" zu erstellen.

sudo nano /etc/puppet/modules/wordpress_manager/manifests/install.pp

Fügen Sie den folgenden Code hinzu. Die Inline-Kommentare sollen Ihnen helfen, die Funktionsweise des Codes zu verstehen:

class wordpress_manager::install {

   # Install curl
   package { 'curl':
       ensure => latest
   }

   # Install php5-cli
   package { 'php5-cli':
       ensure => latest
   }

   # Download WP-CLI using curl
   exec { 'Install WP CLI':
       command => "/usr/bin/curl -o /usr/bin/wp-cli -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar",
       require => [ Package['curl'], Package['php5-cli'] ],
       creates => "/usr/bin/wp-cli"
   }

   # Change the mode of WP-CLI to a+x
   file { '/usr/bin/wp-cli':
       mode => "775",
       require => Exec['Install WP CLI']
   }

}

Das Attribut "+ create" im Befehl "+ exec +" dient zur Überprüfung, ob WP-CLI bereits heruntergeladen wurde. Ohne dieses Attribut lädt Puppet bei jeder Verwendung des Moduls WP-CLI herunter.

Schritt 3 - Erstellen Sie einen definierten Typ für die Interaktion mit WP-CLI

Zum Verwalten von Themen sollte der Befehl WP-CLI + theme a verwendet werden. In unserem Manifest verwenden wir die Unterbefehle "Aktivieren", "Löschen", "Installieren" und "Aktualisieren" mit dem Befehl "+ theme a". Ebenso sollte zum Verwalten von Plugins der Befehl + plugin + von WP-CLI verwendet werden. Wir verwenden die Unterbefehle "Aktivieren", "Deaktivieren", "Installieren", "Deinstallieren" und "Aktualisieren" mit den Befehlen "+ plugin +".

Daher benötigt unser definierter Typ die folgenden Parameter:

  • + $ resource_types - Sein Wert ist entweder` + plugin` oder + theme.

  • + $ action + - Dies ist einer der Unterbefehle.

  • + $ resource_name + - Der Name des Plugins oder Themas.

  • + $ root_directory + - Dies ist notwendig und wichtig, da der Befehl + wp-cli + in dem Verzeichnis ausgeführt werden muss, in dem WordPress installiert ist.

  • + $ user + - Der Wert dieses Parameters sollte der Benutzername des Unix-Benutzers sein, dem die WordPress-Instanz gehört.

In dieser Art machen wir Folgendes:

  • Stellen Sie sicher, dass WP-CLI installiert ist

  • Erstellen Sie den WP-CLI-Befehl und führen Sie ihn basierend auf den empfangenen Parametern aus

Um Fehler zu vermeiden, fügen Sie die folgenden Einschränkungen mit den Attributen "" und " onlyif " des Puppet-Befehls " exec +" hinzu:

  • Installieren Sie ein Element nur, wenn es noch nicht installiert ist. Mit dem Befehl "+ ist installiert +" in WP-CLI können Sie feststellen, ob das Objekt installiert ist oder nicht.

  • Aktivieren / Deaktivieren / Löschen / Deinstallieren / Aktualisieren eines Elements nur, wenn es bereits installiert ist.

Erstellen Sie eine neue Datei mit dem Namen "+ resource.pp +".

sudo nano /etc/puppet/modules/wordpress_manager/manifests/resource.pp

Fügen Sie den folgenden Code hinzu. Auch hier sollten die Inline-Kommentare Ihnen helfen, die Funktionsweise des Codes zu verstehen.

  • Hinweis *: Standardmäßig verwendet unser Modul "+ / var / www " als Wordpress-Installationsverzeichnis und " root " als Eigentümer der Wordpress-Dateien. Möglicherweise müssen Sie die Werte der Attribute " $ root_directory " und " $ user +" oben im Code ändern, um Ihre Umgebung widerzuspiegeln.

define wordpress_manager::resource (
   $resource_name,
   $resource_type,
   $root_directory = "/var/www/",
   $action,
   $user = "root",
) {

   # Make sure WP_CLI is installed
   require wordpress_manager::install

   $wp_cli = "/usr/bin/wp-cli --allow-root"

   # Install the theme or plugin unless it is already installed.
   if $action == "install" {
       exec { "Install $resource_name":
           command => "$wp_cli $resource_type $action $resource_name",
           unless => "$wp_cli $resource_type is-installed $resource_name",
           cwd => $root_directory,
           user => $user
       }
   }

   # Activate or update the theme or plugin only if it is currently installed.
   if $action == "activate" or $action == "update" {
       exec { "$action $resource_name":
           command => "$wp_cli $resource_type $action $resource_name",
           onlyif => "$wp_cli $resource_type is-installed $resource_name",
           cwd => $root_directory,
           user => $user
       }
   }

   # Uninstall or deactivate a plugin only if it is currently installed.
   if $resource_type == "plugin" {
       if $action == "uninstall" or $action == "deactivate" {
           exec { "$action $resource_name":
               command => "$wp_cli plugin $action $resource_name",
               onlyif => "$wp_cli plugin is-installed $resource_name",
               cwd => $root_directory,
               user => $user
           }
       }
   }

   # Delete a theme only if it is currently installed.
   if $action == "delete" and $resource_type == "theme" {
       exec { "$action $resource_name":
           command => "$wp_cli theme $action $resource_name",
           onlyif => "$wp_cli theme is-installed $resource_name",
           cwd => $root_directory,
           user => $user
       }
   }

}

Wir verwenden das + - allow-root + Flag für alle WP-CLI-Befehle in diesem Modul. Es ist erforderlich, um WordPress-Instanzen zu verarbeiten, deren Eigentümer root ist. Ohne dieses Flag schlägt der Versuch fehl, WP-CLI als Root auszuführen. Die Fehlermeldung lautet:

Error: YIKES! It looks like you're running this as root. You probably meant to run this as the user that your WordPress install exists under.

Unser Puppet-Modul ist jetzt fertig. Im Folgenden finden Sie einige Beispiele, anhand derer Sie verstehen, wie Sie es verwenden können.

Beispiel 1 - Wende ein neues WordPress-Theme an

Verwenden Sie unser Puppet-Modul, um ein neues WordPress-Design auf eine WordPress-Instanz anzuwenden.

Standardmäßig verwendet WordPress das Thema "+ fünfundzwanzig +". So sieht es aus:

Lassen Sie uns ein neues Design mit dem Namen "+ erkläre +" installieren und anwenden. Weitere Themen finden Sie unter WordPress’s Themes Directory.

Verwenden Sie "+ nano " (oder den Editor Ihrer Wahl), um eine neue Datei mit dem Namen " manage_expound_theme.pp +" zu erstellen.

nano /tmp/manage_expound_theme.pp

Fügen Sie den folgenden Code hinzu:

wordpress_manager::resource { 'install expound':
   resource_name => ,
   resource_type => ,
   action =>
}

wordpress_manager::resource { 'activate expound':
   resource_name => ,
   resource_type => ,
   action => ,
   require => WordPress_manager::Resource['install expound']
}

Verwenden Sie den Befehl + puppet apply +, um das Manifest auszuführen.

sudo puppet apply /tmp/manage_expound_theme.pp

Nach Abschluss des Laufs sollte die Ausgabe folgendermaßen aussehen:

Notice: Compiled catalog for zona-virtualbox in environment production in 0.81 seconds
Notice: /Stage[main]/Main/WordPress_manager::Resource[install expound]/Exec[Install expound]/returns: executed successfully
Notice: /Stage[main]/Main/WordPress_manager::Resource[activate expound]/Exec[activate expound]/returns: executed successfully
Notice: Finished catalog run in 13.72 seconds

Besuchen Sie Ihre WordPress-Site unter + http: /// +, um das neue Thema in Aktion zu sehen:

Beispiel 2 - Löschen eines Themas

Wenn Sie ein Thema löschen möchten, sollten Sie zuerst ein anderes Thema aktivieren. Wenn Sie beispielsweise zum Thema "+ fünfundzwanzig " zurückkehren möchten, öffnen Sie " manage_expound_theme.pp +" erneut:

nano /tmp/manage_expound_theme.pp

Löschen Sie alles in der Datei und überschreiben Sie es mit:

wordpress_manager::resource { 'activate twentyfifteen':
   resource_name => ,
   resource_type => ,
   action =>
}

wordpress_manager::resource { 'delete expound':
   resource_name => ,
   resource_type => ,
   action => ,
   require => WordPress_manager::Resource['activate twentyfifteen']
}

Wenden Sie das Manifest erneut an.

sudo puppet apply /tmp/manage_expound_theme.pp

Sie können jetzt Ihre WordPress-Site unter + http: /// + besuchen, um das Thema + fünfundzwanzig + anzuwenden.

Beispiel 3 - Aktivieren Sie ein Plugin

Das Akismet-Plugin ist standardmäßig installiert, aber nicht aktiviert. Verwenden Sie daher unser Puppet-Modul, um das Plugin "+ akismet +" jetzt zu aktivieren.

Erstellen Sie ein neues Manifest mit dem Namen "+ manage_akismet.pp +".

nano /tmp/manage_akismet.pp

Fügen Sie den folgenden Code hinzu:

wordpress_manager::resource { 'activate akismet':
   resource_name => ,
   resource_type => ,
   action =>
}

Wenden Sie das Manifest an.

sudo puppet apply /tmp/manage_akismet.pp

Sie können überprüfen, ob Akismet aktiviert wurde, indem Sie den Befehl + plugin list ausführen. Standardmäßig verwendet unser Modul "+ / var / www " als WordPress-Installationsverzeichnis. Wenn dies jedoch für Ihre Umgebung anders ist, können Sie das Flag " - path +" entsprechend ändern.

wp-cli --allow-root --path=/var/www/ plugin list

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

+---------+----------+--------+---------+
| name    | status   | update | version |
+---------+----------+--------+---------+
| akismet |    | none   | 3.0.4   |
| hello   | inactive | none   | 1.6     |
+---------+----------+--------+---------+

Beispiel 4 - Deinstallieren Sie ein Plugin

Bevor Sie ein Plugin deinstallieren können, sollten Sie sicherstellen, dass es nicht aktiv ist. Hier erfahren Sie, wie Sie "+ akismet " deinstallieren können. Öffnen Sie " manage_akismet.pp +".

nano /tmp/manage_akismet.pp

Löschen Sie alles in der Datei und überschreiben Sie es mit:

wordpress_manager::resource { 'deactivate akismet':
   resource_name => ,
   resource_type => ,
   action =>
}

wordpress_manager::resource { 'uninstall akismet':
   resource_name => ,
   resource_type => ,
   action => ,
   require => WordPress_manager::Resource['deactivate akismet']
}

Führen Sie das Manifest erneut aus.

sudo puppet apply /tmp/manage_akismet.pp

Führen Sie nun den Befehl + plugin list erneut aus.

wp-cli --allow-root --path=/var/www/ plugin list

Sie werden sehen, dass Akismet nicht mehr aufgeführt ist.

+---------+----------+--------+---------+
| name    | status   | update | version |
+---------+----------+--------+---------+
| hello   | inactive | none   | 1.6     |
+---------+----------+--------+---------+

Fazit

Sie wissen jetzt, wie Sie die Plugins und Designs Ihrer WordPress-Instanz mithilfe eines einfachen Puppet-Moduls verwalten. Sie haben Beispiele dafür gesehen, wie Sie mit dem Modul verschiedene Aufgaben ausführen können. Der Einfachheit halber verwenden alle Beispiele in diesem Tutorial den Standalone-Modus von Puppet.

Als Beispiel für eine andere Möglichkeit, die Sie mit Puppet ausführen können, können Sie dieselben Vorgänge auf mehreren Hosts ausführen, indem Sie den Agent-Master-Modus von Puppet verwenden. Sie müssen lediglich den Typ "+ wordpress_manager

resource " in den Knotendefinitionen dieser Hosts verwenden. Um das Akismet-Plugin auf zwei Hosts mit den Namen " host1 " und " host2 " zu aktualisieren, sollte die " site.pp +" Ihres Puppet Masters Folgendes enthalten:

node 'host1', 'host2' {
   wordpress_manager::resource { 'update akismet':
       resource_name => ,
       resource_type => ,
       action =>
   }
}

WP-CLI ist sehr leistungsfähig und bietet viele Befehle. Sie können das in diesem Lernprogramm erstellte Modul jederzeit erweitern, um weitere WP-CLI-Befehle hinzuzufügen. Weitere Informationen zu Puppet finden Sie unter in this tutorial. Weitere Informationen zu WP-CLI finden Sie unter https://www.digitalocean.com/community/tutorials/how-to-use-wp-cli-to-manage-your-wordpress-site-from-the- Befehlszeile [dieses Tutorial].