前書き

あなたがWordPressの複数のインスタンスを管理するWebサイト管理者であれば、すべてのテーマとプラグインを最新の状態に保つことがいかに反復的な仕事であるかがわかります。 さらに、非常に多くの新しい興味深いテーマやプラグインが1日おきに表示されるため、それらの多くをインストールおよびアンインストールすることになります。

このチュートリアルでは、簡単なPuppetマニフェストとWP-CLIを使用して、WordPressのテーマとプラグインのインストール、削除、更新などのアクティビティを自動化する方法を学習します。

前提条件

次のものが必要です。

  • Ubuntu 14.04ドロップレット

  • sudoユーザー

  • Puppetモジュールとマニフェストの仕組みの基本的な理解。 このチュートリアルを参照して、Puppetのスキルを磨くことができます。https://www.digitalocean.com/community/tutorials/getting-started-with-puppet-code-manifests-and-modules [Puppetを使用して管理するにはあなたのサーバー]

  • WordPress 4.1以降

  • Puppet 3.7.1以降

このチュートリアルを使用して、WordPressとPuppetの両方を設定します。https://www.digitalocean.com/community/tutorials/how-to-create-a-puppet-module-to-automate-wordpress-installation-on-ubuntu-14 -04 [Ubuntu 14.04でのWordPressインストールを自動化するためのPuppetモジュールの作成方法]

手順1-新しいモジュールの作成

このステップでは、https://www.digitalocean.com/community/tutorials/how-to-create-a-puppet-module-to-automate-wordpress-installation-で作成したバニラのWordPressインストールに基づいてビルドしますon-ubuntu-14-04 [最初のチュートリアル]。

モジュールでは、WP-CLI(WordPressコマンドラインインターフェイス)を使用して、ほとんどの操作を実行します。 その名前が示すように、WP-CLIはブラウザーの代わりにコマンドライン(およびスクリプト)を使用してWordPressと対話することを可能にするツールです。

次に、Puppetを使用してWP-CLIとやり取りできるモジュールを作成します。

Puppetモジュールディレクトリを入力します。

cd /etc/puppet/modules

モジュールを「+ wordpress_manager +」と呼びましょう。 新しいディレクトリを作成します。

sudo mkdir /etc/puppet/modules/wordpress_manager

すべてのマニフェストを保存するために、 `+ manifests +`という名前のディレクトリを作成します。

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

ステップ2-WP-CLIをインストールするためのクラスを作成する

このステップでは、WP-CLIのインストールを自動化します。 WP-CLIのインストールは、WordPressを実行しているすべてのサーバーに存在する必要があるため、自動化する必要があります。

このクラスで行うことは次のとおりです。

  • `+ curl +`がインストールされていることを確認してください。 これは、WP-CLIの最新バージョンをダウンロードするために必要です。

  • `+ php5-cli`がインストールされていることを確認してください。

  • `+ curl `を使用してWP-CLIをダウンロードし、 ` / usr / bin +`ディレクトリに配置します。

  • モードを `+ 775 `または ` a + x +`に設定して、WP-CLIを実行可能にします。

`+ nano `を使用して、 ` install.pp +`という名前の新しいファイルを作成します。

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

次のコードを追加します。 インラインコメントは、コードの機能を理解するのに役立ちます。

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']
   }

}

`+ exec `コマンドの ` creates +`属性は、WP-CLIが既にダウンロードされているかどうかを確認するためにあります。 この属性がないと、Puppetはモジュールが使用されるたびにWP-CLIをダウンロードします。

ステップ3-WP-CLIと対話する定義済みのタイプを作成する

テーマを管理するには、WP-CLIの「+ theme 」コマンドを使用する必要があります。 マニフェストでは、activate、delete、install、およびupdateサブコマンドと ` theme a`コマンドを使用します。 同様に、プラグインを管理するには、WP-CLIの `+ plugin `コマンドを使用する必要があります。 activate、deactivate、install、uninstall、およびupdateサブコマンドと ` plugin +`コマンドを使用します。

したがって、定義済みの型には次のパラメーターが必要です。

  • + $ resource_types-値は` + plugin`または `+ theme`のいずれかになります。

  • + $ action +-これはサブコマンドの1つです。

  • + $ resource_name +-プラグインまたはテーマの名前。

  • + $ root_directory +-WordPressがインストールされているディレクトリ内から `+ wp-cli +`コマンドを実行する必要があるため、これは必要かつ重要です。

  • + $ user +-このパラメーターの値は、WordPressインスタンスを所有するUnixユーザーのユーザー名である必要があります。

このタイプで行うことは次のとおりです。

  • WP-CLIがインストールされていることを確認してください

  • 受信したパラメーターに基づいてWP-CLIコマンドを作成および実行します

エラーを回避するには、Puppetの `+ exec `コマンドの ` unless `および ` onlyif +`属性を使用して次の制限を追加します。

  • まだインストールされていない場合にのみ、アイテムをインストールします。 WP-CLIの「+ is-installed +」コマンドは、アイテムがインストールされているかどうかを判断するために使用されます。

  • 既にインストールされている場合にのみ、アイテムをアクティブ化/非アクティブ化/削除/アンインストール/更新します。

`+ resource.pp +`という名前の新しいファイルを作成します。

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

次のコードを追加します。 繰り返しになりますが、インラインコメントは、コードの機能を理解するのに役立ちます。

:デフォルトでは、モジュールはWordpressインストールディレクトリとして `+ / var / www `を使用し、Wordpressファイルの所有者として ` root `を使用します。 環境を反映するために、コードの上部に向かって ` $ root_directory `および ` $ user +`属性の値を変更する必要がある場合があります。

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
       }
   }

}

このモジュールのすべてのWP-CLIコマンドに `+-allow-root +`フラグを使用します。 ルートが所有するWordPressインスタンスを処理するために必要です。 このフラグがないと、WP-CLIをルートとして実行しようとすると失敗し、次のエラーメッセージが表示されます。

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.

Puppetモジュールの準備ができました。 以下に、使用方法を理解するのに役立つ例をいくつか示します。

例1-新しいWordPressテーマを適用する

Puppetモジュールを使用して、新しいWordPressテーマをWordPressインスタンスに適用しましょう。

デフォルトでは、WordPressは `+ twentyfifteen +`テーマを使用します。 表示は次のとおりです。

image:https://assets.digitalocean.com/articles/puppet_wordpress/1.png [デフォルトの外観]

`+ expound +`という名前の新しいテーマをインストールして適用しましょう。 より多くのテーマを見つけるには、https://wordpress.org/themes/ [WordPressのテーマディレクトリ]を参照します。

+ nano +(または選択したエディター)を使用して、 `+ manage_expound_theme.pp +`という名前の新しいファイルを作成します。

nano /tmp/manage_expound_theme.pp

次のコードを追加してください。

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']
}

マニフェストを実行するには、 `+ puppet apply +`コマンドを使用します。

sudo puppet apply /tmp/manage_expound_theme.pp

実行が完了すると、出力は次のようになります。

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

WordPressサイトの `+ http:/// +`にアクセスして、動作中の新しいテーマを確認してください。

image:https://assets.digitalocean.com/articles/puppet_wordpress/2.png [説明テーマ]

例2-テーマを削除する

テーマを削除する場合は、最初に別のテーマをアクティブにする必要があります。 たとえば、 `+ twentyfifteen `テーマに戻りたい場合は、もう一度 ` manage_expound_theme.pp +`を開きます:

nano /tmp/manage_expound_theme.pp

ファイル内のすべてを削除し、次のもので上書きします。

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']
}

マニフェストを再度適用します。

sudo puppet apply /tmp/manage_expound_theme.pp

WordPressサイトの `+ http:/// `にアクセスして、適用された ` twentyfifteen +`テーマを確認できます。

例3-プラグインのアクティブ化

Akismetプラグインはデフォルトでインストールされますが、アクティブ化されていないので、Puppetモジュールを使用して `+ akismet +`プラグインをアクティブ化します。

`+ manage_akismet.pp +`という名前の新しいマニフェストを作成します。

nano /tmp/manage_akismet.pp

次のコードを追加してください。

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

マニフェストを適用します。

sudo puppet apply /tmp/manage_akismet.pp

`+ plugin list`コマンドを実行してAkismetがアクティブ化されたかどうかを確認できます。 デフォルトでは、モジュールはWordPressインストールディレクトリとして `+ / var / www `を使用しますが、これが環境によって異なる場合は、 `-path +`フラグを適切に変更できます。

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

次のような出力が表示されます。

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

例4-プラグインのアンインストール

プラグインをアンインストールする前に、プラグインがアクティブでないことを確認する必要があります。 「+ akismet 」をアンインストールする方法は次のとおりです。 ` manage_akismet.pp +`を開きます。

nano /tmp/manage_akismet.pp

ファイル内のすべてを削除し、次のもので上書きします。

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']
}

マニフェストを再実行します。

sudo puppet apply /tmp/manage_akismet.pp

次に、「+ plugin list」コマンドを再実行します。

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

Akismetがもうリストされていないことがわかります。

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

結論

これで、簡単なPuppetモジュールを使用してWordPressインスタンスのプラグインとテーマを管理する方法がわかりました。 モジュールを使用してさまざまなタスクを実行する方法の例を見てきました。 簡単にするために、このチュートリアルのすべての例では、Puppetのスタンドアロンモードを使用しています。

Puppetを使用して他にできることの例として、Puppetのエージェントマスターモードを使用して複数のホストで同じ操作を実行できます。 必要なのは、それらのホストのノード定義でタイプ `+ wordpress_manager

resource `を使用することだけです。 ` host1 `と ` host2 `という2つのホストでAkismetプラグインを更新するには、Puppet Masterの ` site.pp +`に次のものが含まれている必要があります。

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

WP-CLIは非常に強力で、多くのコマンドを提供します。 このチュートリアルで作成したモジュールを自由に拡張して、WP-CLIコマンドを追加してください。 詳細については、Puppetに関する追加情報がありますhttps://www.digitalocean.com/community/tutorials/getting-started-with-puppet-code-manifests-and-modules [このチュートリアル]; WP-CLIの詳細については、https://www.digitalocean.com/community/tutorials/how-to-use-wp-cli-to-manage-your-wordpress-site-from-the-を参照してください。コマンドライン[このチュートリアル]。