LAMP環境のCookbookをとりあえず作成してみる

Vagrantを試してみる
の続き
かつ、Macにchefとknife-soloがインストールされた状態。

LAMP環境のCookbookをとりあえず作成してみる。

ChefのリポジトリとCookbookの作成

適当な場所にChefのリポジトリを作成する。

$ cd 適当なディレクトリ
$ knife solo init chef-repo
$ cd chef-repo

Cookbookを作成する。

$ knife cookbook create lamp -o site-cookbooks

テンプレートの作成

テンプレートをいくつか作成する。

VitualHostの設定のテンプレート。

$ vi site-cookbooks/lamp/templates/default/vhost.conf.erb
ServerName localhost
NameVirtualHost *:80

<VirtualHost *:80>
   ServerName localhost
   DocumentRoot /vagrant
   <Directory /vagrant>
      AllowOverride all
   </Directory>
</VirtualHost>

MySQLにユーザーを作成するためのテンプレート。

$ vi site-cookbooks/lamp/templates/default/grants.sql.erb
GRANT ALL ON *.* TO '<%= @user %>'@'localhost' IDENTIFIED BY '<%= @password %>';
GRANT ALL ON *.* TO '<%= @user %>'@'%' IDENTIFIED BY '<%= @password %>';
FLUSH PRIVILEGES;

PHPタイムゾーンを設定するためのテンプレート。

$ vi site-cookbooks/lamp/templates/default/timezone.ini.erb
date.timezone = "Asia/Tokyo"

レシピの作成

とりあえずのLAMP環境を作成するためのレシピを作成する。

$ vi site-cookbooks/lamp/recipes/default.rb
#--------------------------------------
# package
#--------------------------------------

# Apacheをインストールする
#  sudo yum install -y httpd
package "httpd" do
    action :install
end

# MySQLをインストールする
#  sudo yum install -y mysql-server
package "mysql-server" do
    action :install
end

# PHPと関連するモジュールをインストールする
#  sudo yum install -y php
#  sudo yum install -y php-mbstring
#  sudo yum install -y php-mysql
package "php" do
    action :install
end
package "php-mbstring" do
    action :install
end
package "php-mysql" do
    action :install
end


#--------------------------------------
# service
#--------------------------------------

# Apacheの起動と自動起動の設定を行う
#  sudo service httpd start
#  sudo chkconfig on
service "httpd" do
  action [:start, :enable]
end

# MySQLの起動と自動起動の設定を行う
#  sudo service mysqld start
#  sudo chkconfig mysqld on
service 'mysqld' do
  action [:start, :enable]
end


#--------------------------------------
# execute
#--------------------------------------

# MySQLにユーザー作成のSQLを実行するコマンドを用意する
#  /usr/bin/mysql -u root --password="パスワード" < /tmp/grants.sql
execute "mysql-create-user" do
    command "/usr/bin/mysql -u root --password=\"#{node['db']['rootpass']}\" < /tmp/grants.sql"
    action :nothing
end


#--------------------------------------
# template
#--------------------------------------

# vhost.confを設置する
#  sudo vi /etc/httpd/conf.d/vhost.conf
template "vhost.conf" do
  path "/etc/httpd/conf.d/vhost.conf"
  source "vhost.conf.erb"
  mode 0644
  notifies :restart, 'service[httpd]'
end

# MySQLのユーザーを作成するためのSQLを設置し、SQLを実行する
#  sudo vi /tmp/grants.sql
template "/tmp/grants.sql" do
    owner "root"
    group "root"
    mode "0600"
    variables(
        :user     => node['db']['user'],
        :password => node['db']['pass'],
        :database => node['db']['database']
    )
    notifies :run, "execute[mysql-create-user]", :immediately
end

# timezoneを設定するためのiniを設置する
#  sudo vi /etc/php.d/timezone.ini
template "timezone.ini" do
  path "/etc/php.d/timezone.ini"
  source "timezone.ini.erb"
  mode 0644
  notifies :restart, 'service[httpd]'
end

nodesのjsonの作成例

nodesのjsonは、下記のような感じで書けばOK。

$ vi nodes/接続先.json
{
  "db": {
    "rootpass": "ルートのパスワード",
    "user":     "ユーザー名",
    "pass":     "パスワード"
  },
  "run_list": [
    "recipe[lamp]"
  ]
}
【参考】
DBが存在しないときにDBを作成するChefレシピを作ったときの試行錯誤メモ | misty-magic.h
http://mistymagich.wordpress.com/2013/10/08/db%E3%81%8C%E5%AD%98%E5%9C%A8%E3%81%97%E3%81%AA%E3%81%84%E3%81%A8%E3%81%8D%E3%81%ABdb%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8Bchef%E3%83%AC%E3%82%B7%E3%83%94%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%9F/

続き
ChefでVagrantの仮想マシンにLAMP環境を構築してみる