Program LOG

勉強した内容をまとめ中。。。間違ってたら教えて。。。

windows+CygwinでChef - 3.ChefでPHPインストール編

前回までに、Chefの概要とcookbookやrecipeでの設定、リソースの概念をやってきました。
簡単なコードで、しっかりと環境を整える事が出来るようになっていて感動しながら、勉強しておりますw
さて、今回もLAMP環境の構築を行いながら、新しいリソースを覚えていきたいと思います。
今回は、PHPをセットアップしていきます。

Windos+Chef入門目次を作成しました!

windows+CygwinでChef - 目次 - Program LOG

PHPのインストール

前回の記事で、apacheのインストールが完了しているので、
今回は、「yum_package」というリソースを使用してphpのセットアップをしていきます。

%w[php-devel php-mbstring gd-devel php-gd php-mysql].each do |pkg|
	yum_package pkg do
	  action :install
	end
end

rubyなので、配列を作成して、それをeachでまわして実行します。
今回もrecipeは、defaultに書いているので、nodeはいじらないで、実行します。
ひとまず、実行したいと思います。

Recipe: develop::default
  * package[vim-enhanced] action install (up to date)
  * service[iptables] action stop (up to date)
  * service[iptables] action disable (up to date)
  * package[httpd] action install (up to date)
  * service[httpd] action enable (up to date)
  * service[httpd] action restart
    - restart service service[httpd]

  * yum_package[php-devel] action install
    - install version 5.3.3-27.el6_5 of package php-devel

  * yum_package[php-mbstring] action install
    - install version 5.3.3-27.el6_5 of package php-mbstring

  * yum_package[gd-devel] action install
    - install version 2.0.35-11.el6 of package gd-devel

  * yum_package[php-gd] action install
    - install version 5.3.3-27.el6_5 of package php-gd

  * yum_package[php-mysql] action install
    - install version 5.3.3-27.el6_5 of package php-mysql

次は、インストールが完了したので、php.iniを書き換えたいと思います。

cookbook_fileとtemplateとfile

chefには、大きく分けて3つのファイル操作を行う方法が存在しています。
用意したファイルをそのまま特定の場所にコピーしてくれる「cookbook_file」、
用意したファイルに対して、変数を使用する事が出来る「template」、
ファイルを単純に作成してくれる「file」です。

今回は、インストールされたファイルをコピーして、自分のマシンで修正しておいたphp.iniを、
cookbook_fileで展開したいと思います。
php.iniは、「lessons/site-cookbooks/develop/files/default」の中に入れ、recipeを修正していきます。

cookbook_file "/etc/php.ini" do
  mode 0644
end

そして、cookを実行します。

$ knife solo cook chefssh
 ・・・中略・・・
  * service[httpd] action enable (up to date)
  * service[httpd] action restart
    - restart service service[httpd]

  * yum_package[php-devel] action install (up to date)
  * yum_package[php-mbstring] action install (up to date)
  * yum_package[gd-devel] action install (up to date)
  * yum_package[php-gd] action install (up to date)
  * yum_package[php-mysql] action install (up to date)
  * cookbook_file[/etc/php.ini] action create
    - update content in file /etc/php.ini from e662c5 to 20e71e
        --- /etc/php.ini        2013-12-11 03:34:42.000000000 +0000
  ・・・・中略・・・・
  Running handlers:
  Running handlers complete

  Chef Client finished, 2/12 resources updated in 4.061686383 seconds

これで、正常にインストールが完了しましたが、
php.iniを修正したので、httpdのrestartを行いたいですよね?
notifiesというオプションを使用すると、このリソースが実行された後、指定した処理を実行してくれます。

cookbook_file "/etc/php.ini" do
  mode 0644
  notifies :reload, 'service[httpd]'
end

実行結果は以下の通りです。

$ knife solo cook chefssh
  ・・・中略・・・
  * service[httpd] action restart
    - restart service service[httpd]
  ・・・中略・・・
  * yum_package[php-mysql] action install (up to date)
  * cookbook_file[/etc/php.ini] action create
    - update content in file /etc/php.ini from 20e71e to 812103
        --- /etc/php.ini        2014-05-31 04:08:30.535395871 +0000
        +++ /tmp/.php.ini20140531-6814-1kp2gev  2014-05-31 04:17:15.510051875 +0000
  ・・・中略・・・
  * service[httpd] action reload
    - restart service service[httpd]

このように、ファイルをコピーしてhttpdのリロードをおこなわれました。
notifiesは、該当のResourceが実行された際、他のResourceに通知してそのResourceの実行してくれます。
今回の場合は、cookbook_fileが実行された後でservice[httpd]に通知して、restartしてくれました。
逆に「subscribes」というオプションを使用すると、
他のResourceの実行終了後に該当ResourceのActionを指定して実行する事も出来ます。

さて、本題ですが、vagrantに入って、phpのインストールが正常に出来ているか?
確認してみたいとおもいます。

$ vagrant ssh
Last login: Sat May 31 04:29:01 2014 from 10.0.2.2
Welcome to your Vagrant-built virtual machine.
[vagrant@localhost ~]$ php -v
PHP 5.3.3 (cli) (built: Dec 11 2013 03:29:57)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

インストールは正常に行えているようです!
それでは、phpinfoをやってみたいと思います。

[vagrant@localhost ~]$ cd /var/www/html/
[vagrant@localhost html]$ sudo vim ./index.php

index.phpの内容

<?php
phpinfo();
?>

これで、192.168.33.21にブラウザからアクセスし、phpinfoが表示されれば、成功です!

f:id:aimtaku:20140531134611p:plain
無事に表示されました!(ってか、ブログで初めて画像使った・・・w)

次に、Mysqlのインストールを行っていこうと思ったのですが、
長くなってしまいそうなので、別の記事に書いていこうと思います!


使用環境