読者です 読者をやめる 読者になる 読者になる

PR TIMESデザイナー&エンジニアブログ BREAK TIMES

PR TIMES Developer Blog(デザイナー&エンジニアによる開発者ブログ)

PR TIMES Developer Blog
デザイナー&エンジニアによる開発者ブログ

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の内容を確認出来れば、
現段階では、正常動作しているという事になります。

みなさんいかがでしたでしょうか?
今回は、Apachephpをインストール、初期設定を行う所までをレポートさせていただきました。
本来であれば、ここからmysqlをインストールし、初期設定やユーザー作成などを行えるようにしたいと
思っていたのですが、長くなってきてしまいますので、また次回の記事にしたいと思います!