開発者ドキュメント

Ubuntu14.04でPuppetを使用してWordPressのテーマとプラグインを管理する方法

序章

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

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

前提条件

次のものが必要になります。

このチュートリアルを使用して、WordPressとPuppetの両方をセットアップします。 Ubuntu14.04でWordPressのインストールを自動化するPuppetモジュールを作成する方法

ステップ1—新しいモジュールを作成する

このステップでは、最初のチュートリアルで作成したバニラWordPressインストールに基づいて構築します。

このモジュールでは、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を実行しているすべてのサーバーに存在する必要があるため、自動化する必要があります。

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

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コマンドを使用する必要があります。 マニフェストでは、themeコマンドで、activate、delete、install、およびupdateサブコマンドを使用します。 同様に、プラグインを管理するには、WP-CLIのpluginコマンドを使用する必要があります。 pluginコマンドでは、アクティブ化、非アクティブ化、インストール、アンインストール、および更新のサブコマンドを使用します。

したがって、定義されたタイプには次のパラメーターが必要です。

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

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

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

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

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

:デフォルトでは、モジュールは/var/wwwをWordpressインストールディレクトリとして使用し、rootをWordpressファイルの所有者として使用します。 環境を反映するために、$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フラグを使用します。 rootが所有するWordPressインスタンスを処理するために必要です。 このフラグがないと、rootとして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テーマを使用します。 外観は次のとおりです。

expoundという名前の新しいテーマをインストールして適用しましょう。 その他のテーマを見つけるには、WordPressのテーマディレクトリを参照してください。

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

nano /tmp/manage_expound_theme.pp

次のコードを追加します。

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

wordpress_manager::resource { 'activate expound':
    resource_name => "expound",
    resource_type => "theme",
    action => "activate",
    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://your_server_ip/にアクセスして、新しいテーマの動作を確認してください。

例2—テーマを削除する

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

nano /tmp/manage_expound_theme.pp

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

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

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

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

sudo puppet apply /tmp/manage_expound_theme.pp

これで、WordPressサイトのhttp://your_server_ip/にアクセスして、twentyfifteenテーマが適用されていることを確認できます。

例3—プラグインをアクティブ化する

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

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

nano /tmp/manage_akismet.pp

次のコードを追加します。

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

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

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 | active   | 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 => "akismet",
    resource_type => "plugin",
    action => "deactivate"
}

wordpress_manager::resource { 'uninstall akismet':
    resource_name => "akismet",
    resource_type => "plugin",
    action => "uninstall",
    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を使用するだけです。 host1host2という名前の2つのホストでAkismetプラグインを更新するには、Puppetマスターのsite.ppに次のものが含まれている必要があります。

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

WP-CLIは非常に強力で、多くのコマンドを提供します。 このチュートリアルで作成したモジュールを自由に拡張して、WP-CLIコマンドを追加してください。 詳細については、このチュートリアルにPuppetに関する追加情報があります。 WP-CLIの詳細については、このチュートリアルを参照してください。

モバイルバージョンを終了