Chef Soloローカル開発環境の自動構築  ~knife-solo Apache,MySQL設定編~

実用的な例として、ApacheMySQLのインストールとサービスの立ち上げを
クックブックを作成しながら、Chef Soloで行う。 

1. ApacheMySQLのクックブックを作成
* Apacheのクックブックを作成
knife cookbook create apache -o site-cookbooks

* MySQLのクックブックを作成
knife cookbook create mysql -o site-cookbooks

  

2. Nodeオブジェクトを設定
nodes/192.168.33.11.jsonを編集してランリストに2つのレシピを追加し、
それぞれが適用されるようにする。 

ーーーーーーーーーーーーーーーーーーーーーーーーー
{
  "run_list":[
    "recipe[dstat]",
    "recipe[apache]",
    "recipe[mysql]"
  ]
}
ーーーーーーーーーーーーーーーーーーーーーーーーー

 

3. Apacheのレシピを作成
site-cookbooks/apache/recipes/default.rbに以下を追記。 
ーーーーーーーーーーーーーーーーーーーーーーーーー
package "httpd" do

  action :install
end

service "httpd" do
  action [ :enable, :start ]
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
※ :enableはOS起動時のサービスの有効化(/sbin/chkconfig httpd onに相当)
  :start はサービス起動(/sbin/service httpd startに相当)
※ packageやserviceといったキーワードを「リソース」と呼ぶ。 

 

4. MySQLのレシピを作成
site-cookbooks/mysql/recipes/default.rbに以下を追記。 
ーーーーーーーーーーーーーーーーーーーーーーーーー

remote_file "#{Chef::Config[:file_cache_path]}/mysql-community-release-el7-5.noarch.rpm" do
  source 'http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm'
  action :create
end

rpm_package 'mysql-community-release' do
  source "#{Chef::Config[:file_cache_path]}/mysql-community-release-el7-5.noarch.rpm"
  action :install
end

package "mysql-server" do
  action :install
end

service "mysqld" do
  action [ :enable, :start ]
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
 

5. knife-soloでChef Soloを実行
knife-soloを使ってリモートのノード(192.168.33.11)にプロビジョニングを実施。
knife solo cook 192.168.33.11


6. ブラウザで動作確認
http://192.168.33.11/ にアクセスしApacheのデフォルト画面が表示されることを確認。

 

7. Apacheの設定ファイルをChefで管理
* Apacheの設定、httpd.confもChefで管理できるようにしていく。
* VagrantにはホストOS(作業用マシン側)とゲストOS(仮想サーバ側)の間でディレクトを共有する機能があり、初期状態で有効になっている。試しに、ゲストOS側の /vagrantディレクトでlsを実行すると、ホストOS側で作ったVagrantfileそのほかのファイルが見えるはず。Vagrantfileを置いたディレクトリがゲストOSの /vagrantディレクトリとしてマウントされているので、このディレクトを使ってホストOSとゲストOSでのファイルのやり取りが可能。この機能を使って、ゲストOS側の /etc/httpd/conf/httpd.confをホストOS側のクックブック内のtemplate/defaultディレクトにコピーする。

* httpd.confのコピーを実行
cp /etc/httpd/conf/httpd.conf /vagrant/site-cookbooks/apache/templates/default/httpd.conf.erb

※ .erbはRubyの標準ライブラリのテンプレートエンジンであるERBの拡張子。
  ERBを使うと任意のテキストファイルにRubyスクリプトを埋め込み実行できる。
 

8. httpd.confを編集
ゲストOS側にApacheの変更を適用するため、
試しにhttpd.conf.erbに以下一文を追記する。

ServerName knife-solo.local.co.jp:80

 

9. レシピにtemplateリソースを記述
site-cookbooks/apache/recipes/default.rbに以下を追記。 
内容としては、httpd.conf.erb編集内容を/etc/httpd/conf/httpd.confに配置させ、
その際、ownerとgroupをrootでパーミッションを0644に設定せよという意味。

ーーーーーーーーーーーーーーーーーーーーーーーーー

template "httpd.conf" do
  path "/etc/httpd/conf/httpd.conf"
  owner "root"
  group "root"
  mode 0644
  notifies :reload, 'service[httpd]'
end
ーーーーーーーーーーーーーーーーーーーーーーーーー

 

10. ゲストOS側に変更内容を適用させる
以下コマンドを実行し、templateリソースの適用とApacheの設定が反映されたことを確認する。
knife solo cook 192.168.33.11