前書き

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

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

このチュートリアルに含まれるもの

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

  • ApacheとPHPをインストールする

  • MySQLをインストールする

  • WordPress用のMySQLでデータベースとデータベースユーザーを作成する

  • WordPressをインストールして構成する

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

前提条件

次のものが必要です。

  • * Ubuntu 14.04 *サーバー

  • sudoユーザー

  • コントロールパネルのセットアップが完了したら、WordPressの管理方法を理解する必要があります。 それに関して助けが必要な場合は、https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-on-ubuntu-14-04#step-five-%E2%80の後半部分を確認してください。 %94-complete-installation-through-the-web-interface [このチュートリアル]

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

を使用してPuppetをインストールするには、Puppet Labsパッケージリポジトリを利用可能なリポジトリのリストに追加する必要があります。 Puppet Labsには、これを行うDebianパッケージがあります。 このパッケージの名前は、使用しているUbuntuのバージョンによって異なります。 このチュートリアルではUbuntu 14.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 *です。

:についての警告メッセージが表示される場合は、手順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')

この警告を削除するには、を使用してファイルを編集し、行をコメント化します。

sudo nano /etc/puppet/puppet.conf

編集後、ファイルの内容は次のようになります。 行をコメントアウトしているだけです。

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


[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

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

PuppetLabs Apacheおよび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

モジュールを呼び出しましょう。 汎用の新しいモジュールを生成します。

puppet module generate do-wordpress --skip-interview

フラグを含めない場合、コマンドはインタラクティブになり、モジュールに関するさまざまな質問を入力して、ファイルを作成します。

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

ファイルを編集して、に置き換えます。

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

この編集は、現在Puppetでhttps://tickets.puppetlabs.com/browse/PUP-3121[bug]を開いているために必要です。 変更後、ファイルは次のようになります。

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

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

ディレクトリで指定されたファイルを作成および編集するために使用します。これにより、ApacheとPHPがインストールされます。

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

デフォルトのパラメーターでApacheとPHPをインストールします。 MPM(Multi-Processing Module)として使用して、他のライブラリとの互換性を最大限にします。

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

class wordpress::web {

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

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

手順5-構成変数を保存するファイルを作成する

ディレクトリ内の名前のファイルを作成および編集するために使用します。

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

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

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

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

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

class wordpress::conf {
   # You can change the values of these variables
   # according to your preferences

   $root_password = ''
   $db_name = ''
   $db_user = ''
   $db_user_password = ''
   $db_host = ''

   # Don't change the following variables

   # This will evaluate to [email protected]
   $db_user_host = "${db_user}@${db_host}"

   # This will evaluate to [email protected]/wordpress.*
   $db_user_host_db = "${db_user}@${db_host}/${db_name}.*"
}

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

ディレクトリ内の名前のファイルを作成および編集するために使用します。

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をダウンロードする

http://wordpress.org [公式Webサイト]から最新のWordPressインストールバンドルをダウンロードして、ディレクトリに保存します。

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

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

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

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

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

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

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

mkdir ~/MyModules/do-wordpress/templates

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

cd /tmp

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

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

ダウンロードしたファイルにはファイルが含まれています。 ファイルをとしてディレクトリにコピーします。

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

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

rm -rf /tmp/wordpress  # Clean up

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

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

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

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

<?php
define('DB_NAME', '');
define('DB_USER', '');
define('DB_PASSWORD', '');
define('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のマニフェストを作成する

`+ manifests +`ディレクトリにあるファイルの作成と編集に使用します:

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

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

  • WordPressインストールバンドルの内容をにコピーします。 これは、Apacheのデフォルト設定がファイルを提供するために実行する必要があります

  • テンプレートを使用してファイルを生成します

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

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モジュールにはという名前のファイルが必要です。 外部マニフェストにモジュールが含まれている場合、このファイルの内容が実行されます。 `+ puppet module generate +`コマンドにより、このファイルの汎用バージョンがすでに作成されています。

  • nano *を使用して編集します。

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

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

ステップ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をインストールするには、新しいマニフェストを作成して適用する必要があります。

ディレクトリ(または選択した他のディレクトリ)で `+ 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:///にアクセスできます。 WordPressのようこそ画面が表示されます。

image:https://assets.digitalocean.com/articles/wordpress_puppet/1.png [WordPressへようこそ]

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

複数のサーバーへの展開

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

https://www.digitalocean.com/community/tutorials/how-to-install-puppet-to-manage-your-server-infrastructure#using-a-module [サーバーインフラストラクチャを管理するためにPuppetをインストールする方法]

結論

このチュートリアルでは、WordPressをセットアップする独自のPuppetモジュールを作成する方法を学びました。 さらにこれに基づいて、特定のテーマとプラグインの自動インストールのサポートを追加できます。 最後に、あなたのモジュールが他の人にとっても有用だと感じたら、それをPuppet Forgeで公開できます。