序章

Puppetは、システム管理者が企業のITインフラストラクチャの保守に関連するプロセスを自動化するために使用する構成管理ツールです。 単純なタスクを自動化するには、個々のPuppetマニフェストファイルを作成するだけで十分です。 ただし、ワークフロー全体を自動化する場合は、代わりにPuppetモジュールを作成して使用するのが理想的です。 Puppetモジュールは、マニフェストとそれらのマニフェストが必要とするファイルの単なるコレクションであり、再利用可能で共有可能なパッケージにきちんとバンドルされています。

WordPressは非常に人気のあるブログプラットフォームです。 管理者は、WordPressとその依存関係(Apache、PHP、およびMySQL)を頻繁にインストールしていることに気付くかもしれません。 このインストールプロセスは自動化の有力な候補であり、今日、まさにそれを実行するPuppetモジュールを作成します。

このチュートリアルの内容

このチュートリアルでは、次のアクティビティを実行できるPuppetモジュールを作成します。

  • ApacheとPHPをインストールする
  • MySQLをインストールする
  • MySQLforWordPressでデータベースとデータベースユーザーを作成します
  • WordPressをインストールして構成します

次に、モジュールを使用してUbuntu14.04でWordPressをセットアップする簡単なマニフェストを作成します。 このチュートリアルの最後に、再利用可能なWordPressモジュールと、サーバー上で機能するWordPressインストールがあります。

前提条件

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

  • Ubuntu14.04サーバー
  • sudoユーザー
  • コントロールパネルの設定に到達したら、WordPressを管理する方法を理解する必要があります。 それについてサポートが必要な場合は、このチュートリアルの後半を確認してください。

手順1—Puppetをスタンドアロンモードでインストールする

apt-get を使用してPuppetをインストールするには、PuppetLabsPackageリポジトリを利用可能なリポジトリのリストに追加する必要があります。 Puppet Labsには、これを行うDebianパッケージがあります。 このパッケージの名前は、使用しているUbuntuのバージョンによって異なります。 このチュートリアルではUbuntu14.04、Trusty Tahrを使用しているため、puppetlabs-release-trusty.debをダウンロードしてインストールする必要があります。

Downloadsディレクトリを作成して移動します:

mkdir ~/Downloads
cd ~/Downloads

パッケージを入手する:

wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb
sudo dpkg -i puppetlabs-release-trusty.deb

apt-getを使用してPuppetをインストールできるようになりました。

sudo apt-get update
sudo apt-get install puppet

これでPuppetがインストールされました。 次のように入力して確認できます。

sudo puppet --version

Puppetのバージョンを印刷する必要があります。 この記事の執筆時点では、最新バージョンは3.7.1です。

templatedir に関する警告メッセージが表示された場合は、手順2の解決策を確認してください。

ステップ2-ApacheおよびMySQLモジュールをインストールする

ApacheとMySQLの管理は非常に一般的なアクティビティであるため、PuppetLabsには独自のモジュールがあります。 これらのモジュールを使用して、ApacheとMySQLをインストールおよび構成します。

次のコマンドを使用して、システムにインストールされているすべてのPuppetモジュールを一覧表示できます。

sudo puppet module list

現在インストールされているモジュールはありません。

次のような警告メッセージが表示される場合があります。

Warning: Setting templatedir is deprecated. See http://links.puppetlabs.com/env-settings-deprecations
(at /usr/lib/ruby/vendor_ruby/puppet/settings.rb:1071:in `each')

この警告を削除するには、nanoを使用してpuppet.confファイルを編集し、templatedir行をコメントアウトします。

sudo nano /etc/puppet/puppet.conf

編集後、ファイルには次の内容が含まれているはずです。 templatedir行をコメントアウトしているだけです。

[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
#templatedir=$confdir/templates

[master]
# These are needed when the puppetmaster is run by passenger
# and can safely be removed if webrick is used.
ssl_client_header = SSL_CLIENT_S_DN
ssl_client_verify_header = SSL_CLIENT_VERIFY

警告メッセージが削除されます。

PuppetLabsApacheおよびMySQLモジュールをインストールします。

sudo puppet module install puppetlabs-apache
sudo puppet module install puppetlabs-mysql

モジュールを再度リストして、インストールを確認します。

sudo puppet module list

リストにApacheモジュールとMySQLモジュールが表示されるはずです。

/etc/puppet/modules
├── puppetlabs-apache (v1.1.1)
├── puppetlabs-concat (v1.1.1)
├── puppetlabs-mysql (v2.3.1)
└── puppetlabs-stdlib (v4.3.2)

ステップ3-WordPress用の新しいモジュールを作成する

すべてのカスタムモジュールを保持するための新しいディレクトリを作成します。

mkdir ~/MyModules
cd ~/MyModules

モジュールをdo-wordpressと呼びましょう。 一般的な新しいモジュールを生成します。

puppet module generate do-wordpress --skip-interview

–skip-interview フラグを含めない場合、コマンドはインタラクティブになり、metadata.jsonファイルにデータを入力するためのモジュールに関するさまざまな質問が表示されます。

この時点で、do-wordpressという名前の新しいディレクトリが作成されました。 ボイラープレートコードと、モジュールの構築に必要なディレクトリ構造が含まれています。

metadata.json ファイルを編集して、puppetlabs-stdlibpuppetlabs/stdlibに置き換えます。

nano ~/MyModules/do-wordpress/metadata.json

この編集は、Puppetで現在開いているバグのために必要です。 変更後、metadata.jsonファイルは次のようになります。

{
  "name": "do-wordpress",
  "version": "0.1.0",
  "author": "do",
  "summary": null,
  "license": "Apache 2.0",
  "source": "",
  "project_page": null,
  "issues_url": null,
  "dependencies": [
    {"name":"puppetlabs/stdlib","version_requirement":">= 1.0.0"}
  ]
}

ステップ4-ApacheとPHPをインストールするためのマニフェストを作成する

nano を使用して、manifestsディレクトリにweb.pp という名前のファイルを作成および編集します。これにより、ApacheとPHPがインストールされます。

nano ~/MyModules/do-wordpress/manifests/web.pp

デフォルトのパラメータでApacheとPHPをインストールします。 他のライブラリとの互換性を最大化するために、MPM(マルチプロセッシングモジュール)としてpreforkを使用します。

次のコードをファイルに正確に追加します。

class wordpress::web {
    
    # Install Apache
    class {'apache': 
        mpm_module => 'prefork'
    }

    # Add support for PHP 
    class {'::apache::mod::php': }
}

ステップ5-構成変数を保存するファイルを作成する

nano を使用して、manifestsディレクトリにconf.ppという名前のファイルを作成および編集します。

nano ~/MyModules/do-wordpress/manifests/conf.pp

このファイルは、パスワードや名前などのカスタム構成値を設定する必要がある1つの場所です。 システム上の他のすべての構成ファイルは、このファイルからその値を取得します。

将来、Wordpress / MySQLの構成を変更する必要がある場合は、このファイルのみを変更する必要があります。

次のコードをファイルに追加します。 データベースの値を、WordPressで使用するカスタム情報に置き換えてください。 db_hostlocalhostに設定したままにしておくことをお勧めします。 root_passworddb_user_passwordを変更する必要があります

編集できる、または編集する必要のある変数は、でマークされています。

class wordpress::conf {
    # You can change the values of these variables
    # according to your preferences
    
    $root_password = 'password'
    $db_name = 'wordpress'
    $db_user = 'wp'
    $db_user_password = 'password'
    $db_host = 'localhost'

    # Don't change the following variables

    # This will evaluate to wp@localhost
    $db_user_host = "${db_user}@${db_host}"

    # This will evaluate to wp@localhost/wordpress.*
    $db_user_host_db = "${db_user}@${db_host}/${db_name}.*"
}

ステップ6-MySQLのマニフェストを作成する

nano を使用して、manifestsディレクトリにdb.ppという名前のファイルを作成および編集します。

nano ~/MyModules/do-wordpress/manifests/db.pp

このマニフェストは次のことを行います。

  • MySQLサーバーをインストールします
  • MySQLサーバーのルートパスワードを設定します
  • WordPress用のデータベースを作成します
  • WordPressのユーザーを作成します
  • データベースにアクセスするための特権をユーザーに付与します
  • MySQLクライアントとさまざまな言語のバインディングをインストールします

上記のすべてのアクションは、クラス::mysql::serverおよび::mysql::clientによって実行されます。

次のコードを、示されているとおりにファイルに追加します。 理解を深めるために、インラインコメントが含まれています。

class wordpress::db {
        
    class { '::mysql::server':

        # Set the root password
        root_password => $wordpress::conf::root_password,

        # Create the database
        databases => {
            "${wordpress::conf::db_name}" => {
                ensure => 'present',
                charset => 'utf8'
            }
        },

        # Create the user
        users => {
            "${wordpress::conf::db_user_host}" => {
                ensure => present,
                password_hash => mysql_password("${wordpress::conf::db_user_password}")
            }
        },

        # Grant privileges to the user
        grants => {
            "${wordpress::conf::db_user_host_db}" => {
                ensure     => 'present',
                options    => ['GRANT'],
                privileges => ['ALL'],
                table      => "${wordpress::conf::db_name}.*",
                user       => "${wordpress::conf::db_user_host}",
            }
        },
    }

    # Install MySQL client and all bindings
    class { '::mysql::client':
        require => Class['::mysql::server'],
        bindings_enable => true
    }
}

ステップ7-最新のWordPressをダウンロードする

wget を使用して公式ウェブサイトから最新のWordPressインストールバンドルをダウンロードし、ファイルディレクトリに保存します。

新しいディレクトリを作成して移動します。

mkdir ~/MyModules/do-wordpress/files
cd ~/MyModules/do-wordpress/files

ファイルをダウンロードします。

wget http://wordpress.org/latest.tar.gz

ステップ8-wp-config.phpのテンプレートを作成する

WordPressには、使用が許可されているMySQLデータベースに関する情報を含むwp-config.phpファイルが必要であることをすでにご存知かもしれません。 テンプレートは、Puppetが正しい値でこのファイルを生成できるようにするために使用されます。

templatesという名前の新しいディレクトリを作成します。

mkdir ~/MyModules/do-wordpress/templates

/tmpディレクトリに移動します。

cd /tmp

WordPressファイルを抽出します。

tar -xvzf ~/MyModules/do-wordpress/files/latest.tar.gz  # Extract the tar

ダウンロードしたlatest.tar.gzファイルには、wp-config-sample.phpファイルが含まれています。 ファイルをtemplatesディレクトリにwp-config.php.erbとしてコピーします。

cp /tmp/wordpress/wp-config-sample.php ~/MyModules/do-wordpress/templates/wp-config.php.erb

/tmpディレクトリをクリーンアップします。

rm -rf /tmp/wordpress  # Clean up

nanoを使用してwp-config.php.erbファイルを編集します。

nano ~/MyModules/do-wordpress/templates/wp-config.php.erb

conf.pp で定義された変数を使用して、 DB_NAME DB_USER DB_PASSWORD 、およびDB_HOSTの値を設定します。 。 以下に示す正確な設定を使用できます。これにより、前に作成したconf.ppファイルから実際の変数が取得されます。 red でマークされた項目は、データベース関連の4行で行う必要のある正確な変更です。

コメントを無視すると、ファイルは次のようになります。

<?php
define('DB_NAME', '<%= scope.lookupvar('wordpress::conf::db_name') %>');
define('DB_USER', '<%= scope.lookupvar('wordpress::conf::db_user') %>');
define('DB_PASSWORD', '<%= scope.lookupvar('wordpress::conf::db_user_password') %>');
define('DB_HOST', '<%= scope.lookupvar('wordpress::conf::db_host') %>');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');

define('AUTH_KEY',         'put your unique phrase here');
define('SECURE_AUTH_KEY',  'put your unique phrase here');
define('LOGGED_IN_KEY',    'put your unique phrase here');
define('NONCE_KEY',        'put your unique phrase here');
define('AUTH_SALT',        'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT',   'put your unique phrase here');
define('NONCE_SALT',       'put your unique phrase here');

$table_prefix  = 'wp_';

define('WP_DEBUG', false);

if ( !defined('ABSPATH') )
	define('ABSPATH', dirname(__FILE__) . '/');

require_once(ABSPATH . 'wp-settings.php');

ステップ9-Wordpressのマニフェストを作成する

nano を使用して、manifestsディレクトリにwp.ppという名前のファイルを作成および編集します。

nano ~/MyModules/do-wordpress/manifests/wp.pp

このマニフェストは、次のアクションを実行します。

  • WordPressインストールバンドルの内容を/var / www/にコピーします。 Apacheのデフォルト構成では、 / var / www / のファイルが提供されるため、これを行う必要があります。
  • テンプレートを使用してwp-config.phpファイルを生成します

次のコードを、示されているとおりにファイルに追加します。

class wordpress::wp {

    # Copy the WordPress bundle to /tmp
    file { '/tmp/latest.tar.gz':
        ensure => present,
        source => "puppet:///modules/wordpress/latest.tar.gz"
    }

    # Extract the WordPress bundle
    exec { 'extract':
        cwd => "/tmp",
        command => "tar -xvzf latest.tar.gz",
        require => File['/tmp/latest.tar.gz'],
        path => ['/bin'],
    }

    # Copy to /var/www/
    exec { 'copy':
        command => "cp -r /tmp/wordpress/* /var/www/",
        require => Exec['extract'],
        path => ['/bin'],
    }

    # Generate the wp-config.php file using the template
    file { '/var/www/wp-config.php':
        ensure => present,
        require => Exec['copy'],
        content => template("wordpress/wp-config.php.erb")
    }
}

ステップ10-他のマニフェストを統合するマニフェストであるinit.ppを作成する

すべてのPuppetモジュールには、init.ppという名前のファイルが必要です。 外部マニフェストにモジュールが含まれている場合、このファイルの内容が実行されます。 puppet module generateコマンドは、このファイルの汎用バージョンを既に作成しています。

nanoを使用してinit.ppを編集します。

nano ~/MyModules/do-wordpress/manifests/init.pp

ファイルの内容を次のようにします。

コメント付きの説明と例を上部に残すことができます。 wordpressクラスには空のブロックが必要です。 ここに示す内容を追加して、wordpressブロックが次のようになるようにします。 角かっこが正しくネストされていることを確認してください。

設定を説明するためにインラインコメントが含まれています。

class wordpress {
    # Load all variables
    class { 'wordpress::conf': }

    # Install Apache and PHP
    class { 'wordpress::web': }

    # Install MySQL
    class { 'wordpress::db': }

    # Run WordPress installation only after Apache is installed
    class { 'wordpress::wp': 
        require => Notify['Apache Installation Complete']
    }

    # Display this message after MySQL installation is complete
    notify { 'MySQL Installation Complete':
        require => Class['wordpress::db']
    }

    # Display this message after Apache installation is complete
    notify { 'Apache Installation Complete':
        require => Class['wordpress::web']
    }

    # Display this message after WordPress installation is complete
    notify { 'Wordpress Installation Complete':
        require => Class['wordpress::wp']
    }
}

ステップ11-WordPressモジュールを構築する

これで、モジュールを構築する準備が整いました。 MyModulesディレクトリに移動します。

cd ~/MyModules

puppet module buildコマンドを使用して、モジュールをビルドします。

sudo puppet module build do-wordpress

ビルドが成功すると、次の出力が表示されます。

Notice: Building /home/user/MyModules/do-wordpress for release
Module built: /home/user/MyModules/do-wordpress/pkg/do-wordpress-0.1.0.tar.gz

これで、モジュールを使用および共有する準備が整いました。 インストール可能なバンドルは、モジュールのpkgディレクトリにあります。

ステップ12-WordPressモジュールをインストールする

モジュールを使用するには、最初にモジュールをインストールする必要があります。 puppet module installコマンドを使用します。

sudo puppet module install ~/MyModules/do-wordpress/pkg/do-wordpress-0.1.0.tar.gz

インストール後、sudo puppet module listコマンドを実行すると、次のような出力が表示されます。

/etc/puppet/modules
├── do-wordpress (v0.1.0)
├── puppetlabs-apache (v1.1.1)
├── puppetlabs-concat (v1.1.1)
├── puppetlabs-mysql (v2.3.1)
└── puppetlabs-stdlib (v4.3.2)

これでインストールされたので、Puppetコマンドの場合はこのモジュールをdo-wordpressとして参照する必要があります。

モジュールの更新またはアンインストール

インストールエラーが発生した場合、またはWordPressの構成の問題に気付いた場合は、チュートリアルの前半で作成した1つ以上のマニフェストファイルと関連ファイルに変更を加える必要があります。

または、ある時点でモジュールをアンインストールすることもできます。

モジュールを更新またはアンインストールするには、次のコマンドを使用します。

sudo puppet module uninstall do-wordpress

アンインストールしたいだけなら、これで完了です。

それ以外の場合は、必要な変更を加えてから、手順11〜12に従ってモジュールを再構築して再インストールします。

ステップ13-スタンドアロンマニフェストファイルのモジュールを使用してWordPressをインストールする

モジュールを使用してWordpressをインストールするには、新しいマニフェストを作成して適用する必要があります。

nano を使用して、 / tmp ディレクトリ(または任意の他のディレクトリ)にinstall-wp.ppという名前のファイルを作成および編集します。

nano /tmp/install-wp.pp

次の内容を、示されているとおりにファイルに追加します。

class { 'wordpress':
}

puppet applyを使用してマニフェストを適用します。 これは、WordPressをサーバー上で起動して実行するための手順です。

sudo puppet apply /tmp/install-wp.pp

警告が1つか2つ表示されても問題ありません。

これは実行に時間がかかりますが、完了すると、Wordpressとそのすべての依存関係がインストールされて実行されます。

最後のいくつかの成功したインストールラインは次のようになります。

Notice: /Stage[main]/Apache/File[/etc/apache2/mods-enabled/authn_core.load]/ensure: removed
Notice: /Stage[main]/Apache/File[/etc/apache2/mods-enabled/status.load]/ensure: removed
Notice: /Stage[main]/Apache/File[/etc/apache2/mods-enabled/mpm_prefork.load]/ensure: removed
Notice: /Stage[main]/Apache/File[/etc/apache2/mods-enabled/status.conf]/ensure: removed
Notice: /Stage[main]/Apache/File[/etc/apache2/mods-enabled/mpm_prefork.conf]/ensure: removed
Notice: /Stage[main]/Apache::Service/Service[httpd]: Triggered 'refresh' from 55 events
Notice: Finished catalog run in 55.91 seconds

ブラウザを開いてhttp:// server-IP/にアクセスできます。 WordPressのウェルカム画面が表示されます。

WordPress Welcome

ここから、WordPressコントロールパネルを通常どおりに設定できます。

複数のサーバーへの展開

エージェントマスター構成でPuppetを実行していて、1つ以上のリモートマシンにWordPressをインストールする場合は、class {'wordpress':}行をそれらのノード定義に追加するだけです。マシン。 エージェントマスターの構成とノード定義の詳細については、次のチュートリアルを参照してください。

サーバーインフラストラクチャを管理するためにPuppetをインストールする方法

結論

このチュートリアルでは、WordPressをセットアップする独自のPuppetモジュールを作成する方法を学びました。 これをさらに発展させて、特定のテーマとプラグインを自動的にインストールするためのサポートを追加することができます。 最後に、モジュールが他の人にも役立つと思われる場合は、PuppetForgeで公開できます。