puppetでLAMP構成を構築する part3
前回の続きで、phpのpuppetizeをしていきたいと思います。
phpのモジュール化
せっかくなのでphpもモジュール化しようと思います。
モジュール化の方針は、以前のapacheのpuppetizeとおおよそ同じ構造にしますので、そちらを参照ください。
PuppetでApacheを管理してみる part2 - ressyのナレッジ的なブログ
manifestの記述
早速manifestを記述しましょう。
前回の話を踏まえ、リポジトリの追加をしてから、phpをインストールします。
ちなみにインストールの流れは、以下を参考にしています。
CentOSにPHP5.6をインストール - Qiita
$ cat modules/php/manifests/init.pp class php( $enabled = 'false', ) { case $enabled { 'true': { # epelリポジトリの追加(remiを追加するために必要) package { 'epel-release': ensure => installed, source => 'http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm' , provider => rpm, } # remiリポジトリの追加 package { 'remi-release': ensure => installed, source => 'http://rpms.famillecollet.com/enterprise/remi-release-6.rpm', provider => rpm, require => Package['epel-release'], } # phpのインストール package { [ 'php', 'php-devel', 'php-mysql', ]: ensure => present, install_options => [ '--enablerepo=remi', '--enablerepo=remi-php56' ], require => Package['remi-release'], } # phpの設定ファイル file { '/etc/php.ini': ensure => present, content => file('/etc/puppet/modules/php/files/etc/php.ini'), require => Package['php'], } } 'false': { package { 'php': ensure => absent, } } } }
ポイントを解説します。
epel/remiリポジトリの追加
epel、remiリポジトリの追加は、package
リソースで記述すればOKです。
その際に、source
でインストール元URL、provider
でパッケージマネージャを指定します。
ちなみにphp5.6を入れる目的でremiを追加しますが、remiを入れるにはepelリポジトリが必要なので、同様にpuppetizeします。
phpのインストール
remiリポジトリからパッケージをインストールする場合、オプションでremiリポジトリを有効にする必要があります。
yumコマンドでインストールする例を挙げると以下のようになり、これをpuppetizeする必要があります。
$ sudo yum install --enablerepo=remi --enablerepo=remi-php56 php php-devel php-mysql
ポイントは--enablerepo=remi --enablerepo=remi-php56
をどうpuppetizeするかです。
具体的には、pacakge
リソースでinstall_options
を使って記載すればOKです。
phpの設定ファイル
ここは特記事項はないかなと思います。
あえて言えば、php.iniで変数を使ってpuppetizeするような箇所は設けてないので、files
で管理していることくらいでしょうか。
moduleの呼び出し
こちらの記事で作成した、site.pp
にphpモジュール分を追加します。
# cat /etc/puppet/manifests/site.pp node 'WEB01' { # WEB01ではApache/phpは運用する class { 'http': enabled => 'true', port => '80' } # phpを使用する class { 'php': enabled => 'true', } } node default { # 他のサーバではApache/phpは運用しない class { 'http': enabled => 'false', } # phpは使用しない class { 'php': enabled => 'true', } }
ざっとこんなところでしょうか。
phpのpuppetizeについて、最低限の実装はできたかと思います。