Chefを使ってLAMP環境を構築しよう!- Apache&php導入編
こんにちは。PR TIMESエンジニアの落合です。
今まで2回に分けて、Chefをご紹介してきましたが、
今回は、より実践的にLAMP環境をChefで構築していきたいと思います。
前回までの記事は以下をご覧ください。
Chefを使ってサーバー構築運用! PR TIMES導入編! - BREAK TIMES
Chefを使ってインフラ環境構築を自動化しよう! - BREAK TIMES
リポジトリとクックブックを作成しておこう!
前回までと同様に、まずはリポジトリとクックブックを作成しておこうと思います。
また、vagrantを使って仮想マシンに「cook」していきたいので、
そちらも同時に作成しておきたいと思います。
まずは、vagrantから作成します。
今回は以前設定したBOXを使用します。
$ mkdir lampserver $ vagrant init centos64 $ vim Vagrantfile # 以下のようにプライベートIPを設定しました。 # 26 config.vm.network "private_network", ip: "192.168.33.15" $ vagrant up # 起動完了後、Chefで簡単に扱う為、キーフレーズ設定を行っておこうと思います。 $ vagrant ssh-config --host lampserver >> ~/.ssh/config
これで、仮想マシンの設定は完了しました。
次に、Chefも準備しておきましょう。
# まずはリポジトリを作成します。 $ cd ../chef/ $ knife solo init lamp # サーバーでChefを使用できるようにする。 $ cd lamp $ knife solo prepare lampserver # cookbookを作成する。 $ knife cookbook create lampset -o site-cookbooks/
これで、Chefも準備が完了しました!
さて、ここからが、本番です!早速、Lamp環境を作成していきましょう!
Apacheをインストールしよう!
今回はあくまでも、開発環境を構築する事を前提にしておりますので、本番適用する場合は、
レシピを切り分けるとかする必要があります。
前回簡単にですが、リソースの説明をしていますので、そこらへんの説明は省いていきます。
まず、「lamp/site-cookbooks/lampset/recipes/default.rb」を編集していきます。
今後上記ファイルは「デフォルトレシピ」と呼びます。
# iptablesの設定 # serviceを停止して、chkconfigもoffにして自動起動を解除しておきます。 service "iptables" do action [:stop, :disable] end # apacheのインストール package "httpd" do action :install end # apacheのservice設定 # httpdを起動し、常時起動も行います。 service "httpd" do supports :status => true, :restart => true action [ :enable, :restart ] end
ここまで完了したら、「lamp/nodes/lampserver.json」を編集し、使用するレシピを設定していきましょう!
{ "run_list":[ "recipe[lampset::default]" ] }
さて、これで設定は完了です!これを実行すれば、設定反映されるはずです。
$ knife solo cook lampserver Running Chef on lampserver... ・・・・中略・・・・ * service[iptables] action stop - stop service service[iptables] * service[iptables] action disable - disable service service[iptables] * package[httpd] action install - install version 2.2.15-30.el6.centos of package httpd * service[httpd] action enable - enable service service[httpd] * service[httpd] action restart - restart service service[httpd] Running handlers: Running handlers complete Chef Client finished, 4/5 resources updated in 24.232949899 seconds
正常にhttpdが上がっているか、確認したいので、サーバーへ接続したいと思います。
$ ssh vagrang@lampserver [vagrant@localhost ~]$ sudo su [root@localhost vagrant]# service httpd status httpd (pid 2161) is running...
正常にhttpdが起動しているのが分かると思います。
もちろん今の状態で「http://192.168.33.15/」へアクセスする事で、
Apacheの画面が表示されると思います。
それでは、引き続きPHPのインストールを実施したいと思います。
PHPのインストールと初期設定について
さて、それではPHPのインストールをしていきたいと思います。
PHPをインストールしたいので、「デフォルトレシピ」を修正していきます。
# yum_packageを使うと簡単にインストール出来る。 # ちなみに、rubyで記述しているので、以下のように配列をeachでループしてインストールなども行えます。 %w[php-devel php-mbstring gd-devel php-gd php-mysql].each do |pkg| yum_package pkg do action :install end end
それでは、早速実行していきたいと思います。
$ knife solo cook lampserver Running Chef on lampserver... ・・・・中略・・・・ 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は、「lamp/site-cookbooks/lampset/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 2014-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: Thu Nov 20 18:33:13 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.15にブラウザからアクセスしてphpinfoの内容を確認出来れば、
現段階では、正常動作しているという事になります。
みなさんいかがでしたでしょうか?
今回は、Apacheとphpをインストール、初期設定を行う所までをレポートさせていただきました。
本来であれば、ここからmysqlをインストールし、初期設定やユーザー作成などを行えるようにしたいと
思っていたのですが、長くなってきてしまいますので、また次回の記事にしたいと思います!