Chefを用いたLAMP開発環境の構築方法~仮想環境構築編

By • 2014-01-24 • Cloud, Development

Chef公式サイト

はじめに

以前の記事
LAMP開発環境の構築方法~仮想環境構築編および、LAMP開発環境の構築方法~LAMP環境構築編では、仮想環境の構築から、LAMP環境構築の方法について、2回に渡って解説しました。

今回は、サーバー構成管理ツールであるChefを用いたLAMP環境の構築方法について、2回に分けて解説します。
第1回は、Chef環境の構築から仮想マシンの基本設定を行うレシピの実行までを解説します。

Chef環境の構築

1.Chefのインストール

初めてChefをインストールする方は、Cygwin + rbenv環境でプロビジョニングサーバーを構築する方法(第2回)~仮想化ソフトウエアを導入し、Chef環境を構築するを参考にして、rbenv環境および、Chefのインストールして下さい。

既に、rubyの実行環境をお持ちの方で、初めてChefをインストールする方はgemパッケージからChefをインストールして下さい。

$ gem i chef --no-ri --no-rdoc

2.Chefのアップデート

既に、rubyの実行環境および、Chefをインストール済みの方は、Chefのアップデートを行って下さい。

$ gem update chef
$ chef-solo -v
$ gem update chef
DL is deprecated, please use Fiddle
Updating installed gems
Updating chef
Fetching: chef-11.8.2.gem (100%)
Successfully installed chef-11.8.2
Parsing documentation for chef-11.8.2
Installing ri documentation for chef-11.8.2
Installing darkfish documentation for chef-11.8.2
Done installing documentation for chef after 52 seconds
Updating chef-zero
Fetching: chef-zero-2.0.1.gem (100%)
Successfully installed chef-zero-2.0.1
Parsing documentation for chef-zero-2.0.1
Installing ri documentation for chef-zero-2.0.1
Installing darkfish documentation for chef-zero-2.0.1
Done installing documentation for chef-zero after 3 seconds
Gems updated: chef chef-zero
$ chef-solo -v
DL is deprecated, please use Fiddle
Chef: 11.8.2

3.Vagrantプラグインのインストール

ChefがインストールされていないBoxに、Chefを自動的にインストールするvagrant-omnibusプラグインをインストールします。

$ vagrant plugin install vagrant-omnibus

5002-03

仮想マシンの起動

Chefプロビジョニングを行うBoxを作成し、起動します。

1.Boxの起動

LAMP環境構築編で使用したCentOSのBoxイメージを使用して、新しいBoxを起動します。

$ mkdir -p ~/vagrant/chef-lamp && cd ~/vagrant/chef-lamp
$ vagrant init chef-lamp
$ mkdir -p ~/vagrant/chef-lamp && cd ~/vagrant/chef-lamp
$ vagrant init chef-lamp
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

Vagrantfileを下記のとおり編集します。

ブリッジネットワークのIPアドレスおよび、ダウンロードするBoxイメージのURLを指定し、起動したBoxに最新版のChefがインストールされるように設定します。

$ vi Vagrantfile
config.vm.box_url = "http://files.brianbirkinbine.com/vagrant-centos-65-i386-minimal.box"
config.vm.network :public_network, ip: "192.168.0.20"
config.vm.synced_folder ".", "/vagrant"
config.omnibus.chef_version = :latest

5002-051

編集が終了したら、Boxを起動します。

Vagrantfileで指定したBoxがダウンロードされ、最新版のChefがインストールされます。

$ vagrant up
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Box 'chef-lamp' was not found. Fetching box from specified URL for
the provider 'virtualbox'. Note that if the URL does not have
a box for this provider, you should interrupt Vagrant now and add
the box yourself. Otherwise Vagrant will attempt to download the
full box prior to discovering this error.
Downloading box from URL: http://files.brianbirkinbine.com/vagrant-centos-65-i386-minimal.box
Box download is resuming from prior download progress
Extracting box...ate: 3542k/s, Estimated time remaining: --:--:--)
Successfully added box 'chef-lamp' with provider 'virtualbox'!
[default] Importing base box 'chef-lamp'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Fixed port collision for 22 => 2222. Now on port 2200.
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2200 (adapter 1)
[default] Booting VM...
[default] Waiting for machine to boot. This may take a few minutes...
DL is deprecated, please use Fiddle
[default] Machine booted and ready!
[default] Configuring and enabling network interfaces...
[default] Mounting shared folders...
[default] -- /vagrant
[default] Installing Chef 11.8.2 Omnibus package...

以上で、Chefおよび、Boxの準備ができましたので、LAMP環境構築のためのCookbookを作成します。

仮想マシンの初期設定

Boxの初期設定を行う、Base Cookbookを作成し、Vagrantfileにレシピを追加した後、プロビジョニングを実行します。

1.レシピの指定

Vagrantfileを下記のとおり編集します。

実行するCookbookのパスと実行するレシピを指定し、レシピ内で参照する変数を指定しています。

$ vi Vagrantfile
config.vm.provision :chef_solo do |chef|
  chef.cookbooks_path = "./site-cookbooks"
  chef.add_recipe "base"

  chef.json = {
    base: {
      fqdn: "chef-lamp.vagrantup.com",
      name: "chef-lamp"
    },
  }
end

5002-07

2.Base Cookbookの作成

Base Cookbookを作成します。

$ knife cookbook create base -o site-cookbooks
$ knife cookbook create base -o site-cookbooks
** Creating cookbook base
** Creating README for cookbook: base
** Creating CHANGELOG for cookbook: base
** Creating metadata for cookbook: base

site-cookbooksフォルダ配下に、Cookbookのひな型が作成されますので、レシピを作成します。

ここで作成するレシピは、site-cookbooks/base/recipes/default.rb ファイルに全て記述します。

$ vi site-cookbooks/base/recipes/default.rb

3.ネットワーク設定

Vagrantfileで指定したFQDNを、設定ファイルに追加します。

FQDNが設定ファイルに登録されていない場合に、スクリプトが実行されます。

bash 'network' do
  user 'root'
  code <<-EOC
sed -i -e 's|HOSTNAME=.*$|HOSTNAME=#{node[:base][:fqdn]}|' /etc/sysconfig/network
  EOC
  not_if "grep -q #{node[:base][:fqdn]} /etc/sysconfig/network"
end

5002-09

4.ホスト名設定

ネットワーク設定で設定されたFQDNを、ホスト名として設定します。

bash 'hostname' do
  user 'root'
  code <<-EOC
hostname `grep ^HOSTNAME /etc/sysconfig/network | sed 's/^.*=//'`
  EOC
  not_if "grep -q `hostname` /etc/sysconfig/network"
end

5002-10

5.hosts設定

ネットワーク設定で設定されたFQDNおよび、ブリッジネットワークIPアドレスを、hostsファイルに追加します。

bash 'hosts' do
  user 'root'
  code <<-EOC
echo "`ifconfig eth1 | grep 'inet addr'|awk '{print $2}' | sed 's/^addr://'` `hostname` `hostname -s`" | tee -a /etc/hosts
  EOC
  not_if "grep -q `hostname` /etc/hosts"
end

5002-11

6.Firewall無効化

%w{iptables ip6tables}.each do |s|
  service s do
    action [:stop, :disable]
  end
end

5002-12

7.SELinux無効化

bash 'selinux' do
  user 'root'
  code <<-EOC
cp -p /etc/sysconfig/selinux /etc/sysconfig/selinux.old
cat /etc/sysconfig/selinux.old | sed 's/^SELINUX=.*$/SELINUX=disabled/' > /etc/sysconfig/selinux
  EOC
  not_if "grep -q 'SELINUX=disabled' /etc/sysconfig/selinux"
end

5002-13

8.起動オプション設定

  user 'root'
  code <<-EOC
cp -p /etc/grub.conf /etc/grub.conf.old
cat /etc/grub.conf.old | sed 's/quiet.*$/quiet enforcing=0/' > /etc/grub.conf
  EOC
  not_if "grep -q enforcing /etc/grub.conf"
end

5002-14

9.MACアドレスの自動保存無効化

bash 'ignore mac' do
  user 'root'
  code <<-EOC
sed -i -e 's|/etc/udev/rules.d/70-persistent-net.rules|/dev/null|g' /lib/udev/write_net_rules
  EOC
  only_if "grep -q '70-persistent-net' /lib/udev/write_net_rules"
end

5002-15

10.fastestmirror.conf設定

bash 'fastestmirror' do
  user 'root'
  code <<-EOC
echo "include_only=.jp" | tee -a /etc/yum/pluginconf.d/fastestmirror.conf
  EOC
  not_if "grep -q ^'include_only=.jp' /etc/yum/pluginconf.d/fastestmirror.conf"
end

5002-16

11.TimeZone設定

bash 'timezone' do
  user 'root'
  code <<-EOC
cp -p /etc/localtime /etc/localtime.old
cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
  EOC
  not_if "strings /etc/localtime | grep -q 'JST'"
end

5002-17

12.Locale設定

bash 'locale' do
  user 'root'
  code <<-EOC
cp -p /etc/sysconfig/i18n /etc/sysconfig/i18n.old
cat /etc/sysconfig/i18n.old | sed 's/LANG.*$/LANG="ja_JP.utf8"/' > /etc/sysconfig/i18n
  EOC
  not_if "grep -q ja_JP /etc/sysconfig/i18n"
end

5002-18

13.レシピの実行

レシピが作成できましたので、Vagrantを用いてプロビジョニングを行います。

最初にプロビジョニングを行う際には、起動中のBoxを停止した後に、provisionオプションを指定してBoxを起動する必要があります。

$ vagrant halt
$ vagrant up --provision
$ vagrant halt
[default] Attempting graceful shutdown of VM...
DL is deprecated, please use Fiddle
$ vagrant up --provision
Bringing machine 'default' up with 'virtualbox' provider...
[default] Clearing any previously set forwarded ports...
[default] Fixed port collision for 22 => 2222. Now on port 2200.
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2200 (adapter 1)
[default] Booting VM...
[default] Waiting for machine to boot. This may take a few minutes...
DL is deprecated, please use Fiddle
[default] Machine booted and ready!
[default] Configuring and enabling network interfaces...
[default] Mounting shared folders...
[default] -- /vagrant
[default] -- /tmp/vagrant-chef-1/chef-solo-1/cookbooks
[default] Chef 11.8.2 Omnibus package is already installed.
[default] Running provisioner: chef_solo...
Generating chef JSON and uploading...
Running chef-solo...
[2014-01-16T23:40:30-05:00] INFO: Forking chef instance to converge...
[2014-01-16T23:40:30-05:00] INFO: *** Chef 11.8.2 ***
[2014-01-16T23:40:30-05:00] INFO: Chef-client pid: 2271
[2014-01-16T23:40:31-05:00] INFO: Setting the run_list to ["recipe[base]"] from JSON
[2014-01-16T23:40:31-05:00] INFO: Run List is ["recipe[base]"] 
[2014-01-16T23:40:31-05:00] INFO: Run List expands to [base]
[2014-01-16T23:40:31-05:00] INFO: Starting Chef Run for localhost
[2014-01-16T23:40:31-05:00] INFO: Running start handlers
[2014-01-16T23:40:31-05:00] INFO: Start handlers complete.
[2014-01-16T23:40:32-05:00] INFO: bash[network] ran successfully
[2014-01-16T23:40:32-05:00] INFO: bash[hostname] ran successfully
[2014-01-16T23:40:32-05:00] INFO: bash[hosts] ran successfully
[2014-01-16T23:40:33-05:00] INFO: bash[selinux] ran successfully
[2014-01-16T23:40:34-05:00] INFO: bash[grub] ran successfully
[2014-01-16T23:40:34-05:00] INFO: bash[ignore mac] ran successfully
[2014-01-16T23:40:34-05:00] INFO: bash[fastestmirror] ran successfully
[2014-01-17T13:40:35+09:00] INFO: bash[timezone] ran successfully
[2014-01-17T13:40:35+09:00] INFO: bash[locale] ran successfully
[2014-01-17T13:40:35+09:00] INFO: Chef Run complete in 3.328295292 seconds
[2014-01-17T13:40:35+09:00] INFO: Running report handlers
[2014-01-17T13:40:35+09:00] INFO: Report handlers complete
[2014-01-16T23:40:30-05:00] INFO: Forking chef instance to converge...

今回は、全てのレシピを一度に実行しましたが、レシピの作成の度にプロビジョニングを行うこともできます。最初のプロビジョニングを行った後は、Boxの停止をすること無くプロビジョニングを実行できますので、2回目以降のプロビジョニングでは、以下のコマンドを実行してプロビジョニングを行います。

$ vagrant provision

14.動作確認

プロビジョニング後のBoxに接続し、ホスト名やhostsファイルなどの各設定ファイルが、レシピとおりに変更されているか確認します。

$ vagrant ssh

5002-22

まとめ

ここまで、Chef環境の構築から仮想マシンの基本設定を行うレシピの実行までを解説しました。

第2回は、LAMP環境を構築するレシピを作成し、プロビジョニングを行う方法を解説します。


本ブログは、Git / Subversion のクラウド型ホスティングサービス「tracpath(トラックパス)」を提供している株式会社オープングルーヴが運営しています。

開発の効率化をしたい!もっと便利なツールを使いたい!そんなお悩みをtracpathで解決!

「tracpath(トラックパス)」は、企業内の情報システム部門や、ソフトウェア開発・アプリケーション開発チームに対して、開発の効率化を支援し、品質向上を実現します。
さらに、システム運用の効率化・自動化支援サービスも提供しています。
”つくる情熱を支えるサービス”を提供し、まるで専属のインフラエンジニアのように、あなたのチームを支えていきます。

クラウド型バグ管理・バージョン管理ソフトの「tracpath(トラックパス)」を提供しているオープングルーヴが運営しています

You Might Also Like