序章

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

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

前提条件

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

  • Ubuntu14.04ドロップレット
  • sudoユーザー
  • Puppetモジュールとマニフェストがどのように機能するかについての基本的な理解。 このチュートリアルを参照して、Puppetのスキルを磨くことができます。Puppetを使用してサーバーを管理する方法
  • WordPress4.1以降
  • Puppet3.7.1以降

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

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

  • 確実に curl がインストールされています。 これは、WP-CLIの最新バージョンをダウンロードするために必要です。
  • 確実に php5-cli がインストールされています。
  • を使用してWP-CLIをダウンロードする curl に配置します /usr/bin ディレクトリ。
  • モードをに設定して、WP-CLIを実行可能にします。 775 また a+x.

使用する 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']
    }

}

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

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

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

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

  • $resource_type -その値は次のいずれかになります plugin また theme.
  • $action -これはサブコマンドの1つになります。
  • $resource_name -プラグインまたはテーマの名前。
  • $root_directory -これは必要かつ重要です。 wp-cli コマンドは、WordPressがインストールされているディレクトリ内から実行する必要があります。
  • $user -このパラメーターの値は、WordPressインスタンスを所有するUnixユーザーのユーザー名である必要があります。

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

  • WP-CLIがインストールされていることを確認してください
  • 受け取ったパラメータに基づいてWP-CLIコマンドを作成して実行します

エラーを回避するために、を使用して次の制限を追加します unlessonlyif パペットの属性 exec 指図:

  • アイテムがまだインストールされていない場合にのみインストールしてください。 WP-CLIの is-installed コマンドは、アイテムがインストールされているかどうかを判別するために使用されます。
  • アイテムがすでにインストールされている場合にのみ、アイテムをアクティブ化/非アクティブ化/削除/アンインストール/更新します。

名前の付いた新しいファイルを作成します 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
        }
    }

}

を使用します --allow-root このモジュールのすべてのWP-CLIコマンドのフラグ。 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

Akismetがアクティブ化されたかどうかを確認できます plugin list 指図。 デフォルトでは、モジュールは /var/www WordPressのインストールディレクトリとして使用できますが、環境によって異なる場合は、 --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 それらのホストのノード定義で。 名前の付いた2つのホストでAkismetプラグインを更新するには host1host2site.pp あなたの操り人形マスターのには以下が含まれている必要があります:

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

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